达梦数据库实例状态监控命令与功能汇总
达梦数据库实例状态监控命令与功能汇总
原文链接:https://eco.dameng.com/document/dm/zh-cn/ops/instance-monitor.html
适用于 DM7 / DM8 版本
目录
1. 会话监控
功能
监控当前数据库的活动会话数、空闲会话数、总会话数及其占最大连接数(max_sessions)的比例。
SQL 查询方式
-- 总会话数
SELECT COUNT(*) FROM v$sessions;
-- 活动会话数
SELECT COUNT(*) FROM v$sessions WHERE state = 'ACTIVE';
-- 空闲会话数
SELECT COUNT(*) FROM v$sessions WHERE state = 'IDLE';
-- 终止指定会话
CALL sp_close_session(sess_id);
操作系统命令方式(端口默认为 5236)
# 查看 dmserver 进程建立的 TCP 连接数量
lsof -i:5236 | grep dmserver | wc -l
netstat -nat | awk '{print $4}' | grep 5236 | wc -l
异常判断依据
- 活动会话过多:业务繁忙、存在慢 SQL、应用重连机制缺陷。
- 空闲会话过多:处于空闲期、连接池上限过高、应用未释放连接。
2. 线程监控
功能
监控数据库中活动线程和等待线程的状态。
查询语句
-- 活动线程信息
SELECT * FROM V$THREADS;
-- 等待线程信息(锁等待等)
SELECT * FROM V$LATCHES;
3. SQL 监控
功能
监控慢 SQL、阻塞、死锁、事务未提交等问题。
关键查询语句
3.1 阻塞会话查询
SELECT
DS.SESS_ID "被阻塞的会话ID",
DS.SQL_TEXT "被阻塞的SQL",
DS.TRX_ID "被阻塞的事务ID",
(CASE L.LTYPE
WHEN 'OBJECT' THEN '对象锁'
WHEN 'TID' THEN '事务锁'
END) "被阻塞的锁类型",
DS.CREATE_TIME "开始阻塞时间",
SS.SESS_ID "占用锁的会话ID",
SS.SQL_TEXT "占用锁的SQL",
SS.CLNT_IP "占用锁的IP",
L.TID "占用锁的事务ID"
FROM V$LOCK L
LEFT JOIN V$SESSIONS DS ON DS.TRX_ID = L.TRX_ID
LEFT JOIN V$SESSIONS SS ON SS.TRX_ID = L.TID
WHERE L.BLOCKED = 1;
解决方式:
SP_CLOSE_SESSION(占用锁的会话ID);SP_CLOSE_SESSION(被阻塞的会话ID);
3.2 死锁历史查询
SELECT dh.trx_id, sh.sess_id, wm_concat(top_sql_text)
FROM V$DEADLOCK_HISTORY dh, V$SQL_HISTORY sh
WHERE dh.trx_id = sh.trx_id AND dh.sess_id = sh.sess_id
GROUP BY dh.trx_id, sh.sess_id;
3.3 对象锁占用情况
SELECT b.object_name, c.sess_id, a.*
FROM v$lock a, dba_objects b, v$sessions c
WHERE a.table_id = b.object_id
AND ltype = 'OBJECT'
AND a.trx_id = c.trx_id;
4. 内存资源监控
功能
监控达梦数据库使用的内存,主要包括 BUFFER(数据缓冲区) 和 MPOOL(共享内存池)。
4.1 总内存使用量
SELECT
(SELECT SUM(n_pages) * page()/1024/1024 FROM v$bufferpool) || 'MB' AS BUFFER_SIZE,
(SELECT SUM(total_size)/1024/1024 FROM v$mem_pool) || 'MB' AS MEM_POOL,
(SELECT SUM(n_pages) * page()/1024/1024 FROM v$bufferpool) +
(SELECT SUM(total_size)/1024/1024 FROM v$mem_pool) || 'MB' AS TOTAL_SIZE
FROM dual;
- BUFFER_SIZE:推荐设为物理内存的 60%~80%
- MEM_POOL:32位平台范围 (64
2000),64位平台 (6467108864)
4.2 内存池详情
SELECT
name,
is_shared,
is_overflow,
org_size/1024.0/1024.0 AS init_size_MB,
total_size/1024.0/1024.0 AS total_size_MB,
reserved_size/1024.0/1024.0 AS used_size_MB,
data_size/1024.0/1024.0 AS effective_size_MB,
extend_size,
target_size,
n_extend_normal,
n_extend_exclusive
FROM v$mem_pool
ORDER BY total_size DESC;
重点关注:
n_extend_exclusive > 0:可能内存泄漏is_overflow = 1:使用了备份池,需警惕reserved_size < org_size:内存池空闲,可调小total_size > target_size:频繁扩展,应增大参数
4.3 单个会话内存使用
SELECT A.CREATOR, B.SQL_TEXT,
SUM(A.TOTAL_SIZE)/1024.0/1024.0 AS TOTAL_M,
SUM(A.DATA_SIZE)/1024.0/1024.0 AS DATA_SIZE_M
FROM V$MEM_POOL A, V$SESSIONS B
WHERE A.CREATOR = B.THRD_ID
GROUP BY A.CREATOR, B.SQL_TEXT
ORDER BY TOTAL_M DESC;
4.4 内存泄漏检测
-- 开启内存泄漏检查
ALTER SYSTEM SET 'MEMORY_LEAK_CHECK' = 1;
-- 查看内存注册信息(REFNUM 大表示堆积)
SELECT * FROM V$MEM_REGINFO ORDER BY REFNUM DESC;
4.5 缓冲区监控
SELECT
name,
n_pages,
free,
N_DISCARD64
FROM v$bufferpool;
free = 0或N_DISCARD64 > 0:缓冲区太小,需调大free 很大:可适当减小 buffer 参数
4.6 SQL 缓存池
-- 缓存池大小(MB)
SELECT SUM(ITEM_SIZE)/1024/1024 AS 缓存池大小_M FROM V$CACHEITEM;
-- 缓存命中率
SELECT
name AS 缓冲池名称,
SUM(page_size) * sf_get_page_size AS 缓冲池大小_G,
SUM(rat_hit) / COUNT(*) AS 命中率
FROM v$bufferpool
GROUP BY name;
⚠️ 注意:SQL 缓存池最大可动态增长至
CACHE_POOL_SIZE的 3 倍,设置不当可能导致虚拟内存耗尽。
5. 表空间监控
功能
监控业务表空间、ROLL(回滚)、TEMP(临时)表空间的使用率。
5.1 表空间使用情况
SELECT
UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (
SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024*1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024*1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
) F,
(
SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024*1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME
) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 2 DESC;
5.2 ROLL 表空间(UNDO)
-- 查看 ROLL 表空间文件
SELECT * FROM dba_data_files WHERE tablespace_name = 'ROLL';
-- 设置 ROLL 文件上限(示例:500GB)
ALTER TABLESPACE "ROLL" DATAFILE 'ROLL.DBF' AUTOEXTEND ON MAXSIZE 512000;
-- ROLL 使用率
SELECT
a.tablespace_name space_name,
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
ORDER BY "使用率" DESC;
5.3 TEMP 表空间
- 过大原因:内存不足或大量中间结果集
- 控制参数:
TEMP_SIZE:初始大小TEMP_SPACE_LIMIT:上限
- 收缩命令(生产慎用):
CALL SP_TRUNC_TS_FILE('TEMP', 0);
5.4 数据文件路径
SELECT TS.NAME, DF.PATH
FROM V$TABLESPACE TS, V$DATAFILE DF
WHERE TS.ID = DF.GROUP_ID;
6. 集群状态监控(DSC)
功能
监控 DSC 集群中各节点的 CSS、ASM、DMSERVER 进程状态。
工具命令
cd $DM_HOME/bin
./dmcssm dmcssm.ini
关注字段(正常值应为 OK / TRUE)
inst_status:实例系统状态vtd_status:集群状态is_ok:实例在集群内是否正常active:实例是否活动
7. 检查点监控
功能
确保检查点能正常刷新,避免数据刷盘异常。
查询语句
SELECT * FROM V$CKPT;
- 检查
LAST_BEGIN_TIME与LAST_END_TIME是否持续更新
8. 作业运行状态监控
功能
监控定时任务(如备份、清理)的执行状态。
图形化操作
- 创建代理环境 → 新建作业 → 设置步骤与调度 → 查看历史
命令行查询
-- 作业定义
SELECT * FROM sysjob.sysjobs;
-- 执行历史
SELECT * FROM sysjob.sysjobhistories;
-- 调度计划
SELECT * FROM sysjob.sysjobschedules;
-- 作业步骤
SELECT * FROM sysjob.sysjobsteps;
9. 日志监控与分析
9.1 日志级别
INFO:正常信息WARNING:轻微异常ERROR:错误,操作失败FATAL:致命错误,可能导致宕机
9.2 实例日志(dm_实例名_月份.log)
# 检查错误
cat dm_DMSERVER_202203.log | grep "$$ERROR"
# 检查警告
cat dm_DMSERVER_202203.log | grep "$$WARNING"
# 检查是否重启
cat dm_DMSERVER_202203.log | grep "SYSTEM READY"
9.3 SQL 日志
-
开启要求:
- 必须配置
SWITCH_MODE和FILE_NUM - 生产建议异步日志
SQL_TRACE_MASK不要设为 1(全记录)
- 必须配置
-
日志格式示例:
2022-03-23 15:04:06.926 (sess:... user:SYSDBA trxid:... ip:127.0.0.1) [SEL] select ... EXECTIME: 0(ms) -
分析工具:
DMLOG(达梦 SQL 日志分析工具)
9.4 其他日志
| 日志类型 | 文件名示例 | 说明 |
|---|---|---|
| DMAP 辅助进程日志 | dm_DMAP_日期.log | 记录 DMAP 进程运行 |
| 备份日志 | dm_BAKES_日期.log | 记录备份过程 |
| DPI/DCI 接口日志 | dmdci_trace.log, dpi_trace.log | 在 dm_svc.conf 中开启 |
| ODBC 日志 | 自定义路径(如 /root/odbc.log) | 在 odbcinst.ini 中配置 |
| JDBC 日志 | 自定义目录 | 连接串加 ?loglevel=all&logDir=/opt/log |
💡 提示:所有监控建议结合业务场景设置阈值告警,并定期巡检。
如遇问题,可前往 达梦技术社区 提问交流。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是转载文章,版权归原作者所有。建议访问原文,转载本文请联系原作者。

