为什么我的MySQL会“抖”一下
向磁盘数据的时机:
1.redo log 满了,此时需要把 checkpoint 往前推进,将推进的段落的所有脏页flush到磁盘之上。之后该段落就可以继续写redo log 日志。 --此时不在接受数据 监控中更新数据为0。
2.内存满了。需要淘汰部分数据,如果淘汰脏页,就要先把 changger_buffer 里 ‘脏页’的数据刷到磁盘。
为什么不直接淘汰脏页,下次需要的时候直接从redo log 读?
从性能考虑,脏页的数据一定会写到磁盘,保证每个数据有两种状态:
1.一种是内存中存在,内存数据一定是正确的结果,直接返回。
2.内存中没有数据,就可以肯定数据上是正确的结果,读入内存后返回。这样效率更高;
InnoDB 用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态:
1.还没有使用
2.使用,并且是干净页
3.使用,并且是脏页
刷新脏页
1.一个查询要淘汰的脏页太多,导致响应时间m明显变长
2.日志满了,更新全部受堵,写性能跌为0,这种情况对敏感业务来说,是不能接受的。所以InnoDB需要控制脏页比例的机制,来避免上述两种情况。
3.空闲状态
4.mysql 正常关闭的情况内存的脏数据全部刷到磁盘。
用于记录,学习。