你的MySQL会抖动吗

本文探讨了MySQL中常见的抖动问题,包括脏页与干净页的区别,抖动发生的时机以及InnoDB的控制策略。重点讲解了内存不足、redolog满、空闲时段和关闭时的flush影响,并介绍了如何通过innodb_io_capacity、脏页比例等参数优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你的MySQL会抖动吗

1. 什么是MySQL 抖动

一条SQL语句正常执行的时候特别快,有时候会变得特别慢。但是这种场景不是很常见。

2. MySQL 为什么会抖动

2.1 脏页

内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存为脏页。

2.2 干净页

内存数据写入到磁盘后,内存和磁盘上的数据页的内容一致,称为干净页。

2.3 对于抖动的解释

执行较快的更新操作,其实是在写内存,MySQL抖动的瞬间,是在刷脏页,即把脏页的数据写入磁盘(该过程也叫flush)。

2.4 什么时候会触发flush操作

  • InnoDB 的 redo log 写满了。

回顾一下redo log,具体见

  • 系统内存不够,需要新的内存页了,就需要淘汰一些内存页。

  • MySQL 认为系统空闲时候,开始flush。

  • MySQL 关闭的时候,会将脏页写入磁盘。

2.5 不同场景下的flush 对于性能的影响

2.5.1 InnoDB 的 redo log 写满了。

这种情况尽量避免,一旦redo log 写满,系统会拒绝更新操作,此时更新数为0。

2.5.2 系统内存不够。

InnoDB采用缓存来管理内存页,内存页有以下三种状态:

  • 没有使用
  • 已使用的干净页
  • 已使用的脏页

如果有以下情况会对性能产生影响:

  • 一个查询要淘汰的脏页个数太多
  • 日志写满,更新全部拒绝。

因此InnoDB 需要控制脏页的比例,避免上述情况。

2.5.3 MySQL空闲的时候

对性能基本无影响。

2.5.4 MySQL 关闭

对性能基本无影响。

2.6 InnoDB 刷脏页的控制策略

  • innodb_io_capacity ,告诉InnoDB你的磁盘能力,建议设置成磁盘的IOPS。

  • 脏页比例

    • innodb_max_dirty_pages_pct 是脏页比例的上限。

    • 脏页比例 = innodb_buffer_pool_pages_dirty / innodb_buffer_pool_pages_total

    • innodb_flush_neighbors 表示是否连坐,即刷脏页的时候,是否把是脏页的邻居刷掉。在SSD 这种IOPS比较高的设备,建议设置成为0.

  • redo log的写入速度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值