开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么。

因为 WAL 技术的存在,所以当我们执行一条更新语句的时候是先写日志,后写磁盘的。当我们在内存中写入了 redolog 之后,就返回已经更新成功了。后续通过其他的手段将数据写回到磁盘上。

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

有几种场景会让 MySQL 主动将 redo log 里面的记录刷到实际的数据更新上面。

1. ib_logfile0写的记录满了。

2. 系统内存不足,读取数据的时候内存不够必须要空出内存给数据页使用,所以需要将脏页刷到磁盘上把空间释放出来。

3. 系统空闲,每隔一段时间就刷一批脏页。

Innodb 使用 buffer pool 来管理内存,很多地方的优化都跟 buffer pool 有直接的关系。该参数默认设置是 128M 如果内存资源充足建议开到 4G 以上。这样不管是提升缓存能力,还是帮助数据排序都有非常大的帮助。

有几个跟脏页相关的系统参数,innodb_io_capacity 这个参数会告诉 InnoDB 磁盘读写能力,一般会设置成磁盘的 IOPS 默认是 200 innodb_io_capacity_max 是 2000。按照工具测试来看目前 aliyun 的云盘可以达到 4000 以上的 iops 。我看阿里云自己的 rds 配置的也是 2000 最大 4000.这样可以充分发挥硬盘读写的威力。

这里笔者推荐了 fio 工具用来测试磁盘读写能力。

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

另外 innodb_max_dirty_pages_pct 用于限制脏页上限,默认是 75%.还有 innodb_flush_neighbors 8.0 之前是 on, 在刷脏页的同时如果旁边数据也也是脏页会一并刷入。

其实排查 MySQL 抖动是比较难的一件事情,最好综合慢查日志分析相关参数和磁盘问题来定位,才能更好的解决此类问题。

Reference:

本读书笔记皆来自发布在极客时间的 林晓斌(丁奇)的 MySQL 实战45讲:

极客时间版权所有: https://time.geekbang.org/ 版权所有:

https://time.geekbang.org/column/article/71806

https://segmentfault.com/a/1190000003880571  使用fio测试磁盘I/O性能

【MySQL 读书笔记】SQL 刷脏页可能造成数据库抖动的更多相关文章

  1. Mysql的刷脏页问题

    平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 当内存数据 ...

  2. MySQL:刷脏页

    1. 脏页,干净页 当内存数据页和磁盘数据页上的内容不一致时,我们称这个内存页为脏页: 内存数据写入磁盘后,内存页上的数据和磁盘页上的数据就一致了,我们称这个内存页为干净页. 2. 刷脏页的时机 2. ...

  3. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  4. Innodb刷脏页技术深度挖掘

    DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询.这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询.通过 ...

  5. 【MySQL 读书笔记】普通索引和唯一索引应该怎么选择

    通常我们在做这个选择的时候,考虑得最多的应该是如果我们需要让 Database MySQL 来帮助我们从数据库层面过滤掉对应字段的重复数据我们会选择唯一索引,如果没有前者的需求,一般都会使用普通索引. ...

  6. 【MySQL 读书笔记】当我们在使用索引的时候我们在做什么

    我记得之前博客我也写过关于索引使用的文章,但是并不全面,这次尽量针对重点铺全面一点. 因为索引是数据引擎层的结构我们只针对最常见使用的 Innodb 使用的 B+Tree 搜索树结构进行介绍. 每一个 ...

  7. 【MySQL 读书笔记】当我们在执行该查询语句的时候我们在干什么

    看了非常多 MySQL 相关的书籍和文章,没有看到过如此优秀的专栏.所以未来一段时间我会梳理读完该专栏的所学所得. 当我们在执行该查询语句的时候我们在干什么 mysql> select * fr ...

  8. 读书笔记--SQL必知必会--Tips

    01 - 如何获取SQL命令帮助信息 官方手册 help 或 help command MariaDB [(none)]> help General information about Mari ...

  9. 【MySQL 读书笔记】RR(REPEATABLE-READ)事务隔离详解

    这篇我觉得有点难度,我会更慢的更详细的分析一些 case . MySQL 的默认事务隔离级别和其他几个主流数据库隔离级别不同,他的事务隔离级别是 RR(REPEATABLE-READ) 其他的主流数据 ...

随机推荐

  1. ubuntu16.04无法获取ip地址的解决方案

    当我们无法获取ip地址时可以使用dhcp来动态获取ip地址,安装dhcpcd5和dhcpcd-gtk sudo apt-get install dhcpcd5 sudo apt-get install ...

  2. 104 - kube-scheduler源码分析 - predicate整体流程

    (注:从微信公众:CloudGeek复制过来,格式略微错乱,更好阅读体验请移步公众号,二维码在文末) 今天我们来跟一下predicates的整个过程:predicate这个词应该是“断言.断定”的意思 ...

  3. JavaScript引擎浅析

    前言 该文章是为大家整理一个关于js的知识网络,重点是知识的罗列及之间的联系,所以实例可能会有所不足,导致可能没有对应知识的人看不懂,希望大家能够结合其他资料来学习这篇文章,并整理出自己的知识体系. ...

  4. [SpringBoot guides系列翻译]SpringBoot构建RESTful程序入门

    原文地址 构建一个RESTful的WebService 这个指南将带你用Spring创建一个RESTful的helloworld程序. 你将完成 在下面地址上创建一个接收http get请求的服务 h ...

  5. 授权管理-LDAP-介绍与环境搭建

    LDAP介绍 转自:https://blog.csdn.net/tanshizhen119/article/details/79942315 还是先来百度百科介绍. LDAP是轻量目录访问协议,英文全 ...

  6. java的设计模式 - Builder模式

    Builder 模式的目的? 构造对象的方式过于复杂,不如将之抽离出来.比如,构造器参数过多 这样说也有点抽象,举个例子吧. 举个例子 比如 非常热门的消息队列RabbitMQ 的 AMQP.Basi ...

  7. element表格切入按钮以及复选框

    1,element表格切入按钮 关键代码: html:<el-table :data="tableList" border style="width: 100%&q ...

  8. 【CSS学习】--- float浮动属性

    一.前言 浮动元素以脱离标准流的方式来实现元素的向左或向右浮动,并且浮动元素还是在原来的行上进行浮动的.float浮动属性的四个参数:left:元素向左浮动:right:元素向右浮动:none:默认值 ...

  9. 浅谈Flutter(一):搭建Flutter开发环境

    学习内容来自: Flutter中文网  . Flutter实战 -------------------------------------------------------------------- ...

  10. Android远程桌面助手(B1185)for Android P开发者预览版

    Android P的开发者预览版已出,其中App compatibility changes部分特别强调“The platform restricts the use of some non-SDK ...