1、问题描述
DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询。这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询。
通过对全日志的梳理,已经查明每日17:00左右导致主库性能下降的问题原因是该时段在执行某定时任务中的一个Update语句。该update语句一次性会对约70万个row进行更新,引发大量数据库写入,是导致数据库性能下降的直接原因。
但是还存在一个疑点,那就是该定时任务每天会执行三次,零点,12点和17点,数据的更新量几乎一致,其中12点和17点均是业务的高峰期,为何只有下午17点会出现大量慢查询,而上午12点数据库受到的影响相对较小,没有出现慢查询呢?
2、监控数据分析
DBA对当时数据库系统的状态进行了分析,12点与17点都存在一个突发的大量数据写入,对比两个时间段的innodb性能参数,可以发现:
(1)两个时间段Innodb log buffer均有一个突发的写入
(2)两个时间段innodb_log file均有一个突发的写入
分析
(1),(2)说明该时间点有一个影响行数较高的突发的写入操作。
(3) 12点时innodb buffer dirty page有一个突增,但17点左右innodb buffer dirty page有一个突降
(4) 12点时innodb的数据文件写入速度维持在一个相对平缓的水平,而17点左右innodb的数据文件写入速度有一个突增。
(5) 12点时系统IO的BI略有增长,但是不大,而17点时BI有非常大的增长,对系统IO性能有很大的影响。
分析
(3),(4)说明该时间点确实有大量数据写入,但是12点左右的时候数据以脏页的形式保存在buffer pool中,而17点的时候脏页被大量写入到磁盘中。通过(5)可以看出12点的时候脏页是在update操作结束后缓缓刷入磁盘,而17点的时候脏页被直接刷入磁盘。可见导致数据库性能陡降的原因就是脏页刷盘,12点的时候性能没有明显相加的原因就是没有突发的脏页刷盘。
因长度受限:
http://hi.baidu.com/ops_bd/blog/item/8c111e2d8689733ed52af1b0.html?timeStamp=1296197900962