# 达梦数据库参数设置
Posted 爱码代码的喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# 达梦数据库参数设置相关的知识,希望对你有一定的参考价值。
达梦数据库参数设置
参数查询修改
查询参数
--查询配置文件所有参数
SELECT * FROM V$DM_INI;
--指定参数名查询
SELECT * FROM V$DM_INI WHERE PARA_NAME = '实际的参数名';
--查询参数
SELECT 'MAX_SESSIONS' AS 参数名, SF_GET_PARA_VALUE(1,'MAX_SESSIONS') AS 参数值 UNION ALL
SELECT 'MAX_SESSION_STATEMENT',SF_GET_PARA_VALUE(1,'MAX_SESSION_STATEMENT') UNION ALL
SELECT 'MAX_OS_MEMORY',SF_GET_PARA_VALUE(1,'MAX_OS_MEMORY') UNION ALL
SELECT 'BUFFER',SF_GET_PARA_VALUE(1,'BUFFER') UNION ALL
SELECT 'BUFFER_POOLS',SF_GET_PARA_VALUE(1,'BUFFER_POOLS') UNION ALL
SELECT 'RECYCLE',SF_GET_PARA_VALUE(1,'RECYCLE') UNION ALL
SELECT 'RECYCLE_POOLS',SF_GET_PARA_VALUE(1,'RECYCLE_POOLS') UNION ALL
SELECT 'HJ_BUF_GLOBAL_SIZE',SF_GET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE') UNION ALL
SELECT 'HJ_BUF_SIZE',SF_GET_PARA_VALUE(1,'HJ_BUF_SIZE') UNION ALL
SELECT 'HAGR_BUF_GLOBAL_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE') UNION ALL
SELECT 'HAGR_BUF_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BUF_SIZE') UNION ALL
SELECT 'HAGR_BLK_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BLK_SIZE') UNION ALL
SELECT 'DICT_BUF_SIZE',SF_GET_PARA_VALUE(1,'DICT_BUF_SIZE') UNION ALL
SELECT 'KEEP',SF_GET_PARA_VALUE(1,'KEEP') UNION ALL
SELECT 'TEMP_SIZE',SF_GET_PARA_VALUE(1,'TEMP_SIZE') UNION ALL
SELECT 'SESS_POOL_SIZE',SF_GET_PARA_VALUE(1,'SESS_POOL_SIZE') UNION ALL
SELECT 'CACHE_POOL_SIZE',SF_GET_PARA_VALUE(1,'CACHE_POOL_SIZE') UNION ALL
SELECT 'WORKER_THREADS',SF_GET_PARA_VALUE(1,'WORKER_THREADS') UNION ALL
SELECT 'TASK_THREADS',SF_GET_PARA_VALUE(1,'TASK_THREADS') UNION ALL
SELECT 'USE_PLN_POOL',SF_GET_PARA_VALUE(1,'USE_PLN_POOL') UNION ALL
SELECT 'OLAP_FLAG',SF_GET_PARA_VALUE(1,'OLAP_FLAG') UNION ALL
SELECT 'MEMORY_MAGIC_CHECK',SF_GET_PARA_VALUE(1,'MEMORY_MAGIC_CHECK') UNION ALL
SELECT 'PWD_POLICY',SF_GET_PARA_VALUE(1,'PWD_POLICY') UNION ALL
SELECT 'VM_STACK_SIZE',SF_GET_PARA_VALUE(1,'VM_STACK_SIZE') UNION ALL
SELECT 'VM_POOL_SIZE',SF_GET_PARA_VALUE(1,'VM_POOL_SIZE') UNION ALL
SELECT 'VM_POOL_TARGET',SF_GET_PARA_VALUE(1,'VM_POOL_TARGET') UNION ALL
SELECT 'COMM_TRACE',SF_GET_PARA_VALUE(1,'COMM_TRACE');
--SELECT SF_GET_PARA_VALUE(1,'PK_MAP_TO_DIS') UNION ALL--(旧版本无此参数)
--SELECT 'MAX_BUFFER',SF_GET_PARA_VALUE(1,'MAX_BUFFER') UNION ALL (新版本无此参数)
修改参数
--call SF_SET_SYSTEM_PARA_VALUE ('参数名',参数值,1为后续生效,2修改ini文件参数);
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSIONS',10000,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSION_STATEMENT',20480,1,2);
call SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK',1);
call SP_SET_PARA_VALUE(2,'COMM_TRACE',1);
call SF_SET_SYSTEM_PARA_VALUE ('ENABLE_ENCRYPT',0,1,2); --关闭SSL加密
call SF_SET_SYSTEM_PARA_VALUE ('PWD_POLICY',0,1,2);--用户口令策略不限制
call SF_SET_SYSTEM_PARA_VALUE ('BUFFER',100,1,2);--占用内存总值的80%
call SF_SET_SYSTEM_PARA_VALUE ('MAX_BUFFER',100,1,2);--占用内存总值的80%
call SF_SET_SYSTEM_PARA_VALUE ('RECYCLE',64,1,2); --建议 512--4096
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_GLOBAL_SIZE',500,1,2);--建议 2048--5120
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_SIZE',50,1,2);--建议 256--512
call SF_SET_SYSTEM_PARA_VALUE ('DICT_BUF_SIZE',5,1,2);--建议 50--256
call SF_SET_SYSTEM_PARA_VALUE ('KEEP',8,1,2);--建议 50--512
call SF_SET_SYSTEM_PARA_VALUE ('VM_POOL_SIZE',64 ,1,2);--建议 128--1024
call SF_SET_SYSTEM_PARA_VALUE ('CACHE_POOL_SIZE',20,1,2);--建议 128--2048
call SF_SET_SYSTEM_PARA_VALUE ('PLN_DICT_HASH_THRESHOLD',20,1,2);--建议 128--2048
内存有关的参数
达梦的内存结构主要包括内存池、缓冲区、排序区、哈希区。 这些参数的默认值都很小。 生产环境需要根据服务器的配置进行相应的修改。
内存池
[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,不受限制。
缓冲区
数据缓冲区
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 参数, 该参数对性能影响较大:
BUFFER
:系统缓冲区大小,以 M 为单位。推荐值:系统缓冲区大小为可用物理内存的 60%~80%。有效值范围(8~1048576)
BUFFER_POOLS
:BUFFER
系统分区数,每个BUFFER
分区的大小为BUFFER/BUFFER_POOLS
。默认值是19,在内存不大的情况下,建议调小该值。
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
缓冲区只能在表空间级别进行设置,具体配置参考之前的博客:
DM7 达梦数据库 表空间 管理 说明
https://www.cndba.cn/cndba/dave/article/3569
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 总页数的一半。
日志缓冲区
日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 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。
字典缓冲区
字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。
[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以上。
SQL缓冲区
[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。
排序区
[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。
哈希区
[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。
HAGR_BUF_SIZE: 单个 HAGR、DIST、集合操作、SPL2、NTTS2以及 HTAB 操作符的数据总缓存大小,默认值50M。
在服务器物理内存小于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个,如下:
[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.
修改SQL如下:
SP_SET_PARA_VALUE(2,’WORKER_THREADS’,v_cpus);
SP_SET_PARA_VALUE(2,’TASK_THREADS’,4|16);
其他参数
重用执行计划(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。
0:禁止执行计划的重用;
1:启用执行计划的重用功能 ;
2:对不包含显式参数的语句进行常量参数化优化;
3:即使包含显式参数的语句,也进行常量参数化优化
禁用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:不启用,同时倾向于使用索引范围扫描
打开系统监控(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表示关闭。
关闭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]#
该参数可设置值如下:
0:表示关闭;
1:表示打开;
2:按文件中记录数量切换日志文件, 日志记录为详细模式;
3:不切换日志文件,日志记录为简单模式,只记录时间和原始语句
设置临时表空间大小
[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
会话数设置
[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
:系统级单个会话上允许同时打开的语句句柄最大数。生产环境建议将
MAX_SESSIONS
设置到1500
,MAX_SESSION_STATEMENT
设置到20000。
关闭通信加密(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 参数控制是否启用通信加密,建议关闭。 该参数可以设置如下值:
0:不加密;
1:SSL
加密,此时如果没有配置好SSL
环境,则通讯仍旧不加密;
2:SSL
认证,不加密,此时如果服务器SSL
环境没有配置则服务器无法正常启动,如果客户端SSL
环境没有配置则无法连接服务器
设置优化器模式(OPTIMIZER_MODE)
[dave@www.cndba.cn cndba]$ cat dm.ini|grep OPTIMIZER_MODE
OPTIMIZER_MODE = 1 #Optimizer_mode
达梦有两种优化器,通过OPTIMIZER_MODE
参数进行控制,建议采用新优化器:
0:老优化器模式;
1:新优化器模式
兼容性设置
[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
以上是关于# 达梦数据库参数设置的主要内容,如果未能解决你的问题,请参考以下文章