Mysql脏页刷盘
# 什么是脏页,为什么刷盘,与redo有什么关系
当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。 刷盘的目的在于将内存上的数据进行持久化,因为内存上的数据是不安全的,当出现系统宕机的时候,就会造成数据的丢失。
Mysql采用的是先写日志再写磁盘的方式来进行数据的持久化,而此处的写磁盘指的就是脏页的刷新。
# 脏页刷盘的四种情况
1.当 redo log 写满
,mysql就会暂停所有更新
操作,将同步这部分日志对应的脏页同步到磁盘
。
2.系统内存不足
时,需要淘汰
一部分数据页,如果淘汰的是脏页
,就要先将脏页同步到磁盘
。
3.MySQL 认为系统空闲
的时候,有机会就同步
内存数据到磁盘,这种没有性能问题。
4.MySQL 正常关闭
,MySQL 会把内存的脏页都同步到磁盘
上,这样下次 MySQL 启动的时候,就可以直接从磁盘上读数据,启动速度会很快。这种没有性能问题。
# 脏页刷盘的影响
- 一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长。 内存不足
- 日志写满,更新全部堵住,写性能跌为 0,这种情况对敏感业务来说,是不能接受的 。 redo log 写满
1和2会造成影响,3和4是不会对系统造成太大问题。
# 思考
了解脏页刷新机制以及相应的参数是很有必要的,当数据库系统某些性能问题时,要考虑是否是脏页刷新相关的配置参数不合理导致的。根据实际业务,考虑缓冲区的大小,redo log的大小,最少空闲页,脏页比例,io吞吐量相关参数是否配置合理,根据优化相关参数,解决系统问题。
参考
- https://www.cnblogs.com/ging/p/13467898.html
- https://www.modb.pro/db/71045
- https://time.geekbang.org/column/article/71806
上次更新: 2024/08/09, 16:07:34