实例健康检查

一、前言

1.1 简介

数据库实例健康检查是数据库健康检查的重要内容,通过对实例相关的内容进行检查,能够及时发现隐藏风险,及时消除风险点,保障数据库实例平稳运行。达梦数据库的实例健康检查主要包含以下内容:

  • 日志健康检查
  • 数据库参数检查
  • 表空间检查
  • 死锁与阻塞检查
  • 内存池信息检查
  • 数据库统计信息检查
  • 安全性设置检查
  • 作业检查

1.2 术语

  • 回滚(Rollback):程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。
  • 刷盘:接收到数据后,数据会先写入缓冲区,再将缓冲区的数据写入到磁盘的过程称为刷盘。
  • 全量备份:也称为完全备份,指对某个指定时间点的所有数据和对应的结构进行一个完全的备份。
  • 增量备份:是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。
  • 作业:作业是由 DM 代理程序按顺序执行的一系列指定的操作。作业可以执行更广泛的活动,包括运行 DMPL/SQL 脚本、定期备份数据库、对数据库数据进行检查等。

1.3 适用范围

本文中所涉及内容适用于 DM7 及 DM8 版本数据库产品。

二、日志健康检查

2.1 数据库实例日志

数据库运行日志记录了数据库服务启动、刷检查点、写归档、刷盘等一系列实例的运行过程。该日志存放在 %DM_HOME/log,按月生成,一般默认命名为 “dm_实例名称_月份.log”。例如数据库实例日志 “dm_DMSERVER_202203.log”。对该日志进行分析,可了解数据库的运行状态,通过检查点刷盘,也可以分析业务的繁忙程度,作为调整内存、检查点参数的依据。

可以通过 grep 命令筛选检查具有 ERROR 或者 FATAL 关键字的日志。若需要过滤服务器日志中 ERROR 关键字,并将结果输出至 error.log 文件中,可参考如下命令:

cat dm_DMSERVER_202203.log | grep "ERROR" >error.log

2.2 DMAP 进程日志

damp 进程日志是记录 DMAP 进程运行情况的日志。该日志存放在 %DM_HOME/log 中,命名方式为 “dm_DMAP_日期.log”。例如 DMAP 进程日志 “dm_DMSERVER_202203.log”。

可以通过 grep 命令筛选检查具有 ERROR 或者 FATAL 关键字的日志。若需要过滤服务器日志中 ERROR 关键字,并将结果输出至 error.log 文件中,可参考如下命令:

cat dm_DMAP_202203.log | grep "ERROR" >error.log

2.3 数据库备份日志

数据库备份日志,是记录了是数据库备份情况的日志,主要用于记录数据库备份的过程信息,判断备份是否完成的日志。该日志存放在 %DM_HOME/log,命名格式为 “dm_BAKES_日期.log”。例如数据库备份日志 “dm_DMSERVER_202203.log”。

可以通过 grep 命令筛选检查具有 ERROR 或者 FATAL 关键字的日志。若需要过滤服务器日志中 ERROR 关键字,并将结果输出至 error.log 文件中,可参考如下命令:

cat dm_BAKES_202203.log | grep "ERROR" >error.log

2.4 REDO 日志

在一个数据库实例中,最少有 2 个 REDO 日志,和数据文件同一个目录,默认每个 256 MB,需要在数据库实例初始化时设定。

通过以下命令可查看 redo 日志信息,包括路径,大小,可用空间,总空间等。

SELECT
        A.FILE_ID    ,
        A.PATH       ,
        A.CLIENT_PATH,
        A.RLOG_SIZE  ,
        B.FREE_SPACE ,
        B.TOTAL_SPACE,
        B.CUR_FILE
from
        (
                select * from V$RLOGFILE where true
        )  A,
        (
                select * from V$RLOG where true
        )  B;

在数据变动频繁的业务系统中,如果 REDO 日志文件设置的太小,会引起频繁的 REDO 切换,造成性能上的损耗。建议在 OLTP 业务系统中,设置为 2 GB。

初始化实例时,定义 2 GB 的 REDO 日志,可参考命令:./$DM_HOME/bin/dminit path/opt/dmdbms/data/ page_size=16 log_size=2048。也可以对现有实例的 REDO 日志进行扩充,可参考命令:ALTER DATABASE RESIZE LOGFILE 'dameng_003.log' to 2048;

2.5 归档日志

DM 数据库可以在非归档模式和归档模式下运行:

  • 非归档模式下,数据库会只将重做日志写入 REDO 日志文件中进行存储;
  • 归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储表空间及数据文件。

默认不开启归档模式,若需要开启请参考 开启本地归档

系统在归档模式下运行,会产生归档日志文件,系统管理员应该事先预留出足够的磁盘空间以便存储归档日志文件。此外,还需检查超期未删除的归档,进入归档保存目录检查是否存在超期未删除的文件和是否存在超过归档上限的情况,防止出现上述情况导致磁盘被撑爆。

建议

1.生产环境建议运行在归档模式下。
2.归档文件建议采用单独的磁盘存放,且该磁盘不要存放其他文件,以免影响归档空间的上限判断。
3.单个归档的大小建议与 REDO 日志文件大小设置相同。

2.6 sql 日志

SQL 日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。

SQL 日志文件是一个纯文本文件。当 PART_STOR=0 时,以 “dmsql_实例名_日期_时间” 命名;当 PART_STOR=1 时,以 “dmsql_实例名_用户名_日期_时间” 命名。缺省生成在 DM 安装目录的 log 子目录下面。例如 “dmsql_DAMENG_20220923_145913”。

更多详细 sql 日志内容可参考:配置数据库 SQLLOG 日志达梦 SQL 日志分析工具 DMLOG

三、数据库参数检查

DM 数据库的参数配置对数据库运行至关重要,不仅关系到数据库性能,还可能会影响到数据库的正常使用。参数设置对应的配置文件默认与数据文件存放在同一目录。对于单实例数据库而言,需要关注的参数配置文件主要有 dm.ini、dmarch.ini、sqllog.ini 等。

3.1 dm.ini 配置文件

单实例配置参数数量较多,绝大部分保持默认即可,只有极小部分需要根据系统实际情况进行配置,部分参数配置建议如下:

参数 默认值 参数描述及建议 属性
MEMORY_POOL 500 共享内存池大小,以 M 为单位。共享内存池是由 DM 管理
的内存。有效值范围:32 位平台(642000),64 位平台为
(6467108864)。可根据系统实际情况进行适当调整。
静态
MEMORY_TARGET 15000 共享内存池在扩充到此大小以上后,空闲时收缩回此指定大
小,以 M 为单位。通常保持默认为 0,代表不限制。
动态,
系统级
BUFFER 1000 系统缓冲区大小,以 M 为单位。推荐值:系统缓冲区大小为
可用物理内存的 60%~80%。有效值范围(8~1048576)。
静态
PWD_POLICY 2 用来设置新建用户的密码策略,建议生产中按照生产规范来做
要求,密码定期修改,并杜绝泄漏。
动态,
系统级
SORT_BUF_SIZE 20 原排序机制下,排序缓存区最大值,以 M 为单位,有效值范围
(1~2048)。有大量排序操作时建议适当调大。
动态,
会话级
BUFFER_POOLS 19 BUFFER 系统分区数,一般配置为质数,并发较大的系统需要配
置这个参数,减少数据缓冲区并发冲突。
静态
RECYCLE 300 RECYCLE 缓冲区大小,以 M 为单位。有效值范围
(8~1048576)。高并发或大量使用 with、临时表、排序等情
况下应适当调大。
静态
RECYCLE_POOLS 19 RECYCLE 缓冲区分区数,一般配置为质数,并发较大的系统需
要配置这个参数,减少数据缓冲区并发冲突。
静态
DICT_BUF_SIZE 50 字典缓冲区大小,以 M 为单位。系统中对象个数较多时可适当
调大。
静态
WORKER_THREADS 16 工作线程的数目,建议设置为 CPU 核数或其两倍。 静态
MAX_SESSIONS 10000 系统允许同时连接的最大数,同时还受到 LICENSE 的限制,取
二者中较小的值,有效值范围(1~65000)。建议用户按照实
际内存和业务需求来配置。
静态
OLAP_FLAG 2 启用联机分析处理,0:不启用;1:启用;2:不启用,同时
倾向于使用索引范围扫描。OLTP 系统建议设置为 2,OLAP 系
统建议设置为 1。
动态,
会话级
TEMP_SPACE_LIMIT 0 临时表空间大小上限,单位为 MB,如果有大量排序、临时表
操作时可能会占用。关系到磁盘空间占用,建议根据磁盘情况
设置上限。
动态,
系统级
SVR_LOG 0 是否打开 SQL 日志功能,0:关闭;1:打开,并按照
SQLLOG.INI 中的配置来记录 SQL 日志;2:打开,按文件中
记录数量切换日志文件,日志记录为详细模式;3:打开,不
切换日志文件,日志记录为简单模式,只记录时间和原始语句。
建议根据磁盘情况设置,不宜过多。
动态,
系统级
ENABLE_MONITOR 1 用于打开或者关闭系统的监控功能。1:打开;0:关闭。打开
后会对数据库运行情况进行记录,对性能有所损耗,生产环境
建议关闭。
动态,
系统级
ARCH_INI 0 是否启用归档,0:不启用;1:启用。生产环境务必打开,否
则会影响到数据库备份。
动态,
系统级

以上参数属性分为三种:静态、动态和手动。

  • 静态:可以被静态修改的参数,修改后重启服务器才能生效。
  • 动态:可以被动态修改的参数,修改后即时生效。动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。
  • 手动:不能被动态修改的参数,必须手动修改 dm.ini 参数文件,然后重启才能生效。

其中,在数据库服务器运行期间,DBA 用户可以通过调用系统过程对动态参数进行修改。主要可使用以下三种系统过程:

  1. SP_SET_PARA_VALUE():设置 DM.INI 文件中整型的参数值。
--将 DM.INI 文件中动态参数 HFS_CACHE_SIZE 设置为 320,在 disql 中执行以下命令即可立即生效
SP_SET_PARA_VALUE (1,'HFS_CACHE_SIZE',320);
  1. SP_SET_PARA_DOUBLE_VALUE():设置 DM.INI 参数中浮点型的参数值。
--将 DM.INI 文件中动态参数 SEL_RATE_EQU 设置为 0.3,在 disql 中执行以下命令即可立即生效
SP_SET_PARA_DOUBLE_VALUE(1, 'SEL_RATE_EQU', 0.3);
  1. SP_SET_PARA_STRING_VALUE():设置 DM.INI 文件中的字符串型参数值。
--将 DM.INI 文件中动态参数 SQL_TRACE_MASK 设置为 1,在 disql 中执行以下命令即可立即生效
SP_SET_PARA_STRING_VALUE(1, 'SQL_TRACE_MASK','1');

更多详细函数使用方法可参考数据库安装目录的 doc 下《DM8_SQL 语言使用手册》。

3.2 dmarch.ini 配置文件

该配置文件主要用来配置归档,在单实例下,一般配置为本地归档,并建议分配独立的磁盘存放归档文件,设置每个归档文件的大小,并根据磁盘情况设置归档上限,以免撑满磁盘。

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 102400

部分参数详解如下表所示:

参数 说明
ARCH_TYPE 归档类型:本地归档 LOCAL;;远程实时归档 REALTIME;远程异步归档 ASYNC;
即时归档 TIMELY;远程归档 REMOTE。
ARCH_DEST 归档保存路径。
ARCH_FILE_SIZE 单个归档文件大小,单位 MB,取值范围(64~2048),默认为 1024MB,即 1G。
ARCH_SPACE_LIMIT 本地归档文件空间限制。当同一节点号的本地归档文件达到限制值时,系统自动删
除最早生成的本地归档日志文件。0 表示无空间限制,取值范围
(1024M~2147483647M),缺省为 0。

更多归档配置内容可参考:开启本地归档

3.3 sqllog.ini 配置文件

sqllog.ini 配置文件主要用于配置 sql 日志。如果需要开启 SQL 日志,则必须配置日志切换模式 SWITCH_MODE 和日志文件个数 FILE_NUM,防止日志无限增长导致磁盘撑爆,同步日志会严重影响系统效率,生产环境必须设置为异步日志。sqllog.ini 配置文件示例如下:

BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = ..\log
PART_STOR = 0
SWITCH_MODE = 2
SWITCH_LIMIT = 128
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 1
MIN_EXEC_TIME = 0
USER_MODE = 0
USERS

部分参数详解如下表所示:

参数 默认值 说明 属性
BUF_TOTAL_SIZE 10240 是 SQL 日志 BUFFER 占用空间的上限,单位为 KB,取值范围(1024~1024000) 动态,系统级
BUF_SIZE 1024 一块 SQL 日志 BUFFER 的空间大小,单位为 KB,取值范围
(50~409600)。
动态,系统级
FILE_PATH ../log SQL 日志文件所在的文件夹路径。 动态,系统级
SWITCH_MODE 2 表示 SQL 日志文件切换的模式:0:不切换;1:按文件中记
录数量切换;2:按文件大小切换;3:按时间间隔切换
手动
SWITCH_LIMIT 128 同切换模式 SWITCH_MODE 下,意义不同:
1、按数量切换时,一个日志文件中的 SQL 记录条数达到多
少条之后系统会自动将日志切换到另一个文件中。一个日
志文件中的 SQL 记录条数达到多少条之后系统会自动将日
志切换到另一个文件中。有效值范围(1000~ 10000000);
2、按文件大小切换时,一个日志文件达到该大小后,系统
自动将日志切换到另一个文件中,单位为 M。有效值范围
(1~ 2000);
3、按时间间隔切换时,每个指定的时间间隔,按文件新建
时间进行文件切换,单位为分钟。有效值范围(1~ 30000)。
动态,系统级
ASYNC_FLUSH 1 是否打开异步 SQL 日志功能。0:表示关闭;1:表示打开。 动态,系统级
FILE_NUM 5 总共记录多少个日志文件,当日志文件达到这个设定值以后,
再生成新的文件时,会删除最早的那个日志文件,日志文件
的命令格式为 dmsql_实例名_日期_时间.log。当这个参数配
置成 0 时,只会生成两个日志相互切换着记录。有效值范围
(0~1024)。
动态,系统级

更多参数详解可参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

四、表空间检查

4.1 表空间信息

通过以下语句可查看表空间基本信息:表空间大小,剩余空间大小,表空间使用率等。

SELECT a.tablespace_name "表空间名称",
total / (1024 * 1024) "表空间大小(M)",
free / (1024 * 1024) "表空间剩余大小(M)",
(total - free) / (1024 * 1024 ) "表空间使用大小(M)",
total / (1024 * 1024 * 1024) "表空间大小(G)",
free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
round((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;

在某系统中,执行结果如下:

image.png

上图中,可以看到 ROLL 表空间,空间剩余大小为 115.53125M,表空间已使用 36.46875M,表空间使用率 23.99% 等信息。当发现表空间使用率较高,剩余表空间不足或剩余表空间难以支撑有关业务时,须告知相关运维人员及时进行处理。

4.2 数据文件信息

通过以下 sql 语句可查看数据文件信息:数据文件保存路径,数据文件创建时机,数据文件大小,数据文件个数等。

select * from V$DATAFILE;

结果集字段说明请参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

4.3 表空间与数据文件关系

通过以下语句可查看表空间与数据文件对应关系。

SELECT
        TS.NAME,
        DF.PATH
FROM
        V$TABLESPACE AS TS,
        V$DATAFILE   AS DF
WHERE
        TS.ID = DF.GROUP_ID;

在某系统中,执行结果如下:

image.png

上图中,可以看到 SYSTEM 表空间对应的数据文件是 “/data/dm8_20220304/DM” 目录下的 SYSTEM.DBF 文件,其他以此类推。

4.4 Temp 表空间

TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP 表空间。查看方法如下:

SELECT a.tablespace_name "表空间名称",
total / (1024 * 1024) "表空间大小(M)",
free / (1024 * 1024) "表空间剩余大小(M)",
(total - free) / (1024 * 1024 ) "表空间使用大小(M)",
total / (1024 * 1024 * 1024) "表空间大小(G)",
free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
round((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;

4.5 Undo 回滚段

Undo 回滚段也被称为 undo 表空间,是由 DM 数据库自动维护管理。记录的是数据变动过程中的各个版本信息。在数据库数据发生频繁变动时,会生成大量的回滚段记录,由参数 UNDO_RETENTION 来控制回滚页保持时间,默认为 90s,一般保持默认即可。设置太小,可能会影响数据大批量查询;设置太大,则会在数据库启动时做过多的回滚操作。

五、死锁与阻塞检查

5.1 死锁

通过以下命令可以查看数据库死锁历史信息记录。

select * from V$DEADLOCK_HISTORY;

如果在结果集中发现有死锁需要及时进行排查并释放锁,避免影响业务正常运行。

5.2 阻塞

通过以下命令可以查看数据库是否存在阻塞。

WITH TRX_TAB AS
(SELECT O1.NAME,L1.TRX_ID FROM V$LOCK L1,SYSOBJECTS O1 WHERE L1.TABLE_ID=O1.ID AND O1.ID<>0),
TRX_SESS AS (
SELECT L.TRX_ID WT_TRXID, L.ROW_IDX BLK_TRXID,L.BLOCKED,(SELECT NAME TABLE_NAME FROM TRX_TAB A WHERE A.TRX_ID=L.TRX_ID) WT_TABLE,
S1.SESS_ID WT_SESS,S2.SESS_ID BLK_SESS,
S1.USER_NAME WT_USER_NAME,S2.USER_NAME BLK_USER_NAME,S1.SQL_TEXT,S1.CLNT_IP,DATEDIFF(SS, S1.LAST_SEND_TIME, SYSDATE) SS
FROM V$LOCK L,V$SESSIONS S1,V$SESSIONS S2
WHERE L.TRX_ID=S1.TRX_ID AND L.ROW_IDX=S2.TRX_ID)
SELECT SYSDATE STATTIME,* FROM TRX_SESS where BLOCKED=1;

如果在结果集中发现有阻塞需要及时进行排查和优化,避免影响业务正常运行。

更多锁查询、阻塞和慢 SQL 监控等内容,请参考 实例状态监控—SQL 监控运维常见问题—SQL 监控查询语句汇总

六、内存池信息检查

6.1 字典缓存

通过 SQL 命令查询动态性能视图 V$DB_CACHE,可以查看当前字典缓存信息、包括数据字典地址、缓存池总空间、实际使用空间等字典缓存信息。

select * from V$DB_CACHE;

更多动态性能视图 V$DB_CACHE 字段详解请参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

6.2 数据缓冲池

通过 SQL 命令查询页面缓冲区动态性能表 V$BUFFERPOOL,可以查看缓冲区页数、页大小、空闲页、淘汰的页数、数据页被引用的次数等页面缓冲区信息。

select * from V$BUFFERPOOL;

更多动态性能视图 V$BUFFERPOOL 字段详解请参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

6.3 内存池

通过 SQL 命令查询动态性能视图 V$MEM_POOL 可以查看内存结构地址、是否是共享内存池、初始大小、当前总大小、数据占用大小等内存池信息。

select * from V$MEM_POOL;

更多动态性能视图 V$MEM_POOL 字段详解请参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

七、数据库统计信息检查

7.1 系统统计信息

通过 SQL 命令查询动态性能视图 V$SYSSTAT 统计系统对象的信息,包括对象的 id、对象类型、统计对象名、统计值等。

select * from V$SYSSTAT where classid in (11,5) order by classid desc;

更多动态性能视图 V$SYSSTAT 字段详解请参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

7.2 会话统计

通过以下 SQL 命令可以查询到会话信息,包括会话活动状态、客户端 IP、客户端类型、当前模式、当前用户、会话数量等。

SELECT STATE,CLNT_IP,CLNT_TYPE,CURR_SCH,USER_NAME,COUNT(*) 
COUNTS FROM V$SESSIONS GROUP BY STATE,CLNT_IP,CLNT_TYPE,CURR_SCH,USER_NAME
 ORDER BY STATE;

更多详细字段说明请参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

7.3 对象统计

通过以下 SQL 命令可以查询到对象信息,包括表空间名、类型和数量等。

select tablespace_name,'TABLE_OF_TS' OBJTYPE,count() COUNTS from all_tables group by tablespace_name union all
select * from ( select owner,object_type,count(*) from all_objects
where owner not in ('SYS','SYSTEM','SYSAUDITOR','SYSSSO','CTISYS') group by object_type,owner
order by 1,2);

7.4 表行数统计

通过以下 SQL 命令可以查询表行数统计信息。

begin
for rec in (select owner,table_name from all_tables where owner not in ('SYS','SYSAUDITOR','SYSSSO','CTISYS')) loop
call SP_TAB_STAT_INIT(rec.owner,rec.table_name);
end loop;
end;
/
select owner,table_name,tablespace_name,status,num_rows from all_tables where owner not in ('SYS','SYSAUDITOR','SYSSSO','CTISYS')
order by owner,num_rows desc;

7.5 DBLINK 统计

通过以下 SQL 命令可以查询到 DBLINK 信息,包括所有者、连接名、用户名和地址等。

select * from DBA_DB_LINKS;

7.6 最慢的 20 条 SQL 统计

通过以下 SQL 命令可以查询到最慢的 20 条 SQL 信息。

SELECT TOP 20 START_TIME,TIME_USED/1000 TIME_USED,TOP_SQL_TEXT FROM V$SQL_HISTORY ORDER BY TIME_USED DESC;
SELECT * FROM V$SYSTEM_LONG_EXEC_SQLS ORDER BY EXEC_TIME DESC;

当发现存在较慢 SQL 影响到业务流畅度时要及时处理,避免影响业务正常运行。

7.7 高内存的 20 条 SQL 统计

通过以下 SQL 命令可以查询到高内存的 20 条 SQL 信息,包括会话 id、SQL ID、SQL 文本、使用内存数、执行结束时间、执行次数等。

select * from  V$SYSTEM_LARGE_MEM_SQLS order by mem_used_by_k desc;

当发现存在较高内存占用 SQL 是要及时排查 SQL 逻辑是否存在问题,是否存在阻塞,及时优化,避免内存资源被过度占用,影响业务进行。

7.8 前 20 条长耗时等待事件统计

动态性能视图 V$SYSTEM_EVENT 可以查看到包括自系统启动以来所有等待事件的详细信息。通过以下 SQL 命令可以查询到前 20 条长耗时等待事件信息。

SELECT top 20 * FROM V$SYSTEM_EVENT ORDER BY TOTAL_WAITS DESC;

当发现系统当前存在长耗时等待事件时,要及时进行排查并处理,防止产生大量 SQL 阻塞。

更多动态性能视图 V$SYSSTAT 字段详解请参考数据库安装目录的 doc 下《DM8 系统管理员手册》。

八、作业检查

作业是由 DM 代理程序按顺序执行的一系列指定的操作。作业可以执行更广泛的活动,包括运行 DM PL/SQL 、SQL 脚本、定期备份数据库、对数据库数据进行检查等。

本节以定时备份作业为例,介绍详细的作业检查步骤。其他作业检查步骤,也可参考本节内容。

8.1 备份作业策略

DM 数据库支持全量备份和增量备份。达梦数据库常用备份策略有两种,可根据实际业务需求进行选择。

  1. 全量 + 删除(推荐使用)备份策略。例如:设置每天 23:00 全量备份、删除 30 天前的全量备份。
  2. 全量 + 增量 + 删除备份策略,例如:每月第一个周六 23:00 全量备份。每天(除周六) 23:00 增量备份、删除 30 天前的增量备份、删除 40 天前的全量备份。

更多备份策略详细内容可参考:数据库备份

注意

DM7 数据库包括备份文件分散和备份集两种方式,由参数 BAK_POLICY 控制,详细内容可参照数据库安装目录下《DM7 备份还原手册》。

8.1.1 定时备份任务

通常情况下,生产系统都需要制定定时备份任务,备份时间点建议避开业务高峰期。每次备份的时间间隔,需要根据间隔时间段内生成归档量来判断,务必保证两次备份间隔时间的归档能完整保存,否则会导致备份失败。

在归档空间充足的条件下,数据量在 100 GB~2 TB 的数据库系统,建议采用每周全备一次,每天增量备份一次的定时备份调度策略,并在备份时选择同时备份日志文件。

数据库中的作业任务可通过管理工具或 SQL 命令两种方式进行检查。以下介绍详细检查步骤。

方法一:管理工具检查

  1. 查看数据库是否开启代理。通过管理工具查看,代理环境状态。若已开启代理环境,则会显示【作业】、【警报】和【操作员】选项。
  2. 检查是否创建了定时备份的任务。在代理中选择【作业】-右键点击【相关作业】-选择【属性】,如下图所示,即表明数据库中有定时备份任务。

image.png

  1. 在【作业调度】中点击对应调度可以查看具体调度设置。

image.png

方法二:SQL 命令检查

--查看所有作业信息
SELECT A.ID,A.NAME,A."ENABLE",A.USERNAME,A.CREATETIME,A.MODIFYTIME,A.DESCRIBE,
B.LAST_DATE||' '||B.LAST_SEC LAST_TIME,B.NEXT_DATE||' '||B.NEXT_SEC NEXT_TIME,B.WHAT
FROM SYSJOB.SYSJOBS A,SYSJOB.USER_JOBS B
WHERE A.ID=B.JOB;

--查看所有作业调度信息
SELECT * FROM SYSJOB.SYSJOBSCHEDULES;

8.1.2 定时删除备份任务

为了确保备份空间能循环使用,建议制定定时删除备份任务。检查定时删除备份任务的方式如下:
在代理中选择【作业】-右键点击【相关作业】-选择【属性】,如下图所示,即表明数据库中有定时删除备份任务。

image.png

此外,还需检查检查备份目录是否还存在过期备份,检查方式如下:

  1. 查询数据库的备份目录。
Select para_value from v$dm_ini where para_name=’BAK_PATH’;
  1. 进入备份集保存目录。查看是否存在有超过规定日期的的备份集,如果存在,要及时排查原因,防止出现大量未删除备份进而导致磁盘被撑爆。

8.2 备份空间

单实例或者是 Data Watch 集群,备份文件可保留在服务器本地的文件系统中。DMDSC 集群的备份文件可保留在本地,也可保留在 ASM 磁盘中。

不论是何种数据库架构,建议备份文件存放在服务器节点的本地文件系统中,并单独划分磁盘空间保存,至少保证剩余空间可保存一个周期的完整备份。

  1. 查找备份文件存放路径,通过以下命令可以查询到备份文件存放目录。
Select para_value from v$dm_ini where para_name=’BAK_PATH’;
  1. 执行 du -lsh 命令查看备份所在目录大小。
  2. 执行 df -h 命令找到备份目录所在根目录磁盘查看剩余空间大小。

image.png

8.3 备份作业执行情况

备份作业执行成功与否对维护数据库安全非常重要,也是数据库管理员每日需要关注的事情。建议定期巡检备份执行情况。

8.3.1 定时任务执行

定时任务执行情况可通过管理工具或备份日志进行检查。

方法一:使用 manager 管理工具检查。选择【代理】-->【作业】--> 右键点击需要检查的备份任务--> 选择【查看作业历史信息】,即可看到备份任务的执行情况。未出现错误的作业历史信息如下图所示。若作业历史信息存在错误,须及时排查故障原因,保证备份作业正常运行。

image.png

方法二:通过 SQL 命令检查。通过执行以下命令查看作业运行历史信息。

SELECT *
FROM SYSJOB.SYSSTEPHISTORIES2 A
WHERE (SELECT COUNT(*)
          FROM SYSJOB.SYSSTEPHISTORIES2 B
         WHERE B.NAME = A.NAME
           AND B.EXEC_ID >= A.EXEC_ID) <= 10
ORDER BY A.START_TIME DESC,A.NAME;

image.png

方法三:备份日志检查。通过备份日志和 DMAP 日志,可以获得备份任务执行情况,详细请参考实例资源监控-备份日志

8.3.2 备份校验

达梦数据库提供联机备份校验和脱机备份校验,可按照实际需求进行选择。例如:设备类型:DISK 或 TAPE。待校验的备份集目录为 “/home/dm_bak/db_bak_for_check”,通过如下两种方式进行校验。

方法一:联机备份校验。使用 SF_BAKSET_CHECK 函数对备份集进行校验。

--返回值为1表示备份集目录存在且合法,否则备份异常。
SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/db_bak_for_check');

方法二:脱机备份校验。利用 dmrman 工具校验备份文件的有效性。

RMAN>CHECK BACKUPSET '/home/dm_bak/db_bak_for_check';

九 、安全性设置检查

9.1 用户信息

查看用户信息,包括用户名、用户密码、默认表空间、索引表空间、数据文件等信息。

select * from DBA_USERS;

9.2 密码策略

密码策略决定了新建用户的密码复杂度,由 dm.Ini 参数 PWD_POLICY 决定,默认为 2,即密码长度不小于 9。
不同的生产环境,可能有不同的管理要求,但强烈建议设置较高指数的密码策略,密码做定期修改,杜绝密码泄漏。检查密码复杂度的方式如下所示:

Select * from v$dm_ini where para_name='PWD_POLICY';

参数 PWD_POLICY 详细说明:

参数名 默认值 属性 说明
PWD_POLICY 2 动态,系统级 设置系统默认口令策略:
0:无限制。但总长度不得超过 48 个字节;
1:禁止与用户名相同;
2:口令长度需大于等于 PWD_MIN_LEN 设置的值;
4:至少包含一个大写字母(A-Z);
8:至少包含一个数字(0-9);
16:至少包含一个标点符号(英文输入法状态下,
除―和空格外的所有符号;
若为其他数字,则表示配置值的和,如 3=1+2,表示同时启用
第 1 项和第 2 项策略。当 COMPATIBLE_MODE=1 时,PWD_POLICY
的实际值均为 0。

9.3 默认用户密码

DM 数据库初始化默认生成多个可登录的系统用户,包括:SYSDBA(数据库管理用户)、SYSAUDITOR(数据库审计用户)、SYSSSO(数据库安全用户,安全版数据库才能登录),默认密码和用户名相同。

默认用户不能删除,建议修改默认密码后妥善保存。若默认用户的密码丢失,则无法找回。

9.4 用户资源限制

用户资源限制中,可对用户登录失败次数,口令锁定期,口令宽限期进行设置。处于安全考虑,建议生产环境中要有常用的资源限制措施。需要修改用户资源限制时,可打开 DM 管理工具,在左侧对象导航栏中,选择【用户】--> 点击【管理用户】--右键点击待修改的用户--> 选择【修改】--> 选择【资源限制】,即可在【资源限制】页面进行相关内容设置,如下图所示:

image.png

9.5 用户权限信息

通过以下 SQL 命令可以对用户的权限信息进行检查,包括用户名、权限、类型等信息。

SELECT * FROM (
SELECT GRANTEE,GRANTED_ROLE PRIVILEGE,'ROLE_PRIVS' PRIVILEGE_TYPE,CASE ADMIN_OPTION WHEN 'Y' THEN 'YES' ELSE 'NO' END ADMIN_OPTION FROM DBA_ROLE_PRIVS 
UNION SELECT GRANTEE,PRIVILEGE,'SYS_PRIVS' PRIVILEGE_TYPE,ADMIN_OPTION FROM DBA_SYS_PRIVS
UNION SELECT GRANTEE,PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME PRIVILEGE,'TABLE_PRIVS' PRIVILEGE_TYPE,GRANTABLE FROM DBA_TAB_PRIVS
)
WHERE GRANTEE IN (SELECT USERNAME FROM ALL_USERS WHERE USERNAME NOT IN ('SYS','SYSDBA','SYSSSO','SYSAUDITOR') )
ORDER BY GRANTEE,PRIVILEGE_TYPE,PRIVILEGE;

9.6 默认端口使用

DM 数据库默认端口为 5236,在初始化实例时可以指定。也可通过修改 dm.ini 文件中参数 PORT_NUM 后重启实例服务,即可修改成功。生产环境建议不要使用默认端口。

9.7 通讯加密

应用和数据库之间的通信加密可通过配置 dm.ini 参数 COMM_ENCRYPT_NAME 来实现通信加密。如果为空则不进行通信加密;如果加密算法名错误,则用使用加密算法 DES_CFB。

DM 支持的加密算法名可以通过查询动态视图 V$CIPHERS 获取。无特殊要求,请勿开启该参数,以免造成不必要的性能消耗。

十、 参考

若以上内容无法解决您的问题,可以在 达梦技术社区 提问交流。

微信扫码
分享文档
扫一扫
联系客服