风哥教程参考DB2官方文档Performance Monitoring and Tuning Guide、System Monitor Guide等内容,详细介绍DB2监控方法、性能指标和监控工具。更多视频教程www.fgedu.net.cn
目录大纲
Part01-监控基础概念
1.1 DB2监控类型
- 快照监控:获取当前状态的快照
- 事件监控器:记录特定事件
- 实时监控:db2top、db2pd等工具
- 性能视图:SQL管理视图
- 表函数:SYSPROC包中的表函数
1.2 关键性能指标
实例级别指标
- 连接数:当前连接数、最大连接数
- 代理进程:代理数、协调代理数
- 内存使用:实例内存、数据库内存
- 锁等待:锁等待时间、锁等待次数
- 排序操作:排序次数、排序溢出
数据库级别指标
- 缓冲池:命中率、物理读写
- 表空间:使用情况、IO性能
- 日志:日志使用、日志读写
- SQL:执行次数、执行时间
- 死锁:死锁次数、死锁时间
1.3 监控数据存储
- 内存中:快照监控缓冲区
- 文件中:事件监控器文件
- 表中:监控数据表
- 外部系统:监控平台
Part02-快照监控
2.1 实例级别快照
GET SNAPSHOT FOR DATABASE MANAGER;
# 获取数据库快照
GET SNAPSHOT FOR ALL DATABASES;
# 获取应用程序快照
GET SNAPSHOT FOR ALL APPLICATIONS;
# 获取锁快照
GET SNAPSHOT FOR LOCKS ON fgedb;
# 获取缓冲池快照
GET SNAPSHOT FOR BUFFERPOOLS ON fgedb;
# 获取表空间快照
GET SNAPSHOT FOR TABLESPACES ON fgedb;
# 获取动态SQL快照
GET SNAPSHOT FOR DYNAMIC SQL ON fgedb;
# 获取事务快照
GET SNAPSHOT FOR TRANSACTIONS ON fgedb;
2.2 使用表函数获取监控数据
SELECT * FROM TABLE(SYSPROC.ADMIN_GET_DBM_INFO()) AS T;
# 数据库快照
SELECT * FROM TABLE(SYSPROC.ADMIN_GET_DB_INFO(‘FGEDB’)) AS T;
# 缓冲池信息
SELECT * FROM TABLE(SYSPROC.ADMIN_GET_BP_INFO(‘FGEDB’, -2)) AS T;
# 表空间信息
SELECT * FROM TABLE(SYSPROC.ADMIN_GET_TBSP_INFO(‘FGEDB’, -2)) AS T;
# 应用程序信息
SELECT * FROM TABLE(SYSPROC.ADMIN_GET_APPL_INFO(‘FGEDB’, -1)) AS T;
# 锁信息
SELECT * FROM TABLE(SYSPROC.MON_GET_LOCKS(”, -2)) AS T;
# 等待事件
SELECT * FROM TABLE(SYSPROC.MON_GET_WAIT_EVENTS(NULL, NULL, -2)) AS T;
2.3 性能视图查询
SELECT DB_NAME,
TOTAL_CONNECTIONS,
TOTAL_COMMITS,
TOTAL_ROLLBACKS,
ROWS_READ,
ROWS_WRITTEN
FROM SYSIBMADM.SNAPDB;
# 缓冲池命中率
SELECT BP_NAME,
TOTAL_LOGICAL_READS,
TOTAL_PHYSICAL_READS,
(TOTAL_LOGICAL_READS – TOTAL_PHYSICAL_READS) * 100.0 / NULLIF(TOTAL_LOGICAL_READS, 0) AS HIT_RATIO_PERCENT
FROM SYSIBMADM.SNAPBP;
# 表空间使用
SELECT TBSPACE,
TBSP_TOTAL_SIZE_KB,
TBSP_USED_SIZE_KB,
TBSP_FREE_SIZE_KB,
TBSP_UTILIZATION_PERCENT
FROM SYSIBMADM.SNAPTABSP;
# 最慢的SQL语句
SELECT STMT_TEXT,
NUM_EXECUTIONS,
TOTAL_EXEC_TIME / 1000 AS TOTAL_EXEC_TIME_SEC,
AVG_EXEC_TIME / 1000 AS AVG_EXEC_TIME_SEC
FROM SYSIBMADM.SNAPDYN_SQL
ORDER BY TOTAL_EXEC_TIME DESC
FETCH FIRST 20 ROWS ONLY;
Part03-事件监控器
3.1 创建事件监控器
CREATE EVENT MONITOR stmt_mon FOR STATEMENTS
WRITE TO FILE ‘/db2/eventmon/stmt_mon’
BUFFERSIZE 16
MAXFILES 10
MAXFILESIZE 1024
APPEND ON;
# 创建死锁事件监控器
CREATE EVENT MONITOR deadlock_mon FOR DEADLOCKS
WRITE TO TABLE;
# 创建连接事件监控器
CREATE EVENT MONITOR conn_mon FOR CONNECTIONS
WRITE TO UNFORMATTED EVENT TABLE (CONN_EVENTS);
# 查看事件监控器
SELECT EVMONNAME, EVENT_TYPE FROM SYSCAT.EVENTMONITORS;
3.2 激活事件监控器
SET EVENT MONITOR stmt_mon STATE 1;
# 停用事件监控器
SET EVENT MONITOR stmt_mon STATE 0;
# 查看事件监控器状态
SELECT EVMONNAME, EVMON_STATE FROM SYSCAT.EVENTMONITORS;
3.3 分析事件监控器数据
db2evmon -db fgedb -evm stmt_mon;
# 查询表事件监控器
SELECT * FROM DEADLOCK_EVENT ORDER BY EVENT_TIMESTAMP DESC;
# 查询连接事件
SELECT * FROM CONN_EVENTS ORDER BY EVENT_TIME DESC;
Part04-监控工具使用
4.1 db2top工具
db2top -d fgedb
# db2top命令
# s – SQL语句
# t – 表空间
# b – 缓冲池
# l – 锁
# a – 应用程序
# d – 数据库
# m – 内存
# 生成db2top报告
db2top -d fgedb -f db2top_report.txt -C 10 -n 60;
4.2 db2pd工具
db2pd -inst
# 查看数据库信息
db2pd -db fgedb
# 查看应用程序
db2pd -db fgedb -applications
# 查看事务
db2pd -db fgedb -transactions
# 查看锁
db2pd -db fgedb -locks
# 查看缓冲池
db2pd -db fgedb -bufferpools
# 查看表空间
db2pd -db fgedb -tablespaces
# 查看动态SQL
db2pd -db fgedb -dynsql
# 查看内存使用
db2pd -db fgedb -memory
# 持续监控
db2pd -db fgedb -repeat 5 10
4.3 db2mtrk工具
db2mtrk -i -d -v
# 跟踪实例内存
db2mtrk -i
# 跟踪数据库内存
db2mtrk -d
# 跟踪应用程序内存
db2mtrk -a
# 详细输出
db2mtrk -i -d -a -v
4.4 自动化监控脚本
# DB2监控脚本
DB_NAME=”fgedb”
LOG_DIR=”/db2/monitor/logs”
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $LOG_DIR
# 获取快照
db2 “GET SNAPSHOT FOR DATABASE ON $DB_NAME” > $LOG_DIR/snapshot_$DATE.log
# 获取缓冲池信息
db2 “SELECT * FROM TABLE(SYSPROC.ADMIN_GET_BP_INFO(‘$DB_NAME’, -2))” > $LOG_DIR/bp_$DATE.log
# 获取表空间信息
db2 “SELECT * FROM TABLE(SYSPROC.ADMIN_GET_TBSP_INFO(‘$DB_NAME’, -2))” > $LOG_DIR/tbsp_$DATE.log
# 获取慢SQL
db2 “SELECT STMT_TEXT, NUM_EXECUTIONS, TOTAL_EXEC_TIME
FROM SYSIBMADM.SNAPDYN_SQL
ORDER BY TOTAL_EXEC_TIME DESC
FETCH FIRST 10 ROWS ONLY” > $LOG_DIR/slow_sql_$DATE.log
echo “Monitoring completed at $DATE”
Part05-风哥经验总结与分享
5.1 监控最佳实践
- 建立监控基线
- 定期收集历史数据
- 设置告警阈值
- 自动化监控任务
- 定期审查监控数据
- 关联多个监控工具
5.2 关键告警阈值
| 指标 | 警告阈值 | 严重阈值 |
|---|---|---|
| 缓冲池命中率 | <95% | <90% |
| CPU使用率 | >70% | >90% |
| 锁等待时间 | >10秒 | >30秒 |
| 表空间使用率 | >80% | >90% |
| 日志使用率 | >70% | >85% |
5.3 常见监控问题
| 问题 | 可能原因 | 排查方法 |
|---|---|---|
| 缓冲池命中率低 | 缓冲池太小、SQL问题 | 检查缓冲池大小、优化SQL |
| 锁等待严重 | 长事务、锁设计问题 | 查看锁等待、优化事务 |
| CPU使用率高 | 复杂SQL、并行度高 | 查看慢SQL、调整并行度 |
| IO等待高 | IO瓶颈、预取问题 | 查看表空间IO、优化存储 |
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
