DM 服务器使用的内存大概分为 2 个部分缓冲区:数据缓冲区 BUFFER/KEEP/FAST/RECYCLE日志缓冲区 RLOG_BUF_SIZE内存池:共享内存池 MEMORY POOLmemory_target字典缓冲区 DICT_BUF_SIZESql 缓冲区 CACHE_POOL_SIZE备用内存池其他运行时内存池排序区Hash 区会话连接池虚拟机内存池
内存池
DM Server 的内存池包括共享内存池和其他一些运行时内存池。
动态视图 V$MEM_POOL 详细记录了当前系统中所有的内存池的状态,可通过查询这个动态视图掌握 DM Server 的内存使用情况。
共享内存池
共享内存是 dmserver 启动时,从操作系统中申请的一大片内存,可以在其他内存区或是缓冲区不够用的时候,申请或者释放。Memory_target: 共享内存的总大小。 0 :表示不限制(目标大小)Memory_pool : 共享内存池的大小(减少系统调用) 200MMemory_extent_size :增量大小Memory_n_pools : 共享内存池的个数。作用:负责为其他内存池已经达到其目标大小之后的拓展提供内存。
运行时内存池
运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。
缓冲区
数据缓冲区
在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。存在三条链来管理被缓冲的数据页一条“自由链”:未使用过的内存数据页,一条“LRU”链:存放已经使用过的内存数据页(包括未修改和已修改)一条”脏“链有:用于存放已经被修改过的内存数据页。1)四种类别:Normal (默认值,普通页) buffer 单位 M LRUKeep:很少或是几乎不怎么被淘汰出去的(普通页) keep 单位 MFast:常驻缓冲区,回滚页(用户不能指定) fast_pool_page 数据页总数。Recycle:临时表的数据页,正常淘汰(用户不能指定) recycle 单位 MDM 里面:用户不能指定使用 recycle 和 fast 缓冲区。Oracle:里面存的表的数据页DM:存的是表空间的数据页。
修改参数:SP_SET_PARA_VALUE(SCOPE,PARA_NAME,PARA_VALUE);
Scope: 1: 动态参数 2:静态参数
字典缓冲区
主要存的是一些数据字典的相关信息,如模式信息,表信息,列信息,触发器信息等。实例会将部分的数据字典信息加载到字典缓冲区中,并采用 lru 算法进行字典信息的控制。
相关的视图: V$DICT_CACHE_ITEM:字典缓冲区中的字典对象的信息;V$DICT_CACHE:字典缓冲区的信息
SQL 缓冲区
用于存储包信息( package), 执行计划,结果集缓冲的一片专用缓存区域,对于 sql 类型多, pkg 比较多,复杂的系统建议该参数调大
重做日志缓冲区
用于存重做日志的内存缓冲区,为了避免直接对磁盘 IO 进行随机写,将数据转换为顺序写,提高数据库写性能。
排序区
排序区是提供数据排序所需要的内存空间,如果内存无法完成,把部分的排序转到磁盘上,对外排序
哈希区
服务器中有 hash 相关操作,需要用到 hash 缓冲区, hash joinHJ_BUF_GLOBAL_SIZE: 全局 hash join 最大的内存空间。HJ_BUF_SIZE: 单次 hash_join 操作最大内存空间HAGR_BUF_SIZE: 单次 hash 分组操作最大内存空间
达梦社区地址:https://eco.dameng.com