一、内存相关
达梦数据库的内存主要包括共享内存池、缓冲区(数据缓冲区、日志缓冲区、字典缓冲区、sql缓冲区)、其他内存池构成(排序区、hash区、会话内存池,虚拟机内存池等)构成。其中排序区、hash区是从共享内存池中申请资源,会话内存池,虚拟机内存池是从操作系统内存中申请资源。
(一)共享内存池
共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。
在 DM Server 的运行期间,经常会申请与释放小片内存,而向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。
采用共享内存池则可一次向操作系统申请一片较大内存,即为内存池,当系统在运行过程中需要申请内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。
共享内存池相当于一个库存,一个保障。其他区域(如排序区、hash区等)不够的时候,可以向共享内存池申请内存,当其用完时还给共享内存池。
当共享内存池也不够的时候,则向操作系统申请,MEMORY_EXTENT_SIZE指定了共享内存池每次扩展的大小。
与共享内存池相关的参数如下:
1. MEMORY_POOL:
共享内存池初始值,以M为单位,默认200。有效值范围:64~67108864。在物理内存较大的情况下,比如大于64G,可以将MEMORY_POOL设置为2048,即2G(也就是说高并发时应调大,避免频繁向os申请内存)(例子:一个cpu:4路8核,内存:256,磁盘阵列:1T密集交易型数据库服务器的MEMORY_POOL参数可以设置为2048,即2G)
2. MEMORY_EXTENT_SIZE
共享内存池每次扩充的大小
3.MEMORY_TARGET:
共享内存池能扩充到的最大大小,以M为单位,默认为0,即没有限制最大值。
(二)数据缓冲区
主要包含Normal缓冲区、Keep缓冲区、RECYCLE缓冲区、FAST缓冲区4种。
1.NORMAL(普通) 缓冲区
NORMAL(普通) 缓冲区主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下, 默认缓冲区为 NORMAL。用户可以在创建表空间或修改表空间时,指定表空间属于 NORMAL 或 KEEP 缓冲区。默认是NORMAL 。
与NORMAL(普通) 缓冲区相关的参数如下:
(1)BUFFER
系统缓冲区大小,以兆为单位。推荐值:系统缓冲区大小为可用物理内存的 60%~80%。有 效值范围(8~1048576)
(2)MAX_BUFFER
数据缓冲区扩展最大值,建议配置成=BUFFER
(3)BUFFER_POOLS
BUFFER 系统分区数(一般配置为质数),每个 BUFFER 分区的大
小为 BUFFER/BUFFER_POOLS,并发较大的系统需要配置这个参数,减少数据缓冲区并发冲突,建议BUFFER/ BUFFER_POOLS>=500MB。在内存不大的情况下,建议调小该值。
(例子:一个cpu:4路8核,内存:256,磁盘阵列:1T密集交易型数据库服务器的BUFFER_POOLS参数可以设置为101,即建议BUFFER/ BUFFER_POOLS>=500MB)
2.KEEP(驻留)缓冲区
KEEP (驻留) 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去, 主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为KEEP。达梦的KEEP 缓冲区只能在表空间级别进行设置。
(1)KEEP
KEEP缓冲区大小,以兆为单位。有效值范围 (8~1048576)
3.RECYCLE(临时) 缓冲区
RECYCLE(临时) 缓冲区供临时表空间使用,用户不能指定使用 RECYCLE(临时) 和 FAST(回滚) 缓冲区的表或表空间。RECYCLE和FAST的是数据库系统自动调节的。
相关的参数如下:
(1)RECYCLE
RECYCLE(临时)缓冲区大小,以M为单位。有效值范围(8~1048576),建议设置为500M以上,高并发或大量使用with,临时表,排序等应该调大(例子:一个cpu:4路8核,内存:256,磁盘阵列:1T密集交易型数据库服务器的BRECYCLE参数可以设置为5000,即5G)
(2)RECYCLE_POOLS
RECYCLE 缓冲区分区数,每个 RECYCLE 分区 的大小为 RECYCLE/RECYCLE_POOLS。有效 值范围(1~512)
4.FAST(回滚) 缓冲区
FAST(回滚) 缓冲区根据用户指定的 FAST_POOL_PAGES 大小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。
(1)FAST_POOL_PAGES
快速缓冲区页数。默认值3000,有效值范围(0~99999)。 FAST_POOL_PAGES 的值最多不能超过 BUFFER 总页数的一半,如果超过,系统会自 动调整为 BUFFER 总页数的一半
(三)日志缓冲区
日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。
相关参数:
1. RLOG_POOL_SIZE
最大日志缓冲区大小(以 M 为单位)。默认为128M 。
一般在内存小于16G的情况下,建议设置为256M,
内存大于16G,小于64G,建议设置为1024M,
当内存大于64G时,建议设置为2048M。
(四)字典缓冲区
字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。
相关参数:
1. DICT_BUF_SIZE
字典缓冲区大小,以 M 为单位,默认为5M,如果数据库中对象数量较多,或者存在大量分区表,可适当调大。建议改成50M以上。
(五)SQL缓冲区
SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。
有关参数:
CACHE_POOL_SIZE
SQL 缓冲池大小,以兆为单位。默认值20m ,有效值范围: 32 位平台下为(1~2048);64 位平台下为 (1~67108864)。单位:MB
一般在内存小于等于16G的情况下,建议设置为200M
内存大于16G,小于等于64G,建议设置为1024M
当内存大于64G时,建议设置为2048M。
一般配置为1000-4000
(六)排序区
相关参数:
1.SORT_FLAG
排序机制,默认为0,参数含义:0:原排序机制;1:新排序机制。
在内存大于64G时建议使用新排序机制,其他情况使用原排序机制。
2.SORT_BUF_SIZE
原排序机制下,排序缓存区最大值,以 M 为单 位。有效值范围(1~2048)
在内存小于64G时建议设置为10M,大于64G时建议设置为512M。
3.SORT_BUF_GLOBAL_SIZE
新排序机制下,排序全局内存使用上限,以 M 为单位。有效值范围(10~4294967294)
默认为1000M。当内存小于16G时,建议设置为500M,大于16G小于64G时建议设置为2000,当内存大于64G时,建议设置为5120M。
4.SORT_BLK_SIZE
默认为 1M,新排序机制下,每个排序分片空间的大小,必须小于 SORT_BUF_GLOBAL_SIZE。
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。
(七)hash区
1.HJ_BUF_SIZE :
单个hash使用的内存。单个 HASH 连接操作符的数据总缓存大小,以 兆为单位。有效值范围(2~100000),默认50m
有大表的hash连接应调大
(1)在服务器物理内存小于等于16GB的情况下,建议使用默认值50M;
(2)当物理内存大于16GB,小于等于64GB时,建议将HJ_BUF_SIZE 设置为500M;
(3)当物理内存大于64GB时,建议将HJ_BUF_SIZE 设置为1000M
2.HJ_BUF_GLOBAL_SIZE
哈希连接使用的内存空间的上限,以兆为单位
HASH 连接操作符的数据总缓存大小(>= HJ_BUF_SIZE),系统级参数,以兆为单位。 有效值范围(10~500000),默认值500m
高并发,hash操作多的话应调大
(1)在服务器物理内存小于等于16GB的情况下,建议使用默认值500M。
(2)当物理内存大于16GB,小于64GB时 。 建议将HJ_BUF_GLOBAL_SIZE 设置为10000M以上。
(3)当物理内存大于64GB时,建议将HJ_BUF_GLOBAL_SIZE 设置为设置为15000M以上。
3.HAGR_BUF_SIZE
单个 HAGR、DIST、集合操作、SPL2、NTTS2以及 HTAB 操作符的数据总缓存大小,默认值50M。
(1)当物理内存大于16GB,小于64GB时,建议将HAGR_BUF_SIZE设置为500M
(2)当物理内存大于64GB时,建议将HAGR_BUF_SIZE 设置为1000M。
4.HAGR_BUF_GLOBAL_SIZE
HAGR、DIST、集合操作、SPL2、NTTS2 以及HTAB 操作符的数据总缓存大小(>= HAGR_BUF_SIZE),默认为500 M。
(1)当物理内存大于16GB,小于64GB时,建议将HAGR_BUF_GLOBAL_SIZE设置为10000M以上。
(2)当物理内存大于64GB时,建议将HAGR_BUF_GLOBAL_SIZE设置为15000M以上。
二、线程相关
(一)工作线程
Dm数据库是单进程多线程结构,当有一个session过来的时候,dm会专门为这个session安排一个工作线程。
相关参数:
WORKER_THREADS:
默认值是2
建议改成逻辑CPU数量
(二)任务线程
当工作线程满负荷的时候,如果还有会话连接进来,此时任务线程将新的会话任务放到任务队列中,待工作线程完成之后,工作线程就会去任务队列中领任务……循环往复。任务线程相当于前台,接待会话,并将这些任务分配好,放到任务队列中,工作线程就从任务队列中取任务来完成。工作线程是实实在在干活的,任务线程是接待session会话以及分配任务的。
TASK_THREADS
默认值是4
1)逻辑CPU数量少于8时设置为4
2)逻辑CPU数量大于等于64时,设置为16
是 DM Seer 在启动时从操作系统申请的一大片内存。在 DM Server 的
运行期间,经常会申请与释放小片内存,而向操作系统申请和释放内存时需要发出系统调用,
此时可能会引起线程切换,降低系统运行效率。采用共享内存池则可一次向操作系统申请一
片较大内为内存池,当系统在运行过程中需要申请内存时,可在共享内存池内进行申
请,当用完该内存时,再释放掉,即归还给共享内存池。