转自:https://blog.csdn.net/nanchengyu/article/details/105627704
1.定义
一条SQL语句,正常执行的时候特别快,但是有时它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短,这样的情况我们一般称为数据库抖动。
当内存数据页与磁盘数据页内容不一致的时候,则将内存数据页称为脏页,将脏页写回磁盘的过程称为flush。在MySQL中,引发flush的情况主要有以下几种:
- InnoDB的redo log写满了。这时候系统会停止所有更新操作,把checkpoint往前推进,redo log留出空间可以继续写。在推进checkpoint时,需要把两点之间的日志中对应的脏页刷到磁盘中去。(应该是因为redo的log文件编号循环使用,文件用完了,就需要把之前的删掉了)
- MySQL系统内存不足。当需要新的内存页将磁盘数据载入内存时,就需要淘汰一些内存页,这个过程可能涉及到flush。
- MySQL认为系统“空闲”的时候。
- MySQL关闭之前。