一 问题描述:
今天得到Devops兄弟的报告,说某个数据插入job突然间慢了很多,平时10多分钟就能完成的,跑了10个小时左右没有完成。 Devops的Lock兄弟也做的最初始的问题诊断,他通过topas,看到db2sys占用了60%左右的机器内存,进入db2top 选择“D - Dynamic SQL” 看到如下简单的SQL一直在执行。
INSERT INTO xxx.xxx_xxx_DOMAIN ("ID","DATE_ENTERED",...,"ID_REF") VALUES (?,?,... ? )
有如下现象:
1. 每秒钟插入的条数很少,只有1,2条。 (通过Dynamic SQL输出中的 Num Execution可以看出)
2. 非常巨大的Rows Read. (通过Dynamic SQL输出中的 Rows Read可以看出)
二 问题诊断:
得到Lock兄弟的求救信号后,开始如下调查:
1. 查看OS的运行情况,因为此台服务器是AIX,所以使用topas.
- CPU使用率60%, CPU wait% 很小
- 磁盘很空闲,Disk busy% < 1%
- 网络的char out, char in都很小,所以网络也不是瓶颈
- 内存几本没有pagein 和 pageout
总体情况是CPU比较繁忙,并且从topas下面显示的top 进程可以看出是DB2的主进程db2sys占用了主要的CPU.
2. 既然确认此问题是DB2自己的问题,而不是运行在此服务器上别的程序造成的问题,那么进入db2top来分析问题。
- 使用db2top => D - Dynamic SQL,确认Lock报告的问题。 看到的情况跟Lock描述基本一致。
- 使用db2top => B - Bottlenecks , 看到CPU, sorts Memory都是有Agent 18542占用绝大部分