Skip to content

DM 关键监控指标

指标分类

DM数据库的关键监控指标可以分为以下几类:

  • 实例级指标:反映数据库实例的整体运行状态
  • 会话级指标:反映当前活跃会话的活动情况
  • 性能级指标:反映数据库的性能表现
  • 资源使用指标:反映CPU、内存、磁盘IO等系统资源的使用情况
  • 存储相关指标:反映数据库存储的使用情况
  • 锁与等待指标:反映数据库的锁争用和等待情况
  • SQL执行指标:反映SQL语句的执行效率

1.2 指标获取方式

  • 系统视图:通过V$系列视图查询
  • DM管理工具:图形化界面展示
  • DM性能监控工具:专业的性能指标展示
  • 命令行工具:disql、dmcmd等
  • 第三方监控系统:Zabbix、Prometheus等

1.3 指标监控原则

  • 全面性:覆盖数据库的各个方面
  • 实时性:及时获取最新的指标数据
  • 历史性:保存历史数据用于趋势分析
  • 告警性:设置合理的告警阈值
  • 可操作性:指标数据应能指导运维操作

实例级关键指标

2.1 实例状态指标

指标名说明正常范围获取方式
INSTANCE_STATUS实例运行状态OPENV$INSTANCE.STATUS$
START_TIME实例启动时间-V$INSTANCE.START_TIME
UPTIME实例运行时长-计算当前时间与START_TIME的差值
VERSION数据库版本-V$INSTANCE.VERSION
ARCH_MODE归档模式状态Y(建议)V$INSTANCE.ARCH_MODE

2.2 连接指标

指标名说明正常范围获取方式
SESSION_COUNT当前会话数小于MAX_SESSIONS的80%V$INSTANCE.SESSIONS
ACTIVE_SESSION_COUNT当前活跃会话数小于CPU核心数的2倍V$INSTANCE.ACTIVE_SESSIONS
MAX_SESSIONS最大允许会话数根据实际需求配置V$INSTANCE.MAX_SESSIONS
LOGIN_FAILURES登录失败次数越少越好V$INSTANCE.LOGIN_FAILURES

2.3 事务指标

指标名说明正常范围获取方式
ACTIVE_TRANSACTIONS当前活跃事务数小于MAX_TRANS的50%V$INSTANCE.ACTIVE_TRX
MAX_TRANSACTIONS最大允许事务数根据实际需求配置V$INSTANCE.MAX_TRX
COMMIT_COUNT提交事务数-V$SYSSTATCOMMITS
ROLLBACK_COUNT回滚事务数远小于COMMIT_COUNTV$SYSSTATROLLBACKS

会话级关键指标

3.1 会话基本信息

指标名说明正常范围获取方式
SID会话ID-V$SESSION.SID
USERNAME会话用户名-V$SESSION.USERNAME
STATUS会话状态ACTIVE/INACTIVEV$SESSION.STATUS
CLIENT_IP客户端IP地址-V$SESSION.CLIENT_IP
PROGRAM客户端程序名-V$SESSION.PROGRAM
LOGON_TIME登录时间-V$SESSION.LOGON_TIME
IDLE_TIME空闲时间过长可能需要清理V$SESSION.IDLE_TIME

3.2 会话资源消耗

指标名说明正常范围获取方式
CPU_USAGE会话CPU使用率单会话CPU使用率不宜过高V$SESSION.CPU_USAGE
MEMORY_USAGE会话内存使用率单会话内存使用率不宜过高V$SESSION.MEMORY_USED
DISK_READS会话磁盘读取次数越少越好V$SESSION.DISK_READS
DISK_WRITES会话磁盘写入次数越少越好V$SESSION.DISK_WRITES
BUFFER_GETS会话缓冲区获取次数与磁盘读取的比值越高越好V$SESSION.BUFFER_GETS

3.3 会话等待指标

指标名说明正常范围获取方式
WAIT_EVENT会话等待事件非空闲等待越少越好V$SESSION_WAIT.EVENT
WAIT_TIME等待时间越短越好V$SESSION_WAIT.WAIT_TIME
STATE等待状态WAITING/WAITEDV$SESSION_WAIT.STATE

性能级关键指标

4.1 吞吐量指标

指标名说明正常范围获取方式
TPS每秒事务数根据业务需求V$SYSSTATCOMMITSROLLBACKS的总和除以时间间隔
QPS每秒查询数根据业务需求V$SYSSTATSELECTSINSERTSUPDATESDELETES的总和除以时间间隔
IOPS每秒IO操作数根据存储设备性能计算磁盘读写次数总和除以时间间隔

4.2 响应时间指标

指标名说明正常范围获取方式
AVG_RESPONSE_TIME平均响应时间小于100ms计算总执行时间除以总SQL数
LONG_EXEC_SQL_COUNT长执行SQL数越少越好V$LONG_EXEC_SQL的记录数
MAX_EXEC_TIME最大执行时间小于10sV$SQL_STATISTICS.ELAPSED_TIME的最大值

4.3 命中率指标

指标名说明正常范围获取方式
BUFFER_HIT_RATIO缓冲区命中率大于95%(1 - (PHYSICAL_READS / (LOGICAL_READS + 1))) * 100
INDEX_HIT_RATIO索引命中率大于90%(1 - (TABLE_SCANS / (INDEX_SCANS + TABLE_SCANS))) * 100
SHARED_POOL_HIT_RATIO共享池命中率大于99%V$SYSSTAT中相关指标计算

资源使用关键指标

5.1 CPU使用指标

指标名说明正常范围获取方式
CPU_USAGECPU使用率小于80%V$INSTANCE.CPU_USAGE
USER_CPU_TIME用户态CPU时间-V$SYSSTATUSER_CPU_TIME
SYSTEM_CPU_TIME系统态CPU时间小于USER_CPU_TIMEV$SYSSTATSYSTEM_CPU_TIME

5.2 内存使用指标

指标名说明正常范围获取方式
MEMORY_USAGE内存使用率小于90%V$INSTANCE.MEMORY_USAGE
SHARED_MEMORY_USED共享内存使用量小于配置值的90%V$MEMORY.DYNAMIC_USED
PRIVATE_MEMORY_USED私有内存使用量-V$MEMORY.PRIVATE_USED
BUFFER_POOL_USED缓冲池使用量小于配置值的90%V$BUFFERPOOL.TOTAL_USED

5.3 磁盘IO指标

指标名说明正常范围获取方式
DISK_READ_RATE磁盘读取速率小于存储设备的最大读取速率计算单位时间内的磁盘读取量
DISK_WRITE_RATE磁盘写入速率小于存储设备的最大写入速率计算单位时间内的磁盘写入量
IO_WAIT_TIMEIO等待时间越短越好V$SESSION_WAIT中IO等待事件的等待时间
AVERAGE_IO_WAIT_TIME平均IO等待时间小于10ms计算IO等待时间的平均值

存储相关关键指标

6.1 表空间指标

指标名说明正常范围获取方式
TABLESPACE_NAME表空间名称-V$TABLESPACE.NAME
TOTAL_SIZE表空间总大小-V$TABLESPACE.TOTAL_SIZE
USED_SIZE表空间已使用大小-V$TABLESPACE.USED_SIZE
FREE_SIZE表空间可用大小-V$TABLESPACE.FREE_SIZE
USED_PERCENTAGE表空间使用率小于80%V$TABLESPACE.PCT_USED
STATUS表空间状态ONLINEV$TABLESPACE.STATUS$

6.2 数据文件指标

指标名说明正常范围获取方式
FILE_NAME数据文件路径-V$DATAFILE.PATH
FILE_SIZE数据文件大小-V$DATAFILE.TOTAL_SIZE
USED_SIZE数据文件已使用大小-V$DATAFILE.USED_SIZE
AUTOEXTEND是否自动扩展YES(建议)V$DATAFILE.AUTOEXTEND
MAX_SIZE最大允许大小-V$DATAFILE.MAX_SIZE

6.3 日志文件指标

指标名说明正常范围获取方式
LOG_GROUP日志组号-V$LOGFILE.GROUP_ID
LOG_SEQUENCE日志序列号-V$LOGFILE.SEQ_NO
LOG_SIZE日志文件大小建议256MB-1GBV$LOGFILE.TOTAL_SIZE
USED_SIZE日志已使用大小-V$LOGFILE.USED_SIZE
STATUS日志状态ACTIVE/CURRENT/INACTIVEV$LOGFILE.STATUS$
SWITCH_COUNT日志切换次数每小时少于20次V$INSTANCE.LOG_SWITCHES

锁与等待关键指标

7.1 锁指标

指标名说明正常范围获取方式
LOCK_COUNT当前锁数量越少越好V$INSTANCE.LOCKS
DEADLOCK_COUNT死锁次数0V$INSTANCE.DEADLOCKS
LOCK_WAIT_COUNT锁等待次数越少越好V$INSTANCE.LOCK_WAITS
LOCK_WAIT_TIME锁等待总时间越少越好V$INSTANCE.LOCK_WAIT_TIME

7.2 等待事件指标

指标名说明正常范围获取方式
WAIT_EVENT_COUNT等待事件数量越少越好V$SESSION_WAIT的记录数
TOP_WAIT_EVENT最频繁的等待事件-统计V$SESSION_WAIT.EVENT的出现次数
AVERAGE_WAIT_TIME平均等待时间越短越好计算V$SESSION_WAIT.WAIT_TIME的平均值

7.3 常见等待事件及处理方法

等待事件说明处理方法
IOIO等待优化存储性能,增加缓存
LOCK锁等待优化SQL,减少锁持有时间,调整事务隔离级别
LATCH闩锁等待增加共享内存,优化SQL
CPUCPU等待优化SQL,增加CPU资源
LOG_BUFFER日志缓冲区等待增加日志缓冲区大小
COMMIT提交等待优化事务大小,减少提交频率

SQL执行关键指标

8.1 SQL执行统计指标

指标名说明正常范围获取方式
SQL_TEXTSQL语句文本-V$SQL.SQL_TEXT
EXEC_COUNT执行次数-V$SQL_STATISTICS.EXEC_COUNT
ELAPSED_TIME总执行时间越短越好V$SQL_STATISTICS.ELAPSED_TIME
AVG_EXEC_TIME平均执行时间越短越好ELAPSED_TIME / EXEC_COUNT
BUFFER_GETS缓冲区获取次数越少越好V$SQL_STATISTICS.BUFFER_GETS
DISK_READS磁盘读取次数越少越好V$SQL_STATISTICS.DISK_READS
ROWS_PROCESSED处理的行数-V$SQL_STATISTICS.ROWS_PROCESSED
PARSE_CALLS解析次数越少越好V$SQL_STATISTICS.PARSE_CALLS

8.2 低效SQL指标

指标名说明正常范围获取方式
LONG_EXEC_SQL_COUNT长执行SQL数量越少越好V$LONG_EXEC_SQL的记录数
FULL_TABLE_SCAN_COUNT全表扫描次数越少越好V$SYSSTATTABLE_SCANS
HASH_JOIN_COUNT哈希连接次数-V$SYSSTATHASH_JOINS
NESTED_LOOP_JOIN_COUNT嵌套循环连接次数-V$SYSSTATNESTED_LOOPS

监控指标最佳实践

9.1 指标选择与监控频率

9.1.1 核心指标监控频率

  • 实例状态:每秒
  • 会话数:每秒
  • CPU、内存使用率:每秒
  • IO指标:每秒
  • 锁与等待:每5秒
  • SQL执行:每10秒
  • 存储使用:每5分钟

9.1.2 非核心指标监控频率

  • 表空间使用率:每小时
  • 数据文件增长:每天
  • 日志切换频率:每小时
  • 历史性能数据:每小时聚合,保留30天

9.2 告警阈值设置

9.2.1 实例级告警

  • 实例状态非OPEN:紧急告警
  • 会话数超过最大会话数的90%:严重告警
  • 活跃会话数超过CPU核心数的3倍:警告

9.2.2 资源告警

  • CPU使用率超过90%:严重告警
  • 内存使用率超过95%:严重告警
  • 磁盘IO使用率超过90%:严重告警

9.2.3 存储告警

  • 表空间使用率超过85%:警告
  • 表空间使用率超过95%:严重告警
  • 日志切换频率超过每小时30次:警告

9.2.4 性能告警

  • TPS/QPS突然下降超过50%:警告
  • 平均响应时间超过500ms:警告
  • 长执行SQL数量超过10个:警告

9.3 指标分析方法

9.3.1 趋势分析

  • 比较当前指标与历史数据的变化
  • 识别指标的长期趋势和季节性变化
  • 预测未来可能出现的问题

9.3.2 对比分析

  • 比较不同时间段的指标数据
  • 比较不同实例的指标数据
  • 比较实际值与基线值的差异

9.3.3 关联分析

  • 分析不同指标之间的关联关系
  • 例如:CPU使用率高与活跃会话数的关系
  • 例如:锁等待与SQL执行计划的关系

9.3.4 异常检测

  • 识别指标的突然变化
  • 检测超出正常范围的指标
  • 发现指标之间的异常关联

9.4 性能基线管理

9.4.1 建立基线

  1. 在业务正常运行期间,收集2-4周的性能数据
  2. 计算各项指标的平均值、最大值、最小值和标准差
  3. 确定各项指标的正常范围(平均值±2倍标准差)
  4. 建立性能基线文档

9.4.2 维护基线

  • 定期更新基线数据(如每季度)
  • 当业务发生重大变化时,重新建立基线
  • 对比当前性能数据与基线,识别异常

版本差异说明

10.1 DM 7 与 DM 8 的差异

指标类别DM 7DM 8
实例指标提供基本的实例状态和连接指标增加了更多精细化的实例指标
内存指标内存监控相对简单提供了更详细的内存分配和使用指标
存储指标基本的表空间和数据文件指标增加了更多存储性能指标
锁与等待指标提供基本的锁和等待事件增加了更丰富的等待事件类型和详细信息
SQL执行指标基本的SQL执行统计提供了更详细的SQL执行计划和统计信息
系统视图约100个系统视图约200个系统视图,提供更全面的指标

10.2 不同版本的注意事项

  • DM 7.6 之前的版本不支持部分性能指标
  • DM 8.0 开始支持自动性能基线
  • 升级数据库版本后,建议重新调整监控指标和告警阈值

常见问题与解决方案

11.1 指标获取问题

11.1.1 问题:某些系统视图无法访问

解决方案

  • 确保用户具有足够的权限
  • 检查视图是否存在(不同版本可能有差异)
  • 使用SYSDBA用户验证

11.1.2 问题:指标数据不准确

解决方案

  • 检查系统时间是否正确
  • 确保数据库统计信息是最新的
  • 重启监控工具或重新连接数据库

11.2 告警问题

11.2.1 问题:频繁收到误告警

解决方案

  • 调整告警阈值,使其更符合实际情况
  • 增加告警延迟时间,避免瞬时峰值触发告警
  • 分析告警原因,优化系统配置

11.2.2 问题:重要告警未及时收到

解决方案

  • 检查告警配置是否正确
  • 测试告警通知渠道是否正常
  • 确保监控系统本身正常运行

11.3 性能问题

11.3.1 问题:监控系统影响数据库性能

解决方案

  • 减少监控频率
  • 优化监控查询语句
  • 使用只读副本进行监控
  • 增加监控系统的资源

11.3.2 问题:指标数据不完整

解决方案

  • 检查监控配置是否覆盖所有关键指标
  • 确保监控系统与数据库的连接稳定
  • 增加监控系统的存储空间

常见问题(FAQ)

Q1: 如何选择需要监控的关键指标?

A1: 应根据业务需求和系统特点选择监控指标,建议优先监控:

  1. 实例状态和连接指标
  2. CPU、内存、IO等资源指标
  3. 锁与等待指标
  4. 关键SQL执行指标
  5. 存储使用指标

Q2: 如何设置合理的告警阈值?

A2: 可以通过以下方法设置:

  1. 参考数据库厂商的建议
  2. 根据历史性能数据建立基线
  3. 考虑业务需求和系统承载能力
  4. 从小阈值开始,逐步调整
  5. 不同级别的告警设置不同的阈值

Q3: 如何监控DM数据库的性能趋势?

A3: 可以通过以下方法:

  1. 保存历史性能数据
  2. 使用性能监控工具生成趋势图表
  3. 定期生成性能报告
  4. 建立性能基线,对比分析

Q4: 如何识别DM数据库的性能瓶颈?

A4: 可以通过以下步骤:

  1. 检查CPU、内存、IO等资源使用率
  2. 分析等待事件,识别资源争用
  3. 查看Top SQL,识别低效SQL
  4. 检查锁信息,识别锁争用
  5. 分析存储使用情况

Q5: 如何监控DM数据库的存储空间?

A5: 可以通过以下方法:

  1. 监控表空间使用率
  2. 监控数据文件增长趋势
  3. 设置表空间自动扩展
  4. 定期检查和清理无用数据
  5. 配置存储告警

Q6: 如何监控DM数据库的锁情况?

A6: 可以通过以下方法:

  1. 监控锁数量和锁等待时间
  2. 分析锁等待事件
  3. 查看锁持有情况,识别长时间持有的锁
  4. 配置锁等待告警
  5. 使用DM管理工具的锁管理功能

Q7: 如何监控DM数据库的SQL执行情况?

A7: 可以通过以下方法:

  1. 监控Top SQL
  2. 分析SQL执行计划
  3. 监控SQL执行统计信息
  4. 启用SQL审计
  5. 使用SQL追踪功能

Q8: 如何优化DM数据库的监控性能?

A8: 可以通过以下方法:

  1. 选择关键指标,避免监控过多指标
  2. 调整监控频率,平衡实时性和性能开销
  3. 优化监控查询语句
  4. 使用只读副本进行监控
  5. 增加监控系统的资源
  6. 定期清理历史监控数据

Q9: 如何将DM数据库的指标集成到第三方监控系统?

A9: 可以通过以下方法:

  1. 使用JDBC/ODBC驱动连接数据库,查询系统视图
  2. 开发自定义监控插件
  3. 使用DM数据库提供的监控API
  4. 配置日志转发,解析日志获取指标
  5. 使用Prometheus等支持的 exporter

Q10: 如何使用系统视图查询DM数据库的关键指标?

A10: 可以使用以下常用查询:

sql
-- 实例状态和连接指标
SELECT STATUS$, SESSIONS, ACTIVE_SESSIONS, CPU_USAGE, MEMORY_USAGE 
FROM V$INSTANCE;

-- 会话等待事件
SELECT EVENT, COUNT(*) AS WAIT_COUNT, AVG(WAIT_TIME) AS AVG_WAIT_TIME 
FROM V$SESSION_WAIT 
GROUP BY EVENT 
ORDER BY WAIT_COUNT DESC;

-- 表空间使用率
SELECT NAME, TOTAL_SIZE/1024/1024 AS TOTAL_MB, 
       USED_SIZE/1024/1024 AS USED_MB, 
       PCT_USED 
FROM V$TABLESPACE 
ORDER BY PCT_USED DESC;

-- Top SQL
SELECT SQL_TEXT, EXEC_COUNT, ELAPSED_TIME/1000 AS TOTAL_TIME_MS, 
       (ELAPSED_TIME/EXEC_COUNT)/1000 AS AVG_TIME_MS 
FROM V$SQL_STATISTICS 
ORDER BY ELAPSED_TIME DESC 
LIMIT 10;