1. 首页 > DB2教程 > 正文

DB2教程FG044-DB2监控与性能指标实战

风哥教程参考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
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 自动化监控脚本

#!/bin/bash
# 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、优化存储
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息