达梦官方针对常见各内存配置做了如下参数推荐供各位学习参考!
| 主机物理内存配置(G) | 16 | 32 | 64 | 128 | 256 |
|---|---|---|---|---|---|
| MAX_SESSIONS(个) | 200 | 1000 | 2000 | 4000 | 5000 |
| MAX_SESSION_MEMORY(G) | 2 | 6 | 12 | 36 | 36 |
| DM 软件内存占用(G) | 5 | 5 | 5 | 5 | 5 |
| MAX_OS_MEMORY | 100 | 100 | 100 | 100 | 100 |
| MEMORY_POOL(M) | 2048 | 2048 | 2048 | 2048 | 2048 |
| BUFFER(M) | 8000 | 17000 | 33000 | 66000 | 131000 |
| MAX_BUFFER(M) | 8000 | 17000 | 33000 | 66000 | 131000 |
| BUFFER_POOLS(个) | 23 | 43 | 83 | 101 | 101 |
| RECYCLE(M) | 2000 | 4000 | 8000 | 16000 | 33000 |
| HJ_BUF_GLOBAL_SIZE(M) | 1000 | 2000 | 4000 | 8000 | 15000 |
| HJ_BUF_SIZE(M) | 500 | 500 | 1000 | 1000 | 1000 |
| HAGR_BUF_GLOBAL_SIZE(M) | 1000 | 2000 | 4000 | 8000 | 15000 |
| HAGR_BUF_SIZE(M) | 500 | 500 | 1000 | 1000 | 1000 |
| SESS_POOL_SIZE(K) | 16 | 16 | 32 | 32 | 32 |
| SESS_POOL_TARGET(M)K | 16384 | 16384 | 16384 | 16384 | 32768 |
| CACHE_POOL_SIZE(M) | 1024 | 1024 | 2048 | 2048 | 2048 |
| DICT_BUF_SIZE(M) | 500 | 500 | 500 | 500 | 500 |
| SORT_FLAG | 0 | 0 | 1 | 1 | 1 |
| SORT_BLK_SIZE(M) | 1 | 1 | 1 | 1 | 1 |
| SORT_BUF_SIZE(M) | 10 | 10 | 512 | 512 | 512 |
| SORT_BUF_GLOBAL_SIZE(M) | 2000 | 2000 | 5120 | 5120 | 5120 |
达梦数据库的配置文件 dm.ini 中参数属性分为三种:静态、动态和手动。
- 静态,可以被动态修改,修改后重启服务器才能生效;
- 动态,可以被动态修改,修改后即时生效;
- 手动,不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。
动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。
下列是内存相关参数的解释:
| 参数名 | 缺省值 | 属性 | 说明 |
| MAX_OS_MEMORY | 100 | 静态 | DM服务器能使用的最大内存占操作系统物理内存与虚拟内存总和的百分比,取值范围40~100。当取值100时,服务器不进行内存的检查 注:对于32位版本的DM服务器,虚拟内存最大为2G |
| MEMORY_POOL | 500 | 静态 | 共享内存池大小,单位MB。共享内存池是由DM管理的内存。取值范围:32位平台为64~2000,64位平台为64~67108864 |
| MEMORY_N_POOLS | 1 | 静态 | 共享内存池个数,取值范围0~2048,0与1等价,即共享池不分片。分片时,每池的初始容量为MEMORY_POOL / MEMORY_N_POOLS, 但受最小初始容量为30M限制,因此实际分片数可能会小于MEMORY_N_POOLS,每个池的TARGET也按此方式由MEMORY_TARGET导出 |
| MEMORY_TARGET | 15000 | 动态,系统级 | 共享内存池在扩充到此大小以上后,空闲时收缩回此指定大小,单位MB,取值范围:32位平台为0~2000,64位平台为0~67108864,0表示不限制 |
| MEMORY_EXTENT_SIZE | 1 | 静态 | 共享内存池每次扩充的大小,单位MB,取值范围1~10240 |
| MEMORY_LEAK_CHECK | 0 | 动态,系统级 | 是否开启内存泄漏检测。0:否;1:是,此时系统对每一次内存分配都登记到动态视图V$MEM_REGINFO中, 并在释放时解除登记 |
| MEMORY_MAGIC_CHECK | 1 | 静态 | 是否开启对所有内存池的校验。0:不开启;1:开启校验,校验码基于分配出的块地址计算,在被分配空间的头部和尾部写入校验码;2:增强校验,在1的基础上,如果是内存池分配的,则对尾部未使用空间也计算校验码,写入未使用空间的头部 |
| HUGEPAGE_THRESHOLD | 16 | 动态,系统级 | 如果从OS申请内存的尺寸大于等于 HUGEPAGE_THRESHOLD * 2MB, 则尝试先申请巨页内存,若失败再申请常规内存; 0表示不尝试使用巨页内存。取值范围0~1024。注:本参数仅对LINUX操作系统有效,使用巨页内存需要对OS进行相关配置 |
| MEMORY_BAK_POOL | 4 | 静态 | 系统备份内存池大小,单位MB。系统备份内存池是由DM管理的内存。取值范围2~2048 |
| HUGE_MEMORY_PERCENTAGE | 50 | 静态 | 指示HUGE_BUFFER中可以借用作常规内存分配的空间百分比,取值范围0~100 |
| HUGE_BUFFER | 80 | 静态 | HUGE表使用的缓冲区大小,单位MB。取值范围80~1048576 |
| HUGE_BUFFER_POOLS | 4 | 静态 | HUGE BUFFER系统分区数,每个HUGE BUFFER分区的大小为HUGE_BUFFER/HUGE_BUFFER_POOLS。取值范围1~512 |
| BUFFER | 1000 | 静态 | 系统缓冲区大小,单位MB。推荐值:系统缓冲区大小为可用物理内存的60%~80%。取值范围8~1048576 |
| BUFFER_POOLS | 19 | 静态 | BUFFER系统分区数,每个BUFFER分区的大小为BUFFER/BUFFER_POOLS。取值范围1~512 |
| FAST_POOL_PAGES | 3000 | 静态 | 快速缓冲区页数。取值范围0~99999999。 FAST_POOL_PAGES的值最多不能超过BUFFER总页数的一半,如果超过,系统会自动调整为BUFFER总页数的一半 |
| FAST_ROLL_PAGES | 1000 | 静态 | BUFFER中FAST POOL回滚页数量。取值范围0~9999999,最多不超过FAST_POOL_PAGES的75%,如果超过,系统会自动调整。填充规则:将回滚表空间0号文件的0~FAST_ROLL_PAGE-1号页填入FAST POOL中 |
| KEEP | 8 | 静态 | KEEP缓冲区大小,单位MB。取值范围8~1048576 |
| RECYCLE | 300 | 静态 | RECYCLE缓冲区大小,单位MB。取值范围8~1048576 |
| RECYCLE_POOLS | 19 | 静态 | RECYCLE缓冲区分区数,每个RECYCLE分区的大小为RECYCLE/RECYCLE缓冲区分区数。取值范围1~512。一般情况下,每个RECYCLE分区的大小为RECYCLE/RECYCLE_POOLS,但系统也会自动校正RECYCLE缓冲区分区数,以保证每个分区中数据页不少于3000页 |
| MULTI_PAGE_GET_NUM | 1 | 静态 | 缓冲区最多一次读取的页面数,当且仅当ENABLE_FREQROOTS=0时有效。取值范围1~64。 当ENABLE_FREQROOTS值非0时,为开启动态FAST POOL填充模式,此时系统会强制调整MULTI_PAGE_GET_NUM=1,并关闭预加载功能。 注:当数据库加密时不支持多页读取,此时dm.ini中此参数值无效 |
| PRELOAD_SCAN_NUM | 0 | 动态,系统级 | 数据页首次预加载时连续扫描的页数,取值范围0~64。取值为0时关闭数据页预加载功能。 注:PRELOAD_SCAN_NUM实际有效范围为0 ~ EXTENT_SIZE – 2,当大于EXTENT - 2时将会间接失效预加载 |
| PRELOAD_EXTENT_NUM | 0 | 动态,系统级 | 数据页首次预加载的簇数量,取值范围0~64。取值为0时关闭数据页预加载功能 |
| SORT_FLAG | 0 | 动态,会话级 | 排序机制。 0:原排序机制,普通排序方式,按照排序缓冲区SORT_BUF_SIZE大小获取数据,并进行排序; 1:新排序机制,大内存排序方式,将大内存排序缓冲区SORT_BUF_GLOBAL_SIZE按照内存片大小SORT_BLK_SIZE进行分片,并对每个内存片进行排序,再对整个大内存排序缓冲区的数据进行排序; 2:采用SORT_FLAG为0的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序; 3:采用SORT_FLAG为1的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序 |
| SORT_ADAPTIVE_FLAG | 0 | 动态,会话级 | 自适应排序区大小的方式。 0:不进行自适应; 1:SORT_FLAG为0、2时,计算待排序数据的实际排序所需要的内存大小,尽可能地分配所需要的内存,如果申请失败则减半申请,直到申请成功,并按照实际申请的内存大小代替SORT_BUF_SIZE大小进行使用。对进行过刷盘的数据进行排序时,计算排序所需要的内存,尽可能地放大排序内存,保证一次排序可以结束排序。SORT_FLAG为1、3时,根据SORT_BUF_GLOBAL_SIZE和分片内存最大10000个的限制,计算SORT_BLK_SIZE的最小值,如果SORT_BLK_SIZE小于最小值,则实际按照最小值来分片。对整个大内存排序缓冲区的数据进行排序时,计算排序所需要的内存,尽可能地放大排序内存,保证一次排序可以结束排序; 2:SORT_FLAG为0、2时,按照行数估算待排序数据的实际排序所需要的内存大小,找到最适合排序算法的内存大小。当待排序的数据行数超过50万时,才开启此优化,数据量太小无需优化; 3:1和2的组合。当SORT_FLAG为0、2,计算待排序数据的实际排序所需要的内存大小时,采用SORT_ADAPTIVE_FLAG为2的按照行数估算待排序所需要内存大小。除此之外的其他情况均保持SORT_ADAPTIVE_FLAG为1的方式 |
| SORT_BUF_SIZE | 20 | 动态,会话级 | 原排序机制下,排序缓存区最大值,单位MB。取值范围1~2048 |
| SORT_BUF_GLOBAL_SIZE | 1000 | 动态,系统级 | 新排序机制下,排序全局内存使用上限,单位MB。取值范围10~4294967294 |
| SORT_BLK_SIZE | 1 | 动态,会话级 | 新排序机制下对数据进行排序的排序缓冲区分片大小,单位MB。取值范围1~50。 SORT_BLK_SIZE一般不需要设置太大,该内存片大小能容纳1万至5万行待排序的数据即可。该值大小不会超过SORT_BUF_SIZE,超过会重置为SORT_BUF_SIZE。为了保证归并排序的效率,对于大内存排序缓冲区的总的分片个数系统上限为10000个,因此,当SORT_BUF_GLOBAL_SIZE足够大的时候,为了保证大内存排序缓冲区能容纳足够多的数据,需要适当调大SORT_BLK_SIZE。例如,当SORT_BLK_SIZE为1时,SORT_BUF_GLOBAL_SIZE的最大可用值为10000。如果SORT_BUF_GLOBAL_SIZE需要20000M可用空间排序时,需要设置SORT_BLK_SIZE最小为2 |
| HAGR_HASH_SIZE | 100000 | 动态,会话级 | HAGR操作时,建立HASH表的桶个数。取值范围10000~100000000 |
| MAL_LEAK_CHECK | 0 | 动态,系统级 | 是否打开MAL内存泄露检查。0:关闭;1:打开 MAL_LEAK_CHECK为1时,可查询V$MAL_USING_LETTERS检查MAL内存泄露。 |
| HJ_BUF_GLOBAL_SIZE | 5000 | 动态,系统级 | HASH 连接操作符的数据总缓存大小(>HJ_BUF_SIZE),系统级参数,单位MB。取值范围10~500000 |
| HJ_BUF_SIZE | 500 | 动态,会话级 | 单个HASH连接操作符的数据总缓存大小,单位MB,必须小于HJ_BUF_GLOBAL_SIZE。取值范围2~100000 |
| HJ_BLK_SIZE | 2 | 动态,会话级 | HASH连接操作符每次分配缓存(BLK)大小,单位MB,必须小于HJ_BUF_SIZE。取值范围1~50 |
| HAGR_BUF_GLOBAL_SIZE | 5000 | 动态,系统级 | HAGR、DIST、集合操作、SPL2、NTTS2以及HTAB操作符的数据总缓存大小(>= HAGR_BUF_SIZE),系统级参数,单位MB。取值范围10~1000000 |
| HAGR_BUF_SIZE | 500 | 动态,会话级 | 单个HAGR、DIST、集合操作、SPL2、NTTS2以及HTAB操作符的数据总缓存大小,单位MB。取值范围2~500000。 如果HAGR_BUF_SIZE设置的值满足范围且大于HAGR_BUF_GLOBAL_SIZE,那么会在HAGR_BUF_GLOBAL_SIZE/2和500000两个值中,选出较小的那个,作为新的HAGR_BUF_SIZE值 |
| HAGR_BLK_SIZE | 2 | 动态,会话级 | HAGR、DIST、集合操作、SPL2、NTTS2以及HTAB操作符每次分配缓存(BLK)大小,单位MB,必须小于HAGR_BUF_SIZE。取值范围1~50 |
| MTAB_MEM_SIZE | 8 | 动态,系统级 | MTAB缓存BDTA占用内存空间的大小,单位KB,取值范围1~1048576 |
| FTAB_MEM_SIZE | 0 | 静态 | FTAB缓存BDTA占用内存空间的大小,单位KB。取值范围为0~64 * 1024。0表示使用MTAB,大于0时才使用FTAB。当取值小于32时,FTAB_MEM_SIZE均使用32 |
| MMT_SIZE | 0 | 动态,会话级 | 是否使用MMT。0:不启用;其他有效值:启用,并确定单个映射文件大小,必须小于MMT_GLOBAL_SIZE。取值范围0~64,单位MB |
| MMT_GLOBAL_SIZE | 4000 | 动态,系统级 | 系统总共使用MMT的文件总大小,单位MB,取值范围10~1000000,仅在MMT_SIZE大于0时有效 |
| MMT_FLAG | 1 | 动态,会话级 | MMT存储数据方式。1:按页存储;2:BDTA存储。仅在MMT_SIZE大于0时有效 |
| DICT_BUF_SIZE | 50 | 静态 | 字典缓冲区大小,单位MB,取值范围1~67108864 |
| HFS_CACHE_SIZE | 160 | 动态,系统级 | HUGE表 I/U/D 时HDTA_BUFFER缓存池大小,单位为MB。取值范围160~2000 |
| VM_STACK_SIZE | 256 | 静态 | 系统执行时虚拟机堆栈大小,单位KB,堆栈的空间是从操作系统中申请的,取值范围64~256*1024) |
| VM_POOL_SIZE | 64 | 静态 | 系统执行时虚拟机内存池大小,单位KB,在执行过程中用到的内存大部分是从这里申请的,它的空间是从操作系统中直接申请的,取值范围32~1024*1024 |
| VM_POOL_TARGET | 16384 | 静态 | 虚拟机内存池能扩充到的最大大小,单位KB,取值范围0~10*1024*1024,0表示不限制 |
| SESS_POOL_SIZE | 64 | 动态,系统级 | 会话缓冲区大小,单位KB,取值范围16~1024*1024。若所申请的内存超过实际能申请的大小,则系统将按16KB大小重新申请 |
| SESS_POOL_TARGET | 16384 | 动态,系统级 | 会话缓冲区能扩充到的最大大小,单位KB,取值范围0~10*1024*1024,0表示不限制 |
| RT_HEAP_TARGET | 8192 | 动态,系统级 | 会话上用于动态对象存储的RT_HEAP最大可扩展到的大小,单位KB,取值范围8192~10*1024*1024 |
| VM_MEM_HEAP | 0 | 动态,系统级 | VM是否使用HEAP分配内存。0:MEMORY POOL模式;1:HEAP模式;2:MEMORY POOL和HEAP混合模式 |
| RFIL_RECV_BUF_SIZE | 16 | 静态 | 控制服务器启动时,进行REDO操作过程中,REDO日志文件恢复时BUFFER的大小,单位MB,取值范围16~4000 |
| HAGR_DISTINCT_HASH_TABLE_SIZE | 10000 | 动态,会话级 | 分组DISTINCT操作中HASH表的大小(桶数)。取值范围为10000~100000000 |
| CNNTB_HASH_TABLE_SIZE | 100 | 动态,会话级 | 指定CNNTB操作符中创建HASH表的大小。取值范围100~100000000 |
| GLOBAL_RTREE_BUF_SIZE | 100 | 动态,会话级 | R树全局缓冲区大小,单位MB |
| SINGLE_RTREE_BUF_SIZE | 10 | 动态,会话级 | 单个R树的缓冲区大小,单位MB,必须小于GLOBAL_RTREE_BUF_SIZE |
| SORT_OPT_SIZE | 0 | 静态 | 整型/浮点型数据排序优化辅助空间大小,对应待排序数组的最大最小差值,单位MB,取值范围0~1024。取值1M时对应待排序数组的最大最小差值为262144,超过则不能使用优化。 |
| TSORT_OPT | 1 | 动态,系统级 | 排序优化选项。0:排序操作一律使用估算的行数分配内存(至少2M);1:打开优化,排序操作结果行数较少时,使用实际的记录行数分配内存 |
| BIND_PLN_PERCENT | 30 | 静态 | 固定计划占据计划缓存空间的最大比例,取值范围0~100 |
| FBACK_HASH_SIZE | 10000 | 动态,系统级 | 闪回系统中HASH表的桶个数。取值范围10000~1000000 |
| XBOX_MEMORY_TARGET | 1024 | 动态,系统级 | XBOX 系统内存在扩充到此大小以上后,空闲时收缩回此指定大小,单位MB。取值范围1024~262144 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




