前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你的MySQL会抖动吗

你的MySQL会抖动吗

作者头像
用户7447819
发布2021-07-23 14:25:53
7470
发布2021-07-23 14:25:53
举报
文章被收录于专栏:面试指北面试指北

你的MySQL会抖动吗

1. 什么是MySQL 抖动

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

2. MySQL 为什么会抖动

2.1 脏页

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

2.2 干净页

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

2.3 对于抖动的解释

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

2.4 什么时候会触发flush操作

  • InnoDB 的 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的写入速度
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面试指北 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你的MySQL会抖动吗
    • 1. 什么是MySQL 抖动
      • 2. MySQL 为什么会抖动
        • 2.1 脏页
        • 2.2 干净页
        • 2.3 对于抖动的解释
        • 2.4 什么时候会触发flush操作
        • 2.5 不同场景下的flush 对于性能的影响
        • 2.6 InnoDB 刷脏页的控制策略
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档