达梦数据库参数配置与一键优化指南

科技   2024-11-24 08:01   江苏  

大家好,这里是公众号 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.sqlAutoParaAdj 用于对达梦数据库参数进行修改,提高服务人员部署效率。

AutoParaAdj 采用 SQL 语句进行编写,实现原理为:根据机器内存和 CPU 核数调整对应参数。修改的参数涉及到:

  • CPU相关参数
  • 内存池相关参数
  • 缓冲区相关参数
  • fast_pool相关参数
  • HUSH相关参数
  • 排序相关参数
  • 其他内存参数
  • 实例相关参数
  • 优化器相关参数
  • 并行参数

对了,使用我们开发的达梦一键安装脚本安装数据库也会自动调用一键优化脚本,自动优化达梦数据库配置!

下载脚本后,建议打开脚本,根据需求编辑以下几个参数配置:

参数类型默认值说明
exec_modeint10 表示直接执行脚本修改参数,1 表示不直接修改参数,打印设置参数的语句。设置为 1 后,必须调整 v_mem_mbv_cpus
is_dscint0是否是 dsc 集群。如果是 dsc 集群请设置为 1,将自动调整 dsc 相关参数
mem_perint100默认所有的内存归达梦数据库使用。如实际不能 100% 可用,可以调整此参数。MAX_OS_MEMORY 强制为 100,与此参数无关
v_mem_mbint16000exec_mode 为 1 时请自行根据机器实际内存调整此参数,单位为 M
v_cpusint8exec_mode 为 1 时请自行根据机器实际 CPU 核数调整此参数
oltp_modeint0并发量较高的 OLTP 类型系统此参数设置为 1,并发量不高的一般业务系统和 OLAP 类的系统此参数设置为 0,影响 SORT_FLAGUNDO_RETENTION
pk_cluster_modeint1是否使用聚集主键:性能要求高且大字段较少的业务场景强烈建议设置为 1,大字段多的场景设置为 0
ini_bakint0是否建一个表备份老的 dm.ini。1 为保存,0 为不保存,默认不保存

这里建议大家修改的参数:

  • exec_mode 为自动执行,参数值为 0
  • mem_per 为操作系统内存的 80%,参数值为 80
  • oltp_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 1END
  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 1END
  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 1END
  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 1END
  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 1END
  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 1END
  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 1END
  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 1END
  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

至此,达梦数据库一键优化脚本演示完成,大家感兴趣的可以玩起来了。

写在最后

如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!

达梦数据库必读入门书籍推荐:





需要的可以学起来了!

往期精彩文章

达梦数据库安装最详细教程
一招教你学会达梦数据库的免密登录
一文讲透达梦数据库的大小写敏感
效率翻倍!达梦数据库 disql 使用技巧全攻略
金仓数据库 KingbaseES V9 单机安装指南
KingbaseES KSQL 免密登录的几种方式
KingbaseES 控制文件冗余与恢复秘籍
南大通用 GBASE 8s V8.8 数据库最全安装指南
GBase 8s GDCA 认证课后练习题大全(题库)
GBase 8s 数据库巡检报告及一键巡检脚本
YashanDB 一键生成 AWR 报告
YashanDB 数据库安装部署


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
- END -

Lucifer三思而后行
不积跬步,无以至千里;不积小流,无以成江海。一位籍籍无名的数据库爱好者!
 最新文章