Loading

Mysql脏页刷盘

什么是脏页,为什么刷盘,与redo有什么关系

当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。 刷盘的目的在于将内存上的数据进行持久化,因为内存上的数据是不安全的,当出现系统宕机的时候,就会造成数据的丢失。

Mysql采用的是先写日志再写磁盘的方式来进行数据的持久化,而此处的写磁盘指的就是脏页的刷新。


脏页刷盘的四种情况

1.当 redo log 写满,mysql就会暂停所有更新操作,将同步这部分日志对应的脏页同步到磁盘

2.系统内存不足时,需要淘汰一部分数据页,如果淘汰的是脏页,就要先将脏页同步到磁盘

3.MySQL 认为系统空闲的时候,有机会就同步内存数据到磁盘,这种没有性能问题。

4.MySQL 正常关闭,MySQL 会把内存的脏页都同步到磁盘上,这样下次 MySQL 启动的时候,就可以直接从磁盘上读数据,启动速度会很快。这种没有性能问题。


脏页刷盘的影响

  1. 一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长。 内存不足
  2. 日志写满,更新全部堵住,写性能跌为 0,这种情况对敏感业务来说,是不能接受的 。 redo log 写满

1和2会造成影响,3和4是不会对系统造成太大问题。



思考

了解脏页刷新机制以及相应的参数是很有必要的,当数据库系统某些性能问题时,要考虑是否是脏页刷新相关的配置参数不合理导致的。根据实际业务,考虑缓冲区的大小,redo log的大小,最少空闲页,脏页比例,io吞吐量相关参数是否配置合理,根据优化相关参数,解决系统问题。

参考

posted @ 2023-09-03 12:52  花园SON  阅读(138)  评论(0编辑  收藏  举报