DM7 达梦数据库安装后配置及调优

Scroll Down

国产达梦数据库安装完成以后,需要做一些配置及调优。

1.开启归档

在出现磁盘坏块等介质故障时,使用归档日志可将系统恢复至故障发生前一刻或者指定时间点。为保证数据安全,生产环境数据库必须开启归档。

  • 1.创建归档目录:
su - dmdba
mkdir -p /home/dmdba/arch
  • 2.登录数据库
disql sysdba/password
  • 3.切换到mount模式
alter database mount;
  • 4.设置归档参数
alter database add archivelog 'DEST=/home/dmdba/arch,TYPE=local,FILE_SIZE=2048,SPACE_LIMIT=0';
  • 5.开启归档
alter database archivelog;
  • 6.开启数据库
alter database open;
  • 7.验证
select name,arch_mode,status$ from v$database;
select * from v$arch_status;
select arch_name,arch_type,arch_dest,arch_file_size,arch_space_limit from v$dm_arch_ini;

返回类似如下结果:

SQL> select name,arch_mode,status$ from v$database;

LINEID     NAME  ARCH_MODE STATUS$    
---------- ----- --------- -----------
1          devdb Y         4

used time: 42.390(ms). Execute id is 1956.
SQL> select * from v$arch_status;

LINEID     ARCH_TYPE ARCH_DEST        ARCH_STATUS
---------- --------- ---------------- -----------
1          LOCAL     /home/dmdba/arch VALID

used time: 3.498(ms). Execute id is 1957.
SQL> select arch_name,arch_type,arch_dest,arch_file_size,arch_space_limit from v$dm_arch_ini;

LINEID     ARCH_NAME      ARCH_TYPE ARCH_DEST        ARCH_FILE_SIZE ARCH_SPACE_LIMIT
---------- -------------- --------- ---------------- -------------- ----------------
1          ARCHIVE_LOCAL1 LOCAL     /home/dmdba/arch 2048           0

used time: 30.591(ms). Execute id is 1958.

2.调整内存

达梦的内存池包括共享内存池和其他运行时内存池,内存调整主要针对共享内存池,主要参数有MEMORY_POOLMEMORY_TARGETMEMORY_EXTENT_SIZEMAX_OS_MEMORY
共享内存池MEMORY_POOL默认200M,在运行时会根据需要自动扩展,每次扩展MEMORY_EXTENT_SIZE参数大小,扩展的最大大小为MEMORY_TARGET参数指定值。MAX_OS_MEMORY是达梦数据库可以使用服务器的最大内存占物理内存和虚拟内存总和的百分比,默认95不需调整。

还可以参考: 记一次对达梦数据库的优化过程

  • 1.备份dm.ini文件
## 查看 dm 配置文件
cd /dm7/dmdbms/devdb 
cat dm.ini | grep -E "MEMORY_POOL|MEMORY_TARGET|BUFFER"

cp dm.ini dm.ini_bak
  • 2.调整参数
vi dm.ini

调整以下参数:

MEMORY_POOL = 物理内存*80%(单位M)
MEMORY_TARGET = 物理内存*90%(单位M),默认为0表示不限制
BUFFER = 物理内存*70%(单位M)
MAX_BUFFER = 物理内存*70%(单位M)
BUFFER_POOLS= BUFFER/512 (取质数)

BUFFER 用于缓存数据页,一般配置为操作系
统物理内存的 60%~80%;
MAX_BUFFER 用于控制系统缓冲区的上限,一般配置为和 BUFFER 参数相等;
BUFFER_POOLS 是 BUFFER 的分区数,一般配置为质数,取值范围为 1~500,并发较大的系统
需要配置这个参数;此参数生效的前提条件是 MAX_BUFFER = BUFFER

以下参数慎重调整,建议先咨询 DBA

RECYCLE=4096
RECYCLE_POOLS=11
HJ_BUF_GLOBAL_SIZE=4096
SESS_POOL_SIZE=256
CACHE_POOL_SIZE=1024

参数具体涵义和其他主要参数可参考:dmdb 达梦数据库安装手册 - 鶸。 - 博客园

  • 3.重启数据库生效
# CentOS 6
service DmServicedevdb restart
# CentOS 7
systemctl restart DmServicedevdb

有的安装后的服务名可能不是DmServicedevdb,可以通过命令systemctl -a | grep Dm查找一下。

3.调整日志文件

日志文件建议大小在 2G-5G,个数 4-5 个。
达梦数据库默认两个日志文件,每个 256M,需再增加 3 个日志文件。

  • 1.查看当前日志文件
select * from v$rlogfile;
  • 2.新增日志文件,注意名称要和你的数据库名称一致
alter database add logfile 'devdb03.log' size 2048;
alter database add logfile 'devdb04.log' size 2048;
alter database add logfile 'devdb05.log' size 2048;
  • 3.在线调整日志文件大小
-- alter database resize logfile 'devdb03.log' to 4096;
alter database resize logfile 'devdb01.log' to 2048;
alter database resize logfile 'devdb02.log' to 2048;

4.调整会话限制

系统允许同时连接的最大会话数同时受到MAX_SESSIONSLICENSE的限制,取两者中较小的值。默认值 100,根据业务需要调整该参数。

  • 1.查看当前会话参数
SELECT SF_GET_PARA_VALUE(1, 'MAX_SESSIONS');
  • 2.调整会话参数
CALL SP_SET_PARA_VALUE(2, 'MAX_SESSIONS',1500);
  • 3.重启数据库生效

5.调整兼容性

cd /dm7/dmdbms/devdb
vi dm.ini

调整为以下值:

COMPATIBLE_MODE=2  

各值含义:

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

重启数据库生效。

6.部署备份脚本

数据库创建时会在数据目录下自动创建bak目录用以备份,可以调整至自定义路径:

  • 1.调整备份目录
mkdir -p /home/dmdba/script 
mkdir /data/backup/backupset /data/backup/log
chown -R dmdba:dinstall /data/backup
vi /dm7/dmdbms/devdb/dm.ini

修改目录为:

BAK_PATH=/data/backup/backupset
  • 2.部署脚本
    上传备份脚本到/home/dmdba/script目录中
chmod 775 *.sh

编辑 sh 脚本修改管理员sysdba账号密码
使用dmdba用户新建crontab定时任务:

0 4 * * 0 sh /home/dmdba/script/db_full_backup.sh
0 4 * * 1-6 sh /home/dmdba/script/db_increment_backup.sh

7.开启数据库快照功能

  • 1.以SYSDBA登录达梦disql或者使用达梦管理工具连接
  • 2.启动状态的检测(DBMS_WORKLOAD_REPOSITORY)
SELECT SF_CHECK_AWR_SYS;

若结果为 0,说明未开启快照。

  • 3.创建DBMS_WORKLOAD_REPOSITORY系统包
CALL SP_INIT_AWR_SYS(1);

会返回:DMSQL executed successfully

  • 4.设置间隔为 30分 钟,也可以是其他值(默认是60),不建议超过 60 或者低于 15
CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(30);

会返回:DMSQL executed successfully

至此设置完毕。

  • 5.在特殊情况下需要手动创建快照
CALL DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
  • 6.查看创建的快照信息,包括快照 ID
SELECT * FROM SYS.WRM$_SNAPSHOT order by snap_id desc;
  • 7.使用快照产生 html 报告:
SYS.AWR_REPORT_HTML(1,2,'/home/dmdba','awr_1_2.html');

1,2 代表需要导出的快照的 ID 的起止范围
或者使用语句查询出 html 报告内容:

SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));

可以通过 AWR 报告找出慢 SQL,SQL Ordered by Elapsed Time 的内容就是慢查询语句。

  • 8.删除快照
-- 参数含义参考 -7 
CALL dbms_workload_repository.DROP_SNAPSHOT_RANGE(1,2)

其他使用可参考:DM7 达梦数据库 快照管理 及 生成 AWR 报告

8.添加定时统计任务

  • 1.以SYSDBA登录达梦disql或者使用达梦管理工具连接

  • 2.开启每日统计任务

call SP_INIT_JOB_SYS(1);
call SP_CREATE_JOB('satistics_daily',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('satistics_daily');
call SP_ADD_JOB_STEP('satistics_daily', 'satistics_daily', 3, '', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('satistics_daily', 'satistics_daily', 1, 1, 1, 0, 0, '22:00:00', NULL, '2020-06-09 21:30:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('satistics_daily');

注意:上述步骤里面,'2020-06-09 21:30:00' 调整为执行命令的当前大概时间即可。

  • 3.检查是否开启
select name from SYSJOB.SYSJOBS;

返回类似如下结果时,则说明创建成功。

SQL> select name from SYSJOB.SYSJOBS;

LINEID     NAME           
---------- ---------------
1          satistics_daily

used time: 7.759(ms). Execute id is 9.