签到成功

知道了

CNDBA社区CNDBA社区

DM 达梦数据库 生产环境 参数优化 说明

2020-12-02 18:36 1267 0 原创 DM 达梦
作者: Dave

在之前的博客,我们了解了相关的背景知识,如下:

DM7 达梦数据库 内存结构 说明
https://www.cndba.cn/dave/article/3577

DM7 达梦数据库 参数 修改方法
https://www.cndba.cn/dave/article/3578

本片我们将学习生产环境如何设置达梦的参数。 达梦参数可以通过V$PARAMETER或者v$DM_INI参数查看。 对于生产环境,我们需要进行相应的修改,以保证数据库的性能。

1 内存有关的参数

达梦的内存结构主要包括内存池、缓冲区、排序区、哈希区。 这些参数的默认值都很小。 生产环境需要根据服务器的配置进行相应的修改。

1.1 内存池

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep MEMORY
    MAX_OS_MEMORY             = 100      #Maximum Percent Of OS Memory
    MEMORY_POOL               = 250      #Memory Pool Size In Megabyte
    MEMORY_TARGET             = 5000     #Memory Share Pool Target Size In Megabyte
    MEMORY_EXTENT_SIZE        = 1        #Memory Extent Size In Megabyte
    MEMORY_LEAK_CHECK         = 0        #Memory Pool Leak Checking Flag
    MEMORY_MAGIC_CHECK        = 1        #Memory Pool Magic Checking Flag
    MEMORY_BAK_POOL           = 4        #Memory Backup Pool Size In Megabyte
    HUGE_MEMORY_PERCENTAGE    = 50       #Maximum percent of HUGE buffer that can be allocated to work as common memory pool
[dave@www.cndba.cn ~]#

通过查询达梦内存池的参数很多,我们这里只需要关注MEMORY_POOL 和 MEMORY_TARGET。

MEMORY_POOL :共享内存池初始大小,以M为单位。共享内存池是由DM管理的内存。有效值范围:64~67108864。
MEMORY_TARGET: 共享内存池在扩充最大值,以M为单位,有效值范围:0~67108864,0表示不限制。

在物理内存较大的情况下,比如大于64G,可以将MEMORY_POOL设置为2048,即2G。 同时也建议设置 MEMORY_TARGET参数,该参数默认为0,不受限制。

1.2 缓冲区

1.2.1 数据缓冲区

1.2.1.1 Normal 缓冲区(buffer)

NORMAL 缓冲区主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下, 默认缓冲区为 NORMAL;

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep BUFFER
                HUGE_BUFFER               = 80               #Initial Huge Buffer Size In Megabytes
                HUGE_BUFFER_POOLS         = 4                #number of Huge buffer pools
                BUFFER                     = 2000            #Initial System Buffer Size In Megabytes
                BUFFER_POOLS               = 7                #number of buffer pools
[dave@www.cndba.cn ~]#

通过以上查询可以看出,达梦中的缓冲区有两种类型,buffer 和 huge_buffer, 在没有使用列存储表的情况下,可以不用修改huge buffer 参数。

DM7 达梦数据库 列存储表 HUGE表 管理说明
https://www.cndba.cn/cndba/dave/article/3583

在一般的系统中,我们重点需要修改的是2个buffer 参数, 该参数对性能影响较大:https://www.cndba.cn/dave/article/4321

BUFFER:系统缓冲区大小,以 M 为单位。推荐值:系统缓冲区大小为可用物理内存的 60%~80%。有效值范围(8~1048576)
BUFFER_POOLS : BUFFER 系统分区数,每个 BUFFER 分区的大小为 BUFFER/BUFFER_POOLS。默认值是19,在内存不大的情况下,建议调小该值。

1.2.1.2 Keep 缓冲区

KEEP 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去, 主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为KEEP。

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep KEEP
                KEEP                            = 8          #system KEEP buffer size in Megabytes
[dave@www.cndba.cn ~]#

KEEP: KEEP 缓冲区大小,以 M 为单位。默认8M,有效值范围(8~1048576)。

达梦的KEEP 缓冲区只能在表空间级别进行设置,具体配置参考之前的博客:https://www.cndba.cn/dave/article/4321

DM7 达梦数据库 表空间 管理 说明
https://www.cndba.cn/cndba/dave/article/3569

1.2.1.3 RECYCLE 和FAST缓冲区

RECYCLE 缓冲区供临时表空间使用,FAST 缓冲区根据用户指定的 FAST_POOL_PAGES 大小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep FAST
                FAST_POOL_PAGES        = 3000                  #number of pages for fast pool
[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep RECYCLE
                RECYCLE           = 500            #system RECYCLE buffer size in Megabytes
                RECYCLE_POOLS     = 2               #Number of recycle buffer pools
[dave@www.cndba.cn ~]#

RECYCLE :RECYCLE 缓冲区大小,以 M 为单位。有效值范围(8~1048576),建议设置为500M以上。
RECYCLE_POOLS:RECYCLE 缓冲区分区数,每个 RECYCLE 分区的大小为 RECYCLE/RECYCLE_POOLS。有效值范围(1~512)
FAST_POOL_PAGES : 快速缓冲区页数。有效值范围(0~99999)。 FAST_POOL_PAGES 的值最多不能超过BUFFER 总页数的一半,如果超过,系统会自动调整为 BUFFER 总页数的一半。

1.2.2日志缓冲区

日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep RLOG_POOL_SIZE
                RLOG_POOL_SIZE                  = 256                   #Redo Log Pool Size In Megabyte
[dave@www.cndba.cn ~]#

RLOG_POOL_SIZE :最大日志缓冲区大小(以 M 为单位)。默认为128M 。
一般在内存小于16G的情况下,建议设置为256M,内存大于16G,小于64G,建议设置为1024M,当内存大于64G时,建议设置为2048M。

1.2.3字典缓冲区

字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep DICT
                DICT_BUF_SIZE                   = 50                    #dictionary buffer size in Megabytes

DICT_BUF_SIZE:该参数默认值为5M,有效值范围(1~2048)。建议改成50M以上。

1.2.4SQL缓冲区

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep CACHE_POOL_SIZE
                CACHE_POOL_SIZE                 = 200                   #SQL buffer size in megabytes
[dave@www.cndba.cn ~]#

CACHE_POOL_SIZE默认值20M,一般在内存小于16G的情况下,建议设置为200M,内存大于16G,小于64G,建议设置为1024M,当内存大于64G时,建议设置为2048M。

1.3 排序区

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep SORT_
                SORT_BUF_SIZE            = 10        #maximum sort buffer size in Megabytes
                SORT_BLK_SIZE            = 1         #maximum sort blk size in Megabytes
                SORT_BUF_GLOBAL_SIZE     = 500       #maximum global sort buffer size in Megabytes
                SORT_FLAG                = 0         #choose method of sort
                SORT_OPT_SIZE            = 0         #once max memory size of radix sort assist count array
[dave@www.cndba.cn ~]#

SORT_FLAG:默认为0,参数含义:0:原排序机制;1:新排序机制。 在内存大于64G时建议使用新排序机制,其他情况使用原排序机制。

SORT_BUF_SIZE:默认为2。在内存小于64G时建议设置为10M,大于64G时建议设置为512M。

SORT_BUF_GLOBAL_SIZE,默认为1000M。当内存小于16G时,建议设置为500M,大于16G小于64G时建议设置为2000,当内存大于64G时,建议设置为5120M。

SORT_BLK_SIZE:默认为 1M,新排序机制下,每个排序分片空间的大小,必须小于 SORT_BUF_GLOBAL_SIZE。

1.4 哈希区

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep HJ_BUF
                HJ_BUF_GLOBAL_SIZE              = 500                   #maximum hash buffer size for all hash join in Megabytes
                HJ_BUF_SIZE                     = 50                    #maximum hash buffer size for single hash join in Megabytes
[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini |grep HAGR_BUF
                HAGR_BUF_GLOBAL_SIZE            = 500                   #maximum buffer size for all hagr in Megabytes
                HAGR_BUF_SIZE                   = 50                    #maximum buffer size for single hagr in Megabytes
[dave@www.cndba.cn ~]#

HJ_BUF_SIZE : 单个 HASH 连接操作符的数据总缓存大小,默认值50M。

HJ_BUF_GLOBAL_SIZE :HASH 连接操作符的数据总缓存大小(>=HJ_BUF_SIZE),默认为500 M。

HAGR_BUF_GLOBAL_SIZE: HAGR、DIST、集合操作、SPL2、NTTS2 以及HTAB 操作符的数据总缓存大小(>= HAGR_BUF_SIZE),默认为500 M。

https://www.cndba.cn/dave/article/4321

HAGR_BUF_SIZE: 单个 HAGR、DIST、集合操作、SPL2、NTTS2以及 HTAB 操作符的数据总缓存大小,默认值50M。https://www.cndba.cn/dave/article/4321

在服务器物理内存小于16GB的情况下,建议使用默认值。

当物理内存大于16GB,小于64GB时,建议将HJ_BUF_SIZE 和 HAGR_BUF_SIZE 设置为500M。 HAGR_BUF_GLOBAL_SIZE 和 HJ_BUF_GLOBAL_SIZE 设置为10000M以上。

当物理内存大于64GB时,建议将HJ_BUF_SIZE 和 HAGR_BUF_SIZE 设置为1000M。 HAGR_BUF_GLOBAL_SIZE 和 HJ_BUF_GLOBAL_SIZE 设置为15000M以上。

2线程有关

达梦与线程有关的参数有2个,如下:

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini|grep WORKER_THREADS
                WORKER_THREADS                  = 2                     #Number Of Worker Threads
[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini|grep TASK_THREADS
                TASK_THREADS                    = 4                     #Number Of Task Threads
[dave@www.cndba.cn ~]#

工作线程(WORKER_THREADS)这里默认值是2,建议改成逻辑CPU数量。
任务线程(TASK_THREADS)这里的默认值是4。 建议设置规则如下:

1)逻辑CPU数量少于8时设置为4.
2)逻辑CPU数量大于等于64时,设置为16. https://www.cndba.cn/dave/article/4321

修改SQL如下:

SP_SET_PARA_VALUE(2,’WORKER_THREADS’,v_cpus);
SP_SET_PARA_VALUE(2,’TASK_THREADS’,4|16);

3其他参数

3.1 重用执行计划(USE_PLN_POOL)

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/cndba/dm.ini|grep USE_PLN_POOL
                USE_PLN_POOL                    = 1                     #Query Plan Reuse Mode, 0: Forbidden; 1:strictly reuse, 2:parsing reuse, 3:mixed parsing reuse

控制是否重用执行计划, 建议设置为1。

https://www.cndba.cn/dave/article/4321

0:禁止执行计划的重用;
1:启用执行计划的重用功能 ;
2:对不包含显式参数的语句进行常量参数化优化;
3:即使包含显式参数的语句,也进行常量参数化优化

3.2 禁用OLAP(OLAP_FLAG)

[dave@www.cndba.cn ~]# cat /dm/dmdbms/data/ustc2/dm.ini |grep OLAP_FLAG
                OLAP_FLAG                       = 0                     #OLAP FLAG, 1 means enable olap
[dave@www.cndba.cn ~]#

该参数控制是否启用联机分析处理,建议设置为2。 取值参数:

0:不启用;
1:启用;
2:不启用,同时倾向于使用索引范围扫描

3.3 打开系统监控(ENABLE_MONITOR)

[dave@www.cndba.cn cndba]# cat dm.ini |grep ENABLE_MONITOR
                ENABLE_MONITOR                  = 1                     #Whether to enable monitor
                ENABLE_MONITOR_DMSQL            = 1                     #Flag of performance monitoring:sql or method exec time.0: NO. 1: YES.
                DSC_ENABLE_MONITOR              = 1                     #Whether to monitor request time
[dave@www.cndba.cn cndba]#

建议启用系统监控,该参数默认也为1,即启用监控,如果设置为0表示关闭。

3.4 关闭SQL 日志功能(SVR_LOG)

[dave@www.cndba.cn cndba]# cat dm.ini |grep SVR_LOG
                SVR_LOG   = 0           #Whether the Sql Log sys Is open or close. 1:open, 0:close.
[dave@www.cndba.cn cndba]#

该参数可设置值如下:https://www.cndba.cn/dave/article/4321

0:表示关闭;
1:表示打开;
2:按文件中记录数量切换日志文件, 日志记录为详细模式;
3:不切换日志文件,日志记录为简单模式,只记录时间和原始语句

3.5 设置临时表空间大小

[dave@www.cndba.cn cndba]# cat dm.ini |grep TEMP
                TEMP_PATH     = /dm/dmdbms/data/cndba            #temporary file path
                TEMP_SIZE     = 1024                  #temporary file size  in Megabytes
                TEMP_SPACE_LIMIT     = 20480                 #temp space limit in megabytes
[dave@www.cndba.cn cndba]#

TEMP_SIZE:默认创建的临时表空间大小,默认10M。
TEMP_SPACE_LIMIT 临时表空间大小上限,默认为0,表示不限制临时表空间大小。

这里需要根据具体的业务,适当修改临时表空间大小,但建议改到1024M以上,同时指定最大限制。

DM 达梦数据库 临时表空间 管理说明
https://www.cndba.cn/dave/article/4315

3.6 会话数设置

[dave@www.cndba.cn cndba]$ cat dm.ini|grep MAX_SESSION
                MAX_SESSIONS                    = 1500                  #Maximum number of concurrent sessions
                MAX_SESSION_STATEMENT           = 20000                 #Maximum number of statement handles for each session
[dave@www.cndba.cn cndba]$

达梦的会话主要受限如上2个参数。

MAX_SESSIONS :系统允许同时连接的最大数,同时还受到LICENSE 的限制,取二者中较小的值。MAX_SESSION_STATEMENT :系统级单个会话上允许同时打开的语句句柄最大数。

https://www.cndba.cn/dave/article/4321

生产环境建议将MAX_SESSIONS 设置到1500,MAX_SESSION_STATEMENT 设置到20000。

3.7 关闭通信加密(ENABLE_ENCRYPT)

[dave@www.cndba.cn cndba]$ cat dm.ini|grep ENABLE_ENCRYPT
                ENABLE_ENCRYPT                  = 0                     #Encrypt Mode For Communication, 0: Without Encryption; 1: SSL Encryption; 2: SSL Authentication
[dave@www.cndba.cn cndba]$

ENABLE_ENCRYPT 参数控制是否启用通信加密,建议关闭。 该参数可以设置如下值:

https://www.cndba.cn/dave/article/4321

0:不加密;
1:SSL 加密,此时如果没有配置好 SSL 环境,则通讯仍旧不加密;
2:SSL 认证,不加密,此时如果服务器 SSL 环境没有配置则服务器无法正常启动,如果客户端 SSL 环境没有配置则无法连接服务器

3.8 设置优化器模式(OPTIMIZER_MODE)

[dave@www.cndba.cn cndba]$ cat dm.ini|grep OPTIMIZER_MODE
                OPTIMIZER_MODE                  = 1                     #Optimizer_mode

达梦有两种优化器,通过OPTIMIZER_MODE参数进行控制,建议采用新优化器:

0:老优化器模式;
1:新优化器模式

3.9 兼容性设置

[dave@www.cndba.cn cndba]$ cat dm.ini|grep COMPATIBLE_MODE
                COMPATIBLE_MODE                 = 2               #Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata
                CASE_COMPATIBLE_MODE            = 1               #Case compatible mode, 0:none, 1:Oracle, 2:Oracle(new rule)
[dave@www.cndba.cn cndba]$

达梦通过COMPATIBLE_MODE参数来设置对其他数据库的兼容性,建议设置为2:

0:不兼容,
1:兼容 SQL92 标准,
2:部分兼容 ORACLE,
3:部分兼容 MS SQL SERVER,
4:部分兼容 MYSQL,
5:兼容 DM6,
6:部分兼容 TERADATA

4 自动修改脚本

也可以直接执行如下脚本进行自动修改:

DM 达梦数据库 配置参数优化 脚本
https://www.cndba.cn/dave/article/4303

https://www.cndba.cn/dave/article/4321

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Dave

Dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 1902
    原创
  • 2
    翻译
  • 456
    转载
  • 131
    评论
  • 访问:3642107次
  • 积分:3137
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by ZhiXinTech · 皖ICP备19020168号·

        QQ交流群