首页 > 代码库 > 单条commit与多条commit对系统产生的IOPS影响的探讨

单条commit与多条commit对系统产生的IOPS影响的探讨



本文中姓名与敏感号码脱敏声明:

   出于对个人隐私的保护,对专家的真名进行脱敏,采用人称名代替,对于手机号和QQ号,部分用“X”符号替换。

 

1、国内资深性能优化专家老白先生(笔名:白鳝,人称老白)提问

单条COMMIT和多条COMMIT,对系统产生的IOPS有什么影响,有多大影响,为什么?

2、小弟黎俊杰(网名:踩点)应答

黎俊杰134XXXXXXX1(389338XX3) 9:41:57

单条commitIOPS肯定大于多条commit,每commit一次,LGWR就会有一个日志块做写入,即最少发生一次IOPS;多条一起commit,如果多条记录的大小小于一个块大小的话,即也只是发生一次IOPS,而通常一条记录即达到一个块大小的情况比较小。不知是不是这样理解,请徐总指教。

3、老白先生回复

老白138XXXXXXX0(62XX5) 9:44:24

首先分析下批量插入的IO产生有那几块,

然后评估下大概多大

小弟想,即然老白先生这么回复,肯定说明我的回答不够完整,好,看,继续往下,看我来深入一下。

4、小弟黎俊杰(网名:踩点)接着应答

黎俊杰134XXXXXXX1(389338XX3) 2015/1/5 9:51:34

批量插入的情况下,主要应该是LGWRDBWR两部分产生IO

5、老白先生再次回复

老白138XXXXXXX0(62XX5) 2015/1/5 9:56:20

如果问题要分析的再细一点,还要考虑索引的影响

老白此话一出,小弟我立即自拍脑袋三下,插入数据,如果表上有索引,肯定会维护索引的,在此题目的回答上,我怎么就没有把思维扩宽些,插入数据维护索引也会引起IO,而只是单纯围绕着题目中的插入这个具体的事件,而不考虑该事件还会引发的相关事件呢。看来,在专家面前,不得不承认自己与专家的差距啊。

下面来老实回答一下老白吧。往下啦

6、中间插曲

Hu jun150XXXXXXX8(275475005) 2015/1/5 9:57:21
一般批量插入的数据量都较大

Hu jun军是我的哥们,是子衿优化团队的一枚实力大将,看来这哥们是忙中偷闲了一下啊。

7、未等俺喘气,老白先生继续指导

老白138XXXXXXX0(62XX5) 2015/1/5 9:57:35
IO
产生有几大块,格式化数据块产生的预读,索引修改产生的单块读,DBWR写入,LGWR写日志

8、小弟的肺腑回复

黎俊杰134XXXXXXX1(389338XX3) 2015/1/5 9:57:42
刚才考虑时,确实没有想到索引上来

   不得不说,我当时的回答确实没有想到索引上来,在此长知识了。不过还好,问题回答上了一半,说明了产生IO主要是因为DBWRLGWR

9、再看专家的过人之高言

老白138XXXXXXX0(62XX5) 2015/1/5 9:58:00
还有索引大批量修改产生的排序可能产生的临时表空间读写DIRECT PATH

看到这段指导之言,不得不说,“专家就是专家”,问题分析的全面与深入,让小弟发自从内心的佩服!

 

   小弟今天真是长知识了,与专家交流的感觉真是好,也真希望与专家的交流能够更多些。

 

本文作者:黎俊杰(网名:踩点),从事系统架构、操作系统、存储设备、数据库、中间件、应用程序六个层面系统性的性能优化工作

欢迎加入 系统性能优化专业群,共同探讨性能优化技术。群号:258187244

单条commit与多条commit对系统产生的IOPS影响的探讨