前提:
实例级快照开关都打开:
思路:
1. 判断CPU使用率高的进程是否是DB2进程
vmstat 1 5 #关注sy,us列用量是否高
iostat #关注%user列是否高
ps -elf | sort -k 5 -rn | more #根据memory用量排序
2. 找到占用高CPU时间的DB2代理进程/线程
db2pd -edus -interval=3 #查看USR列高的向,记下EDU ID
db2pd -eve > db2pd_eve.out #结合上面EDU ID查找对应的SQL语句
db2pd -latches
db2pd -stack all
3. 分析这些DB2进程正在执行的SQL
db2pd
db2 get snapshot for applications on db2test
通过mon_get_pkg_cache_stmt找到占用CPU较多的动态sql语句
db2 "select TOTAL_CPU_TIME/NUM_EXEC_WITH_METRICS as AVG_CPU_TIME, NUM_EXEC_WITH_METRICS, substr(STMT_TEXT,1,100) as STMT_TEXT from table( mon_get_pkg_cache_stmt (null, null,null,null)) as T where T.NUM_EXEC_WITH_METRICS <> 0 order by AVG_CPU_TIME DESC"
查每个edu占用时间
db2pd -edus interval=120根据EDU ID结合db2pd -eve找到其执行的sql语句
db2 get snapshot for application
top -Hp 12211 (12211为db2sys进程号)
ps -Lp 12211 -o pid,ppid,pcpu,pmem,lwp
4. 计算这些SQL的平均执行时间、读取的行数、CPU的执行时间、排序行数等,分析SQL访问计划
5. SQL优化(DBA在数据库物理与逻辑设计上调优、联系应用调整SQL
=============待更新=======================