Skip to content

DB2 内置监控工具

监控工具概述

DB2 内置监控工具是数据库产品自带的监控组件,无需额外安装即可使用,提供从实时监控到历史数据分析的全面监控能力。这些工具覆盖了数据库性能、状态、资源使用等多个方面,是DBA日常运维工作的重要帮手。

内置监控工具的价值

  • 实时故障诊断:快速定位数据库性能瓶颈和故障
  • 性能优化依据:提供详细的性能数据,支持针对性优化
  • 资源使用监控:跟踪CPU、内存、I/O等资源使用情况
  • 健康状态评估:评估数据库整体健康状况
  • 趋势分析支持:收集历史数据,支持性能趋势分析
  • 自动化管理:部分工具支持自动化监控和修复

实时监控工具

db2pd - 命令行实时监控工具

db2pd 是 DB2 中最强大的命令行监控工具,提供实时的数据库状态和性能数据,资源消耗低,适合生产环境长期运行。

核心功能

  • 数据库连接和应用程序监控
  • 锁和死锁分析
  • 缓冲池使用情况监控
  • 表空间和容器状态查看
  • 日志和事务信息监控
  • 内存使用情况分析
  • I/O 统计信息收集

基本使用示例

bash
db2pd -d sample
db2pd -d sample -applications
db2pd -d sample -locks -transactions -applications
db2pd -d sample -bufferpools
db2pd -d sample -tablespaces -containers
db2pd -d sample -logs -transactions

生产环境高级用法

bash
db2pd -d sample -deadlock
db2pd -d sample -memsets -memblocks -mempools
db2pd -d sample -fileio
db2pd -d sample -applications -dynamic -static > db2pd_app_report.txt

db2top - 交互式监控工具

db2top 是一个交互式的监控工具,提供类似 Unix top 命令的界面,实时显示数据库性能指标,适合快速故障诊断和性能监控。

核心功能

  • 实时显示数据库性能指标
  • 支持多种视图切换
  • 交互式操作,便于深入分析
  • 支持导出数据和生成报告
  • 资源消耗相对较低

基本使用方法

bash
db2top -d sample
db2top -d sample -u db2inst1 -p password
db2top -d sample -v locks

常用视图切换

按键视图类型功能描述
M主视图显示数据库总体性能指标
A应用视图显示应用程序连接和执行情况
C连接视图显示数据库连接和应用程序信息
L锁视图显示锁和锁等待信息
B缓冲池视图显示缓冲池使用情况
T表空间视图显示表空间使用情况
S排序视图显示排序操作信息
R语句视图显示数据库语句执行信息
M内存视图显示内存使用情况

快照监控工具

快照监控通过获取数据库在特定时间点的状态快照来监控性能,提供全面的数据库状态信息,适合详细的性能分析。

快照类型

快照类型命令功能描述
数据库快照GET SNAPSHOT FOR DATABASE ON dbname数据库级别的性能数据
表空间快照GET SNAPSHOT FOR TABLESPACES ON dbname表空间使用情况
缓冲池快照GET SNAPSHOT FOR BUFFERPOOLS ON dbname缓冲池使用情况
应用程序快照GET SNAPSHOT FOR APPLICATIONS ON dbname应用程序连接和执行情况
锁快照GET SNAPSHOT FOR LOCKS ON dbname锁和锁等待情况
语句快照GET SNAPSHOT FOR STATEMENTS ON dbname语句执行情况

生产使用示例

bash
db2 update monitor switches using bufferpool on lock on sort on statement on table on timestamp on
db2 get snapshot for database on sample
db2 get snapshot for applications on sample
db2 get snapshot for locks on sample
db2 update monitor switches using sort off timestamp off

事件监控工具

事件监控是基于事件的监控方式,当特定事件发生时收集相关数据,适合长期监控和分析特定事件类型。

事件类型

事件类型功能描述
语句事件收集语句执行信息
死锁事件收集死锁相关信息
表空间事件收集表空间状态变化信息
连接事件收集数据库连接和断开信息
事务事件收集事务开始和结束信息

生产配置示例

bash
db2 "create event monitor stmtmon for statements write to table"
db2 "set event monitor stmtmon state 1"
db2 "select * from stmtmon.stmt where exec_time > 1000 fetch first 10 rows only"
db2 "delete from stmtmon.stmt where event_timestamp < current timestamp - 7 days"
db2 "set event monitor stmtmon state 0"
db2 "drop event monitor stmtmon"

健康监控工具

健康指示器

健康指示器是 DB2 内置的用于监控数据库健康状态的指标集,通过监控关键性能指标,评估数据库的健康状况。

核心功能

  • 实时监控数据库健康状态
  • 提供告警和建议
  • 支持历史数据查询
  • 可配置告警阈值

生产使用示例

bash
db2 "select * from sysibmadm.health_status where alert_state <> 'NORMAL'"
db2 "update alert cfg for database using TABLESPACE_UTILIZATION warning (80) critical (90)"
db2 "select * from sysibmadm.health_history where indicatorname = 'TABLESPACE_UTILIZATION' order by collection_time desc fetch first 20 rows only"

自动化管理员

自动化管理员能够自动监控数据库健康状态,并在发现问题时采取相应的修复措施。

核心功能

  • 自动收集统计信息
  • 自动重组表和索引
  • 自动健康检查
  • 自动备份(部分版本)

生产配置示例

bash
db2 "get db cfg for sample | grep AUTO"
db2 "update db cfg for sample using AUTO_MAINT ON AUTO_RUNSTATS ON"
db2 "update db cfg for sample using AUTO_REORG ON"
db2 "select * from sysibmadm.admintaskstatus"

日志分析工具

db2diag - 诊断日志分析工具

db2diag 用于分析 DB2 诊断日志(db2diag.log),帮助管理员快速定位和分析数据库故障。

生产使用示例

bash
db2diag -latest -severity ERROR
db2diag -time 2023-10-01-10.00.00,2023-10-01-11.00.00
db2diag -db sample
db2diag -grep "deadlock"

db2look - 数据库结构和统计信息工具

db2look 用于提取数据库结构、统计信息和优化器统计信息,适合性能分析和问题诊断。

生产使用示例

bash
db2look -d sample -e -m -o db2look_output.sql
db2look -d sample -t orders -m -o orders_stats.sql
db2look -d sample -a -x -r -o optimizer_stats.sql

版本差异

DB2 9.x

  • 引入增强版 db2pd 工具
  • 快照监控功能增强
  • 初步支持健康指示器
  • 基础的事件监控功能

DB2 10.x

  • 引入 db2top 交互式监控工具
  • 增强事件监控功能
  • 健康指示器功能完善
  • 自动化管理员功能增强
  • db2pd 功能扩展

DB2 11.x

  • db2pd 功能进一步增强
  • 引入更多健康指示器
  • 自动化管理员功能优化
  • 增强日志分析能力
  • 支持更多监控视图

Db2 12.x

  • 增强实时监控能力
  • 引入机器学习辅助监控
  • 日志分析工具增强
  • 支持云环境监控
  • 优化监控工具性能

生产实践

监控工具选择策略

监控场景推荐工具原因
实时故障诊断db2top、db2pd提供实时性能数据,便于快速定位问题
详细性能分析快照监控、事件监控提供全面的性能数据,便于深入分析
长期趋势分析事件监控、健康指示器支持收集历史数据,便于趋势分析
自动化监控健康指示器、自动化管理员支持自动监控和修复,减少人工干预
日志分析db2diag、db2look便于分析数据库日志和结构信息

监控最佳实践

  1. 建立监控体系:结合多种监控工具,建立全面的监控体系
  2. 分级监控策略:
    • 实时监控:关键业务时段每1-5分钟
    • 定期监控:非关键时段每30分钟
    • 深度分析:每周或每月一次
  3. 关注关键指标:
    • 缓冲池命中率(>95%)
    • 锁等待时间(<100ms)
    • 排序溢出率(<1%)
    • 日志写入时间(<50ms)
    • CPU使用率(<80%)
  4. 设置合理告警:根据业务需求设置告警阈值,避免告警风暴
  5. 定期分析数据:每周分析监控数据,识别潜在问题
  6. 文档化监控流程:记录监控配置、告警规则和处理流程
  7. 优化监控性能影响:
    • 合理设置监控频率
    • 只收集必要的监控数据
    • 定期清理监控历史数据

常见监控场景处理

场景1:数据库响应缓慢

  1. 使用 db2top 查看实时性能指标
  2. 检查锁视图(L键),查看是否存在锁等待
  3. 检查语句视图(R键),识别慢语句
  4. 使用 db2pd -d dbname -locks -transactions -applications 查看详细锁信息
  5. 分析慢语句,进行优化

场景2:死锁问题

  1. 使用 db2pd -d dbname -deadlock 查看死锁信息
  2. 启用死锁事件监控,收集详细死锁数据
  3. 分析死锁发生原因,优化应用程序逻辑
  4. 考虑调整锁超时参数

场景3:表空间使用率过高

  1. 使用 db2pd -d dbname -tablespaces 查看表空间使用情况
  2. 设置表空间使用率告警阈值
  3. 考虑扩展表空间或清理数据
  4. 分析表空间增长趋势,预测未来需求

常见问题(FAQ)

Q1: db2pd 和 db2top 有什么区别?

A1: db2pd 是命令行工具,输出文本格式数据,资源消耗较小,适合脚本化监控和详细分析;db2top 是交互式工具,提供类似 top 的界面,更适合实时监控和快速故障诊断。

Q2: 如何选择合适的监控工具?

A2: 根据监控需求选择:

  • 实时故障诊断:db2top、db2pd
  • 详细性能分析:快照监控、事件监控
  • 长期趋势分析:事件监控、健康指示器
  • 自动化监控:健康指示器、自动化管理员

Q3: 监控工具会影响数据库性能吗?

A3: 会,影响程度取决于:

  • 监控频率:频率越高,影响越大
  • 监控范围:范围越广,影响越大
  • 数据量:收集的数据量越大,影响越大

建议根据业务需求合理配置监控,避免过度监控。

Q4: 如何设置健康指示器告警?

A4: 使用以下命令设置:

bash
db2 "update alert cfg for database using indicator_name warning (value) critical (value)"

例如:

bash
db2 "update alert cfg for database using TABLESPACE_UTILIZATION warning (80) critical (90)"

Q5: 如何分析 db2diag.log 中的错误?

A5: 步骤如下:

  1. 使用 db2diag 工具过滤日志:db2diag -severity ERROR
  2. 查找错误代码和描述
  3. 查看错误上下文
  4. 根据错误信息查找解决方案
  5. 记录错误和解决方案,建立知识库