1、问题描述
linux操作系统部署了DB2,CPU使用率100%
2、处置思路:
CPU分sys(kernel)和user两部分,使用top命令可以看到哪部分使用率高。sys高和user高排查方法不一样。sys高的话,需要收集操作系统的一些数据,如果user高且是DB2进程,需要收集DB2相关数据。
1)使用top命令查看,是user使用高,且发现db2sys使用大部分CPU。
2)%usr CPU高,一般意味着系统正在执行应用的代码,很大可能是Db2执行的SQL语句导致的。需要找到占用CPU较多的SQL语句,看看在执行什么操作。
可以通过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 fetch first 5 rows only”
3)通过这个sql语句找到cpu使用最高的5条sql语句
3、问题结论
需要优化这几条sql语句:比如通过建立适当的索引来避免表扫描、当需要锁较多时而对并发性要求不高时,直接在整个表上加锁、不需要那么多数据的时候使用fetch first xxx rows only等。
版权声明:本文为博主原创文章,未经博主允许不得转载。
DB2,CPU高



