场景
我们经常会在线上环境发现,我们的一条SQL语句,正常执行的时候非常快,但是偶尔会出现特别慢的情况,而且在线上很难复现,但是这个问题又的确时时刻刻困扰着我们,不免是一个心头大患。
这个情况很大概率就是Mysql在刷DirtyPage的操作。
Mysql刷DirtyPage的几大原因
-
redoLog(重做日志)写满了:
- 我们知道,Mysql有着一套WAL机制,即数据会先写到redoLog中,然后再将数据写入内存,等到合适的时机进行flush刷盘操作,以防止突然的掉电/宕机导致的数据丢失问题。
- redoLog是一个环形队列,类似于ringBuffer,有着两个pos:writePos,readPos。当writePos == readPos的时候,说明当前redoLog内存池中容量已经不足以
- 当前内存占用满了:
- Mysql处于空闲状态:
- Mysql主动关闭状态:
网友评论