iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL45讲之InnoDB刷脏策略 - flowers
  • 426
分享到

MySQL45讲之InnoDB刷脏策略 - flowers

MySQL45讲之InnoDB刷脏策略-flowers 2018-05-10 05:05:45 426人浏览 猪猪侠
摘要

本文介绍 InnoDB 的刷脏控制策略,它是如何控制刷脏速率的,以及一些相关参数。 前言 本文介绍 InnoDB 的刷脏控制策略,它是如何控制刷脏速率的,以及一些相关参数。 意义 了解 Mys

MySQL45讲之InnoDB刷脏策略 - flowers

本文介绍 InnoDB 的刷脏控制策略,它是如何控制刷脏速率的,以及一些相关参数。

前言

本文介绍 InnoDB 的刷脏控制策略,它是如何控制刷脏速率的,以及一些相关参数。

意义

了解 Mysql 的刷脏策略有什么意义?

当一条正确的 sql 执行时偶尔延迟较高,无法复现场景时,可能就是 mysql 刷脏导致的。通过了解 MySQL 的刷脏策略,可以帮助我们更好地使用 MySQL 及调优。

刷脏控制策略

innodb_io_capacity

innodb_io_capacity 变量告诉 MySQL 主机磁盘的 IO 性能,这样 InnoDB 就知道全力刷脏的时候,可以刷多快。

innodb_io_capacity_max 表示刷脏速度的最大值,默认是 200。

控制策略

InnoDB 知道了它刷脏的上限后,还需要确定它刷脏速度的控制策略,因为它不可能将所有 IO 都用于刷脏,还需要处理用户的查询请求。

控制策略关注两点,一是内存中脏页的占比,一是 redo log 的写入速率。

innodb_max_dirty_pages_pct 是脏页的占比上限,默认是 75%。InnoDB 会根据脏页的比例(假设为 M),计算出一个 0 ~ 100 的值,假设为 p1,计算逻辑如下:

F1(M)
{
  if M>=innodb_max_dirty_pages_pct then
      return 100;
  return 100*M/innodb_max_dirty_pages_pct;
}

InnoDB 每次写 redo log 日志都会记录一个序号,当每新写入一条记录时,会计算当前这条日志的序号减去 checkpoint 记录序号的差值,InnoDB 再将这个差值应用于计算算法得到一个 0 ~ 100 的值,假设为 p2。该计算算法比较复杂,可以确定地逻辑是,当差值越大得到地结果越大。

取 p1 和 p2 之间的较大值 R,之后引擎的刷脏速率就是 R% * innodb_io_capacity。

邻居顺带刷脏策略

执行 SQL 时,刷脏会让语句执行变慢,而邻居顺带刷脏策略会让执行变得更慢。

当进行一次刷脏时,如果脏页的旁边的数据页也是脏页,那就会准备把这个邻居脏页也进行刷脏,并且将邻居刷脏的逻辑还可以蔓延,使得将相邻的脏页都刷脏。

该策略对于早期机械硬盘 IOPS 低是很有帮助的,可以减少很多随机 IO。但在当前 IOPS 较高的 SSD 磁盘下,这个策略显得鸡肋且有副作用。

所以,建议将该策略禁用,即设置 innodb_flush_neighbors = 0,MySQL8 默认是禁用该策略的。

参考

  • [1] 为什么我的MySQL会“抖”一下
您可能感兴趣的文档:

--结束END--

本文标题: MySQL45讲之InnoDB刷脏策略 - flowers

本文链接: https://www.lsjlt.com/news/8755.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java之策略模式比较器案例讲解
    Comparable 比较器,内置定义的比较方法,实现比较 较简单 Comparator 策略模式,需要定义不同的策略和比较的对象,实现比较 较复杂 打个比方,狗有foot一种属性我...
    99+
    2024-04-02
  • Java面试最容易被刷的重难点之锁的使用策略
    目录一. 乐观锁和悲观锁1. 字面理解2. 生活实例3. 基于版本号方式实现乐观锁二. 读写锁1. 理解2. 用法三. 重量级锁和轻量级锁1. 原理2. 理解3. 区分用户态和内核态...
    99+
    2024-04-02
  • Java深入讲解二十三种设计模式之中的策略模式
    目录1 概述2 策略模式2.1 组成部分2.2 代码示例2.3 优缺点1 概述 在平时开发中,往往会遇到这样一种情况,实现一种功能有很多种算法或者策略,我们可以根据不同的算法或者策略...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作