达梦数据库实例状态监控命令与功能汇总

原文链接: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位平台范围 (642000),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 = 0N_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_TIMELAST_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_MODEFILE_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.logdm_svc.conf 中开启
ODBC 日志自定义路径(如 /root/odbc.logodbcinst.ini 中配置
JDBC 日志自定义目录连接串加 ?loglevel=all&logDir=/opt/log

💡 提示:所有监控建议结合业务场景设置阈值告警,并定期巡检。
如遇问题,可前往 达梦技术社区 提问交流。