达梦数据库参数配置与一键优化指南
群里有小伙伴经常遇到达梦数据库性能或者故障问题,很多情况都需要修改数据库参数来优化。没有接触过达梦的朋友,可能会对这方面有一些迷茫,所以我整理了一篇关于达梦数据库参数配置的文章,比较基础。其实达梦官方有提供一个建库后的参数最佳配置脚本,可以在建库后一键优化数据库参数,确保数据库平稳运行。/___/⭐️ 关注上方 ↑ 公众号DBA学习之路,获取达梦一键优化脚本;,获取达梦一键安装脚本;达梦数据库参数
大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。
社群交流
为了给大家提供一些技术交流的平台,目前已成立的技术交流群:
- Oracle 数据库交流群
- 国产数据库交流群
- Linux 技术交流群
- ChatGPT 4o 免费体验群
需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。
目录
前言
群里有小伙伴经常遇到达梦数据库性能或者故障问题,很多情况都需要修改数据库参数来优化。没有接触过达梦的朋友,可能会对这方面有一些迷茫,所以我整理了一篇关于达梦数据库参数配置的文章,比较基础。
其实达梦官方有提供一个建库后的参数最佳配置脚本,可以在建库后一键优化数据库参数,确保数据库平稳运行。
___ __ ____ ___ __ _
/ | __ __/ /_____ / __ \____ __________ _/ | ____/ / (_)
/ /| |/ / / / __/ __ \/ /_/ / __ `/ ___/ __ `/ /| |/ __ / / /
/ ___ / /_/ / /_/ /_/ / ____/ /_/ / / / /_/ / ___ / /_/ / / /
/_/ |_\__,_/\__/\____/_/ \__,_/_/ \__,_/_/ |_\__,_/_/ /
/___/
达梦一键优化脚本下载方式:
⭐️ 关注公众号 DBA学习之路 后回复:
- AutoParaAdj,获取达梦一键优化脚本;
- DMShellInstall,获取达梦一键安装脚本;
介绍
达梦数据库参数类型分为以下四种:
- READ ONLY:手工参数,只能通过修改 dm.ini 中的值修改,数据库运行期间不能修改,重启数据库才能生效
- IN FILE:静态参数,可以通过函数或 SQL 语句修改(不能修改内存中的值,只能修改参数文件中的值,修改后需要重启数据库才能生效)
- SYS:动态参数,(系统级),随便改
- SESSION:动态参数,(会话级),随便改,可以仅针对当前会话生效
可以通过视图来查看达梦数据库参数类型:
-- 参数类型
SQL> select distinct PARA_TYPE from v$dm_ini;
行号 PARA_TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
-- TYPE:参数类型
-- VALUE:会话值
-- SYS_VALUE:内存值
-- FILE_VALUE:配置文件值
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME='MAX_SESSIONS';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ------------ ------- ----- --------- ----------
1 MAX_SESSIONS IN FILE 10000 10000 10000
达梦数据库参数属性分为三种:
- 手动:不能动态修改,必须修改 dm.ini 参数文件,然后重启才能生效。
- 静态:可以动态修改,修改后重启服务器才能生效。
- 动态:可以动态修改,修改后即时生效。动态分为会话级和系统级;会话级:新参数值只影响新创建的会话,之前的会话不受影响;系统级:修改后会影响所有会话。
其中,动态修改是指 DBA 用户可以在数据库服务器运行期间,通过调用系统过程 SP_SET_PARA_VALUE()
、 SP_SET_PARA_DOUBLE_VALUE()
和 SP_SET_PARA_STRING_VALUE()
对参数值进行修改。
参数修改
可以通过以下三种方式修改参数:
- dm.ini 参数配置文件修改
- ALTER 命令修改
- 系统函数修改
修改 INI 文件
dm.ini 文件一般情况下位于数据库实例路径下,可以通过编辑 dm.ini
文件进行修改。
例如:
vi /dmdata/DAMENG/dm.ini
## 修改 COMPATIBLE_MODE 参数值
COMPATIBLE_MODE = 2 #Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG
修改完成保存后,重启数据库生效:
[dmdba@dm8:/dmdata/DAMENG]$ cat dm.ini | grep -i COMPATIBLE_MODE
COMPATIBLE_MODE = 2 #Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG
## 重启数据库
[dmdba@dm8:~]$ DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
可以通过 v$dm_ini
或者 v$parameter
查询参数值:
-- 查询 v$dm_ini
SQL> select * from v$dm_ini where para_name = 'COMPATIBLE_MODE';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
--------------- ---------- --------- --------- ------------- ------- ---------- ---------- ---------------------------------------------------------------------------------------------------- --------- --------- ----------
COMPATIBLE_MODE 2 0 7 0 Y 2 2 Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG IN FILE ALL_SYNC CAN_SYNC
-- 查询 v$parameter
SQL> select * from v$parameter where name = 'COMPATIBLE_MODE';
ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION DEFAULT_VALUE ISDEFAULT
----------- --------------- ------- ----- --------- ---------- ---------------------------------------------------------------------------------------------------- ------------- -----------
508 COMPATIBLE_MODE IN FILE 2 2 2 Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG 0 0
ALTER 命令修改
ALTER 命令修改系统参数,语法格式:
ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
-- 静态参数修改
ALTER SYSTEM SET 'MTAB_MEM_SIZE' =1200 spfile;
-- PURGE关键字指是否清理执行计划
ALTER SESSION SET '<参数名称>' =<参数值> [PURGE];
-- 修改当前会话参数
ALTER SESSION SET 'HAGR_HASH_SIZE' =2000000;
例如:
-- both:内存和配置文件都生效;memory:对内存生效;spfile:对配置文件生效
-- 正常生效
-- 修改数据库的兼容性参数
SQL> alter system set 'COMPATIBLE_MODE'=2 spfile;
DMSQL 过程已成功完成
已用时间: 4.311(毫秒). 执行号:2104.
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME='COMPATIBLE_MODE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 COMPATIBLE_MODE IN FILE 0 0 2
已用时间: 2.500(毫秒). 执行号:2105.
-- 仅对当前会话生效
SQL> alter session set 'LIST_TABLE'=1;
DMSQL 过程已成功完成
已用时间: 0.601(毫秒). 执行号:2106.
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME='LIST_TABLE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ---------- ------- ----- --------- ----------
1 LIST_TABLE SESSION 1 0 0
已用时间: 1.925(毫秒). 执行号:2107.
系统函数修改
通过视图可以查看修改参数的函数有哪些:
SQL> select name,id,arg_num from v$ifun t where t.name like 'SP_SET_PARA%';
行号 NAME ID ARG_NUM
---------- ------------------------ ----------- -----------
1 SP_SET_PARA_DOUBLE_VALUE 2902 4
2 SP_SET_PARA_DOUBLE_VALUE 586 3
3 SP_SET_PARAM_IN_SESSION 1760 4
4 SP_SET_PARA_STRING_VALUE 2901 4
5 SP_SET_PARA_STRING_VALUE 585 3
6 SP_SET_PARA_VALUE 2900 4
7 SP_SET_PARA_VALUE 584 3
系统函数修改参数一般有以下三种方式:
SP_SET_PARA_VALUE()
:用于修改整型静态配置参数和动态配置参数。SP_SET_PARA_DOUBLE_VALUE()
:该过程用于修改浮点型静态配置参数和动态配置参数。SP_SET_PARA_STRING_VALUE()
:用于修改字符串型静态配置参数和动态配置参数
以上函数都有一个共同的选项,就是 SCOPE,这个选项的值有两种: [ 1 和 2 ]
- 1:表示在内存和 INI 文件中都修改参数值,此时只能修改动态的配置参数,试图修改静态配置参数时服务器会返回错误信息。
- 2:表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。
SP_SET_PARA_VALUE
SP_SET_PARA_VALUE 修改数值类型参数值,的语法格式如下:
SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64);
例如:
-- SCOPE 参数值为 1,将 DM.INI 文件中动态参数 HFS_CACHE_SIZE 设置为 320,执行立即生效
SQL> SP_SET_PARA_VALUE (1,'HFS_CACHE_SIZE',320);
DMSQL 过程已成功完成
-- 当修改静态参数时,报错:[-839]:不能修改静态配置参数的内存值.
SQL> SP_SET_PARA_VALUE (1,'COMPATIBLE_MODE',2);
SP_SET_PARA_VALUE (1,'COMPATIBLE_MODE',2);
[-839]:不能修改静态配置参数的内存值.
-- SCOPE 参数值为 2,将 DM.INI 文件中动态参数 COMPATIBLE_MODE 设置为 2,报错
SQL> SP_SET_PARA_VALUE (2,'COMPATIBLE_MODE',2);
DMSQL 过程已成功完成
此时,查看对应的参数值:
-- 可以使用 SF_GET_PARA_VALUE 来查询对应的参数值
-- 语法格式:select SF_GET_PARA_VALUE (scope int, paraname varchar(256));
-- SCOPE 参数为 1 表示获取 INI 文件中配置参数的值
-- SCOPE 参数为 2 表示获取内存中配置参数的值
SQL> select SF_GET_PARA_VALUE (1,'HFS_CACHE_SIZE');
SQL> select SF_GET_PARA_VALUE (2,'COMPATIBLE_MODE');
-- 也可以直接查询 v$parameter 可以看到参数值
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME in ('HFS_CACHE_SIZE','COMPATIBLE_MODE');
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 HFS_CACHE_SIZE SYS 320 320 320
2 COMPATIBLE_MODE IN FILE 0 0 2
可以看到,HFS_CACHE_SIZE 参数的值在内存和参数文件中的值都是修改后的 320,而 COMPATIBLE_MODE 只更新了参数文件中的值,需要重启后才能生效到内存中:
[dmdba@dm8:~]$ DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
[dmdba@dm8:~]$ ds
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 6.733(ms)
disql V8
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME in ('HFS_CACHE_SIZE','COMPATIBLE_MODE');
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 HFS_CACHE_SIZE SYS 320 320 320
2 COMPATIBLE_MODE IN FILE 2 2 2
重启后可以发现 COMPATIBLE_MODE 参数值在内存中也生效了。
SP_SET_PARA_DOUBLE_VALUE
SP_SET_PARA_DOUBLE_VALUE 修改浮点型参数值,语法格式如下:
SP_SET_PARA_DOUBLE_VALUE(scope int,paraname varchar(8187),value double);
例如:
--将 DM.INI 文件中动态参数 SEL_RATE_EQU 设置为 0.3,执行立即生效
SQL> SP_SET_PARA_DOUBLE_VALUE(1, 'SEL_RATE_EQU', 0.3);
DMSQL 过程已成功完成
此时,查看对应的参数值:
-- 可以使用 SF_GET_PARA_DOUBLE_VALUE 来查询对应的参数值
-- 语法格式:select SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187));
-- SCOPE 参数为 1 表示获取 INI 文件中配置参数的值
-- SCOPE 参数为 2 表示获取内存中配置参数的值
SQL> select SF_GET_PARA_DOUBLE_VALUE(2,'SEL_RATE_EQU');
-- 也可以直接查询 v$parameter 可以看到参数值
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME ='SEL_RATE_EQU';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ------------ ------- -------- --------- ----------
1 SEL_RATE_EQU SESSION 0.300000 0.300000 0.000000
SP_SET_PARA_STRING_VALUE
SP_SET_PARA_STRING_VALUE 修改字符串类型参数值,语法格式如下:
SF_SET_SYSTEM_PARA_VALUE(paraname varchar(256),value int64\double\varchar(256),deferred int,scope int64);
-- DEFERRED 参数为 0 表示当前 session 修改的参数立即生效,默认为 0
-- DEFERRED 参数为 1 表示当前 session 不生效,后续再生效
例如:
-- 将 dm.ini 文件中的 EXCLUDE_RESERVED_WORDS 参数值设置为 list,array,执行命令后重启数据库生效
SQL> sp_set_para_string_value(2,'EXCLUDE_RESERVED_WORDS','list,array');
DMSQL 过程已成功完成
此时,查看对应的参数值:
-- 可以使用 SF_GET_PARA_STRING_VALUE 来查询对应的参数值
-- 语法格式:select SF_GET_PARA_STRING_VALUE(scope int, paraname varchar(8187));
-- SCOPE 参数为 1 表示获取 INI 文件中配置参数的值
-- SCOPE 参数为 2 表示获取内存中配置参数的值
SQL> select SF_GET_PARA_STRING_VALUE(1,'EXCLUDE_RESERVED_WORDS');
-- 也可以直接查询 v$parameter 可以看到参数值
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME ='EXCLUDE_RESERVED_WORDS';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ---------------------- ------- ----- --------- ----------
1 EXCLUDE_RESERVED_WORDS IN FILE NULL NULL list,array
重启数据库:
[dmdba@dm8:~]$ DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
[dmdba@dm8:~]$ ds
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.967(ms)
disql V8
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE from v$parameter where NAME ='EXCLUDE_RESERVED_WORDS';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ---------------------- ------- ---------- ---------- ----------
1 EXCLUDE_RESERVED_WORDS IN FILE list,array list,array list,array
重启后可以发现 EXCLUDE_RESERVED_WORDS 参数值在内存中也生效了。
AutoParaAdj 一键优化
达梦官方提供了一个数据库参数一键优化脚本 AutoParaAdj4.2_dm8.sql
,AutoParaAdj 用于对达梦数据库参数进行修改,提高服务人员部署效率。
AutoParaAdj 采用 SQL 语句进行编写,实现原理为:根据机器内存和 CPU 核数调整对应参数。修改的参数涉及到:
- CPU相关参数
- 内存池相关参数
- 缓冲区相关参数
- fast_pool相关参数
- HUSH相关参数
- 排序相关参数
- 其他内存参数
- 实例相关参数
- 优化器相关参数
- 并行参数
对了,使用我们开发的达梦一键安装脚本安装数据库也会自动调用一键优化脚本,自动优化达梦数据库配置!
下载脚本后,建议打开脚本,根据需求编辑以下几个参数配置:
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
exec_mode | int | 1 | 0 表示直接执行脚本修改参数,1 表示不直接修改参数,打印设置参数的语句。设置为 1 后,必须调整 v_mem_mb 和 v_cpus |
is_dsc | int | 0 | 是否是 dsc 集群。如果是 dsc 集群请设置为 1,将自动调整 dsc 相关参数 |
mem_per | int | 100 | 默认所有的内存归达梦数据库使用。如实际不能 100% 可用,可以调整此参数。MAX_OS_MEMORY 强制为 100,与此参数无关 |
v_mem_mb | int | 16000 | exec_mode 为 1 时请自行根据机器实际内存调整此参数,单位为 M |
v_cpus | int | 8 | exec_mode 为 1 时请自行根据机器实际 CPU 核数调整此参数 |
oltp_mode | int | 0 | 并发量较高的 OLTP 类型系统此参数设置为 1,并发量不高的一般业务系统和 OLAP 类的系统此参数设置为 0,影响 SORT_FLAG 和 UNDO_RETENTION |
pk_cluster_mode | int | 1 | 是否使用聚集主键:性能要求高且大字段较少的业务场景强烈建议设置为 1,大字段多的场景设置为 0 |
ini_bak | int | 0 | 是否建一个表备份老的 dm.ini 。1 为保存,0 为不保存,默认不保存 |
这里建议大家修改的参数:
exec_mode
为自动执行,参数值为 0mem_per
为操作系统内存的 80%,参数值为 80oltp_mode
根据并发量进行配置,参数值为 0
修改好 SQL 脚本中对应的参数值之后,就可以调用脚本一键优化达梦数据库了:
[dmdba@dm8:~]$ dssql AutoParaAdj4.2_dm8.sql
密钥过期时间:2025-07-03
MEMORY_TARGET+BUFFER+RECYCLE+HJ_BUF_GLOBAL_SIZE+HAGR_BUF_GLOBAL_SIZE+CACHE_POOL_SIZE+DICT_BUF_SIZE+SORT_BUF_GLOBAL_SIZE+RLOG_POO
--------------------------------------------------------------------------------------------------------------------------------
5246
已用时间: 543.968(毫秒). 执行号:905.
## 这里因为 exec_mode 为 0,所以自动执行优化了,没有显示哪些优化项,如果设置为 1,则会打印出优化命令,供 DBA 自行选择执行,同时也能看到自动执行了哪些优化项
[dmdba@dm8:~]$ dssql AutoParaAdj4.2_dm8.sql
密钥过期时间:2025-07-03
SP_SET_PARA_VALUE(2,'WORKER_THREADS',8);
SP_SET_PARA_VALUE(2,'IO_THR_GROUPS',8);
SP_SET_PARA_VALUE(2,'GEN_SQL_MEM_RECLAIM',0);
SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY', 100);
SP_SET_PARA_VALUE(2,'MEMORY_POOL', 800);
SP_SET_PARA_VALUE(2,'MEMORY_N_POOLS', 2);
SP_SET_PARA_VALUE(2,'MEMORY_TARGET', 2000);
SP_SET_PARA_VALUE(2,'BUFFER', 5000);
SP_SET_PARA_VALUE(2,'MAX_BUFFER', 5000);
SP_SET_PARA_VALUE(2,'BUFFER_POOLS', 17);
SP_SET_PARA_VALUE(2,'RECYCLE', 520);
SP_SET_PARA_VALUE(2,'RECYCLE_POOLS', 5);
SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES', 3000);
SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES', 1000);
SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS',1);
SP_SET_PARA_VALUE(2,'MULTI_PAGE_GET_NUM',1);
SP_SET_PARA_VALUE(2,'PRELOAD_SCAN_NUM',0);
SP_SET_PARA_VALUE(2,'PRELOAD_EXTENT_NUM',0);
SP_SET_PARA_VALUE(2,'TASK_THREADS',4);
SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK', 1);
SP_SET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE', 813);
SP_SET_PARA_VALUE(1,'HJ_BUF_SIZE', 81);
SP_SET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE',813);
SP_SET_PARA_VALUE(1,'HAGR_BUF_SIZE', 81);
SP_SET_PARA_VALUE(2,'SORT_FLAG',0);
SP_SET_PARA_VALUE(2,'SORT_BLK_SIZE',1);
SP_SET_PARA_VALUE(2,'SORT_BUF_SIZE', 10);
SP_SET_PARA_VALUE(2,'SORT_BUF_GLOBAL_SIZE', 500);
SP_SET_PARA_VALUE(2,'RLOG_POOL_SIZE', 256);
SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE', 200);
SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE', 50);
SP_SET_PARA_VALUE(2,'VM_POOL_TARGET', 16384);
SP_SET_PARA_VALUE(2,'SESS_POOL_TARGET', 16384);
SP_SET_PARA_VALUE(2,'USE_PLN_POOL', 1);
SP_SET_PARA_VALUE(2,'ENABLE_MONITOR', 1);
SP_SET_PARA_VALUE(2,'SVR_LOG', 0);
SP_SET_PARA_VALUE(2,'TEMP_SIZE', 1024);
SP_SET_PARA_VALUE(2,'TEMP_SPACE_LIMIT', 102400);
SP_SET_PARA_VALUE(2,'MAX_SESSIONS', 1500);
SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000);
SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER', 1);
SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',0);
SP_SET_PARA_VALUE(2,'OLAP_FLAG',2);
SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG',1);
SP_SET_PARA_VALUE(2,'OPTIMIZER_MODE',1);
SP_SET_PARA_VALUE(2,'ADAPTIVE_NPLN_FLAG',0);
SP_SET_PARA_VALUE(2,'MONITOR_INDEX_FLAG',2);
SP_SET_PARA_VALUE(2,'ENABLE_CREATE_BM_INDEX_FLAG',0);
SP_SET_PARA_VALUE(2,'OPTIMIZER_OR_NBEXP',0);
SP_SET_PARA_VALUE(2,'PARALLEL_PURGE_FLAG',1);
SP_SET_PARA_VALUE(2,'PARALLEL_POLICY',2);
SP_SET_PARA_DOUBLE_VALUE(2,'UNDO_RETENTION',900);
SP_SET_PARA_VALUE(2,'UNDO_EXTENT_NUM',16);
SP_SET_PARA_VALUE(2,'ENABLE_INJECT_HINT',1);
SP_SET_PARA_VALUE(2,'BTR_SPLIT_MODE',1);
SP_SET_PARA_VALUE(2,'FAST_LOGIN',1);
SP_SET_PARA_VALUE(2,'ENABLE_MONITOR_BP',0);
SP_SET_PARA_VALUE(1,'SLCT_OPT_FLAG',0);
MEMORY_TARGET+BUFFER+RECYCLE+HJ_BUF_GLOBAL_SIZE+HAGR_BUF_GLOBAL_SIZE+CACHE_POOL_SIZE+DICT_BUF_SIZE+SORT_BUF_GLOBAL_SIZE+RLOG_POO
--------------------------------------------------------------------------------------------------------------------------------
10152
已用时间: 79.950(毫秒). 执行号:605.
注意这里如果使用快捷命令别名 dssql 调用脚本的话,需要在脚本的最后一行加一个 exit;,否则无法退出脚本运行。关于 dssql 快捷命令配置方式可以参考:效率翻倍!达梦数据库 disql 使用技巧全攻略
执行脚本参数优化后,需要重启数据库生效:
[dmdba@dm8:~]$ DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
可以通过以下 SQL 查看优化后的参数值:
SQL> set echo off
set timing off
set lineshow off
set feedback off
set pagesize 1000
select PARA_NAME name,
PARA_VALUE para_value,
FILE_VALUE file_value
from v$DM_INI
WHERE PARA_NAME IN ('WORKER_THREADS',
'TASK_THREADS',
'IO_THR_GROUPS',
'MAX_OS_MEMORY',
'MEMORY_POOL',
'MEMORY_N_POOLS',
'MEMORY_TARGET',
'BUFFER',
'MAX_BUFFER',
'BUFFER_POOLS',
'RECYCLE',
'RECYCLE_POOLS',
'FAST_POOL_PAGES',
'FAST_ROLL_PAGES',
'MEMORY_MAGIC_CHECK',
'HJ_BUF_GLOBAL_SIZE',
'HJ_BUF_SIZE',
'HAGR_BUF_GLOBAL_SIZE',
'HAGR_BUF_SIZE',
'SORT_FLAG',
'SORT_BLK_SIZE',
'SORT_BUF_SIZE',
'SORT_BUF_GLOBAL_SIZE',
'RLOG_POOL_SIZE',
'CACHE_POOL_SIZE',
'DICT_BUF_SIZE',
'VM_POOL_TARGET',
'SESS_POOL_TARGET',
'USE_PLN_POOL',
'ENABLE_MONITOR',
'SVR_LOG',
'TEMP_SIZE',
'TEMP_SPACE_LIMIT',
'MAX_SESSIONS',
'MAX_SESSION_STATEMENT',
'PK_WITH_CLUSTER',
'ENABLE_ENCRYPT',
'OLAP_FLAG',
'VIEW_PULLUP_FLAG',
'OPTIMIZER_MODE',
'ADAPTIVE_NPLN_FLAG',
'PARALLEL_PURGE_FLAG',
'PARALLEL_POLICY',
'UNDO_EXTENT_NUM',
'ENABLE_INJECT_HINT',
'BTR_SPLIT_MODE',
'FAST_LOGIN',
'ENABLE_MONITOR_BP',
'MULTI_PAGE_GET_NUM',
'PRELOAD_SCAN_NUM',
'PRELOAD_EXTENT_NUM',
'DSC_N_POOLS',
'DSC_GBS_REVOKE_OPT',
'DSC_HALT_SYNC',
'DSC_N_CTLS',
'DSC_ENABLE_MONITOR',
'TRX_DICT_LOCK_NUM',
'ENABLE_FREQROOTS',
'DIRECT_IO')
union all
select 'MAL_CHECK_INTERVAL' ,
'placeholder',
CASE WHEN COUNT(MAL_CHECK_INTERVAL)=0 THEN 'NULL' ELSE (SELECT MAL_CHECK_INTERVAL FROM v$MAL_SYS LIMIT 1) END
FROM v$MAL_SYS
union all
select 'MAL_CONN_FAIL_INTERVAL' ,
'placeholder',
CASE WHEN COUNT(MAL_CONN_FAIL_INTERVAL)=0 THEN 'NULL' ELSE (SELECT MAL_CONN_FAIL_INTERVAL FROM v$MAL_SYS LIMIT 1) END
from v$MAL_SYS
union all
select 'MAL_BUF_SIZE' ,
'placeholder',
CASE WHEN COUNT(MAL_BUF_SIZE)=0 THEN 'NULL' ELSE (SELECT MAL_BUF_SIZE FROM v$MAL_SYS LIMIT 1) END
from v$MAL_SYS
union all
select 'MAL_SYS_BUF_SIZE' ,
'placeholder',
CASE WHEN COUNT(MAL_SYS_BUF_SIZE)=0 THEN 'NULL' ELSE (SELECT MAL_SYS_BUF_SIZE FROM v$MAL_SYS LIMIT 1) END
from v$MAL_SYS
union all
select 'MAL_COMPRESS_LEVEL' ,
'placeholder',
CASE WHEN COUNT(MAL_COMPRESS_LEVEL)=0 THEN 'NULL' ELSE (SELECT MAL_COMPRESS_LEVEL FROM v$MAL_SYS LIMIT 1) END
from v$MAL_SYS
union all
select 'MAL_TEMP_PATH' ,
'placeholder',
CASE WHEN COUNT(MAL_TEMP_PATH)=0 THEN 'NULL' ELSE (SELECT MAL_TEMP_PATH||' ' FROM v$MAL_SYS LIMIT 1) END
from v$MAL_SYS
union all
select 'MAL_VPOOL_SIZE' ,
'placeholder',
CASE WHEN COUNT(MAL_VPOOL_SIZE)=0 THEN 'NULL' ELSE (SELECT MAL_VPOOL_SIZE FROM v$MAL_SYS LIMIT 1) END
from v$MAL_SYS
union all
select 'MAL_INST_NAME' ,
'placeholder',
listagg(to_char(MAL_INST_NAME ),',') within GROUP (order by MAL_INST_NAME)
from v$dm_MAL_ini
union all
select 'MAL_HOST' ,
'placeholder',
listagg(to_char(MAL_HOST ),',') within GROUP (order by MAL_HOST)
from v$dm_MAL_ini
union all
select 'MAL_PORT' ,
'placeholder',
listagg(to_char(MAL_PORT ),',') within GROUP (order by MAL_PORT)
from v$dm_MAL_ini
union all
select 'MAL_INST_HOST' ,
'placeholder',
listagg(to_char(MAL_INST_HOST ),',') within GROUP (order by MAL_INST_HOST)
from v$dm_MAL_ini
union all
select 'MAL_INST_PORT' ,
'placeholder',
listagg(to_char(MAL_INST_PORT ),',') within GROUP (order by MAL_INST_PORT)
from v$dm_MAL_ini
union all
select 'MAL_DW_PORT' ,
'placeholder',
listagg(to_char(MAL_DW_PORT ),',') within GROUP (order by MAL_DW_PORT)
from v$dm_MAL_ini
UNION ALL
select 'ARCH_DEST',
'placeholder',
CASE WHEN COUNT(ARCH_DEST)=0 THEN 'NULL' ELSE (SELECT ARCH_DEST FROM v$dm_arch_ini LIMIT 1) END
from v$dm_arch_ini;
exit;
NAME PARA_VALUE FILE_VALUE
---------------------- ----------- ----------
MAX_OS_MEMORY 100 100
MEMORY_POOL 400 400
MEMORY_N_POOLS 2 2
MEMORY_TARGET 1000 1000
MEMORY_MAGIC_CHECK 1 1
BUFFER 2000 2000
BUFFER_POOLS 11 11
FAST_POOL_PAGES 3000 3000
FAST_ROLL_PAGES 1000 1000
RECYCLE 240 240
RECYCLE_POOLS 2 2
MULTI_PAGE_GET_NUM 1 1
PRELOAD_SCAN_NUM 0 0
PRELOAD_EXTENT_NUM 0 0
MAX_BUFFER 8000 8000
SORT_BUF_SIZE 10 10
SORT_BLK_SIZE 1 1
SORT_BUF_GLOBAL_SIZE 500 500
SORT_FLAG 0 0
HJ_BUF_GLOBAL_SIZE 1000 1000
HJ_BUF_SIZE 50 50
HAGR_BUF_GLOBAL_SIZE 1000 1000
HAGR_BUF_SIZE 50 50
DICT_BUF_SIZE 50 50
VM_POOL_TARGET 16384 16384
SESS_POOL_TARGET 16384 16384
WORKER_THREADS 8 8
TASK_THREADS 4 4
USE_PLN_POOL 1 1
ENABLE_INJECT_HINT 1 1
VIEW_PULLUP_FLAG 1 1
OPTIMIZER_MODE 1 1
ADAPTIVE_NPLN_FLAG 0 0
DIRECT_IO 0 0
IO_THR_GROUPS 8 8
MAX_SESSIONS 1500 1500
MAX_SESSION_STATEMENT 20000 20000
FAST_LOGIN 1 1
PK_WITH_CLUSTER 1 1
OLAP_FLAG 2 2
TEMP_SIZE 1024 1024
TEMP_SPACE_LIMIT 102400 102400
CACHE_POOL_SIZE 200 200
PARALLEL_POLICY 2 2
BTR_SPLIT_MODE 1 1
RLOG_POOL_SIZE 256 256
UNDO_EXTENT_NUM 16 16
PARALLEL_PURGE_FLAG 1 1
TRX_DICT_LOCK_NUM 64 64
ENABLE_ENCRYPT 0 0
SVR_LOG 0 0
ENABLE_MONITOR 1 1
ENABLE_FREQROOTS 1 1
ENABLE_MONITOR_BP 0 0
DSC_N_CTLS 1028096 1028096
DSC_N_POOLS 19 19
DSC_ENABLE_MONITOR 1 1
DSC_HALT_SYNC 0 0
MAL_CHECK_INTERVAL placeholder NULL
MAL_CONN_FAIL_INTERVAL placeholder NULL
MAL_BUF_SIZE placeholder NULL
MAL_SYS_BUF_SIZE placeholder NULL
MAL_COMPRESS_LEVEL placeholder NULL
MAL_TEMP_PATH placeholder NULL
MAL_VPOOL_SIZE placeholder NULL
MAL_INST_NAME placeholder NULL
MAL_HOST placeholder NULL
MAL_PORT placeholder NULL
MAL_INST_HOST placeholder NULL
MAL_INST_PORT placeholder NULL
MAL_DW_PORT placeholder NULL
ARCH_DEST placeholder NULL
至此,达梦数据库一键优化脚本演示完成,大家感兴趣的可以玩起来了。
写在最后
如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!
往期精彩文章
📘 达梦数据库
📙 金仓数据库 KingbaseES
📗 南大通用 GBASE
📒 YashanDB
更多推荐
所有评论(0)