MySQL性能抖动

当内存数据页跟磁盘数据页内容不一致的时,称这个内存页为“脏页”。内存数据写入磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。

平时执行很快的更新操作,就是在写内存和日志,而MySQL偶尔抖一下,可能是在刷脏页。

刷脏页的时机

  • redo log 写满了,数据库停止所有更新操作,将 check point 往前推进
  • 内存不够用,淘汰数据页时,如何数据页是脏页,需要将脏页写到磁盘
  • 后台定时刷脏页
  • MySQL 正常关闭时,将脏页写到磁盘

以下情况会影响性能:

  • 第一种情况,日志写满,更新全部堵住,写性能跌为0
  • 第二种情况,一个查询要淘汰的脏页个数太多,回导致查询时间变长

InnoDB 脏页控制策略

磁盘性能 innodb_io_capacit

fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest

脏页比例上限 innodb_max_dirty_pages_pct,默认 75%。

InnoDB 根据脏页比例和 redo log 空闲比例计算出两个值,取其中最大值,结合磁盘性能控制刷脏页速度。

innodb_flush_neighbors 刷脏页的连坐机制(SSD磁盘建议关闭)

posted @ 2024-11-06 20:36  廖子博  阅读(2)  评论(0编辑  收藏  举报