达梦数据库参数配置与一键优化指南
大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。
社群交流
为了给大家提供一些技术交流的平台,目前已成立的技术交流群:
- Oracle 数据库交流群
- 国产数据库交流群
- Linux 技术交流群
- ChatGPT 4o 免费体验群
需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。
@TOC
前言
群里有小伙伴经常遇到达梦数据库性能或者故障问题,很多情况都需要修改数据库参数来优化。没有接触过达梦的朋友,可能会对这方面有一些迷茫,所以我整理了一篇关于达梦数据库参数配置的文章,比较基础。
其实达梦官方有提供一个建库后的参数最佳配置脚本,可以在建库后一键优化数据库参数,确保数据库平稳运行。
1 | ___ __ ____ ___ __ _ |
达梦一键优化脚本下载方式:
⭐️ 关注上方 ↑ 公众号 DBA学习之路 后回复:
- AutoParaAdj,获取达梦一键优化脚本;
- DMShellInstall,获取达梦一键安装脚本;
介绍
达梦数据库参数类型分为以下四种:
- READ ONLY:手工参数,只能通过修改 dm.ini 中的值修改,数据库运行期间不能修改,重启数据库才能生效
- IN FILE:静态参数,可以通过函数或 SQL 语句修改(不能修改内存中的值,只能修改参数文件中的值,修改后需要重启数据库才能生效)
- SYS:动态参数,(系统级),随便改
- SESSION:动态参数,(会话级),随便改,可以仅针对当前会话生效
可以通过视图来查看达梦数据库参数类型:
1 | -- 参数类型 |
达梦数据库参数属性分为三种:
- 手动:不能动态修改,必须修改 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 文件进行修改。
例如:
1 | vi /dmdata/DAMENG/dm.ini |
修改完成保存后,重启数据库生效:
1 | [dmdba@dm8:/dmdata/DAMENG]$ cat dm.ini | grep -i COMPATIBLE_MODE |
可以通过 v$dm_ini 或者 v$parameter 查询参数值:
1 | -- 查询 v$dm_ini |
ALTER 命令修改
ALTER 命令修改系统参数,语法格式:
1 | ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE]; |
例如:
1 | -- both:内存和配置文件都生效;memory:对内存生效;spfile:对配置文件生效 |
系统函数修改
通过视图可以查看修改参数的函数有哪些:
1 | SQL> select name,id,arg_num from v$ifun t where t.name like 'SP_SET_PARA%'; |
系统函数修改参数一般有以下三种方式:
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 修改数值类型参数值,的语法格式如下:
1 | SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64); |
例如:
1 | -- SCOPE 参数值为 1,将 DM.INI 文件中动态参数 HFS_CACHE_SIZE 设置为 320,执行立即生效 |
此时,查看对应的参数值:
1 | -- 可以使用 SF_GET_PARA_VALUE 来查询对应的参数值 |
可以看到,HFS_CACHE_SIZE 参数的值在内存和参数文件中的值都是修改后的 320,而 COMPATIBLE_MODE 只更新了参数文件中的值,需要重启后才能生效到内存中:
1 | [dmdba@dm8:~]$ DmServiceDMSERVER restart |
重启后可以发现 COMPATIBLE_MODE 参数值在内存中也生效了。
SP_SET_PARA_DOUBLE_VALUE
SP_SET_PARA_DOUBLE_VALUE 修改浮点型参数值,语法格式如下:
1 | SP_SET_PARA_DOUBLE_VALUE(scope int,paraname varchar(8187),value double); |
例如:
1 | --将 DM.INI 文件中动态参数 SEL_RATE_EQU 设置为 0.3,执行立即生效 |
此时,查看对应的参数值:
1 | -- 可以使用 SF_GET_PARA_DOUBLE_VALUE 来查询对应的参数值 |
SP_SET_PARA_STRING_VALUE
SP_SET_PARA_STRING_VALUE 修改字符串类型参数值,语法格式如下:
1 | SF_SET_SYSTEM_PARA_VALUE(paraname varchar(256),value int64\double\varchar(256),deferred int,scope int64); |
例如:
1 | -- 将 dm.ini 文件中的 EXCLUDE_RESERVED_WORDS 参数值设置为 list,array,执行命令后重启数据库生效 |
此时,查看对应的参数值:
1 | -- 可以使用 SF_GET_PARA_STRING_VALUE 来查询对应的参数值 |
重启数据库:
1 | [dmdba@dm8:~]$ DmServiceDMSERVER restart |
重启后可以发现 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 脚本中对应的参数值之后,就可以调用脚本一键优化达梦数据库了:
1 | [dmdba@dm8:~]$ dssql AutoParaAdj4.2_dm8.sql |
注意这里如果使用快捷命令别名 dssql 调用脚本的话,需要在脚本的最后一行加一个 exit;,否则无法退出脚本运行。关于 dssql 快捷命令配置方式可以参考:效率翻倍!达梦数据库 disql 使用技巧全攻略
执行脚本参数优化后,需要重启数据库生效:
1 | [dmdba@dm8:~]$ DmServiceDMSERVER restart |
可以通过以下 SQL 查看优化后的参数值:
1 | SQL> set echo off |
至此,达梦数据库一键优化脚本演示完成,大家感兴趣的可以玩起来了。
写在最后
如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!