本篇文章主要介绍了" 一次涉及到物化视图的DB2 Insert性能问题的诊断",主要涉及到方面的内容,对于DB2感兴趣的同学可以参考一下:
一 问题描述:今天得到Devops兄弟的报告,说某个数据插入job突然间慢了很多,平时10多分钟就能完成的,跑了10个小时左右没有完成。 Devops的Lock...
一 问题描述:
今天得到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占用绝大部分
- 使用db2top => l - Sessions =>a=>18542, 查看18542的详细资源运行情况,确认18542正在运行上述insert, 并且有大量的Rows read
3. 为了更加仔细的研究18542,使用snapshot 查看详情:
db2 get snapshot for application agentid 18542 > ss18542.txt
Application SnapshotApplication handle = 18542
Application status = UOW Executing
...
TP Monitor client application name = CLP /db/xxx/db2backup/prod_exports/fxh/Jenkins/scripts/fxxximport_
...
request start timestamp = 05/10/2017 17:06:56.378866
...
Snapshot timestamp = 05/11/2017 01:51:44.116395
...
Total sorts = 840970
Total sort time (ms) = 305002
...Buffer pool data logical reads = 2272525558Buffer pool data physical reads = 0
Buffer pool temporary data logical reads = 1893280
Buffer pool temporary data physical reads = 0
Buffer pool data writes = 0
Buffer pool index logical reads = 24552769
...
Rows inserted = 314587
Rows read = 17625559307...
Dynamic SQL statement text:
INSERT INTO xxx.xxx_xxx_DOMAIN ("ID","DATE_ENTERED",...,"ID_REF") VALUES (?,?,... ? )
很多有用的信息: