1 ”抖“一下情况,是什么样子
一条SQL语句,正常执行的时候特别块,但是有时候不知道为什么会变得特别慢
2 ”脏页“和”干净页“
在将redo log的理论理解过程中,我们把redo log这个位置,理解为黑板。把磁盘这个位置理解为账本。先写黑板,在写账本,先后过程,所以肯定存在数据的不一致。因此,
”脏页“:当内存中的数据页与磁盘中的数据页不一致
”干净页“:当内存中的数据页与磁盘中的数据页一致
3 flush(刷脏页)操作
把内存中的脏页数据写入磁盘的过程
4 什么时候会触发刷脏页操作
- 黑板满了,记不下了。即:redo log写满了,这是系统会停止所有的更新操作,对脏页惊醒flush,为redo log腾出空间
- 内存不足。淘汰最久未使用的数据页,倘若该数据数据页是干净页,则直接腾出空间; 倘若该数据页是脏页,则先进行flush,再腾出空间
- 系统空闲时。直接进行flush
- Mysql正常关闭,将内存中的脏页都进行flush
5 InnoDB刷脏页的控制策略
首先,需要正确的告诉InnoDB所在的主机的IO能力,这样InnoDB才能知道需要全力刷脏页时,可以刷多块
其次,需要考虑两个会影响flush的因素。分别是:脏页比列和redo log写盘速度。通过计算的到脏页比列和redo log写盘速度两个具体对应的值,取其中较大的值R,之后引擎就可以按照innodb_io_capacity定义的能力乘以%来控制刷脏页的速度。(< 75%)
本文探讨了SQL语句执行速度波动的现象,并深入解析了InnoDB中脏页和干净页的概念,阐述了flush脏页的操作及其触发条件,包括redolog满、内存不足、系统空闲及正常关闭时的情况。同时,文章还介绍了InnoDB如何根据主机IO能力和脏页比例等策略控制刷脏页的速度。
3万+

被折叠的 条评论
为什么被折叠?



