为什么我的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 正常关闭的情况内存的脏数据全部刷到磁盘。
posted @ 2021-08-05 19:59  a菜搬砖  阅读(50)  评论(0)    收藏  举报