【MySQL 读书笔记】SQL 刷脏页可能造成数据库抖动
开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么。
因为 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 刷脏页可能造成数据库抖动的更多相关文章
- Mysql的刷脏页问题
平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 当内存数据 ...
- MySQL:刷脏页
1. 脏页,干净页 当内存数据页和磁盘数据页上的内容不一致时,我们称这个内存页为脏页: 内存数据写入磁盘后,内存页上的数据和磁盘页上的数据就一致了,我们称这个内存页为干净页. 2. 刷脏页的时机 2. ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- Innodb刷脏页技术深度挖掘
DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询.这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询.通过 ...
- 【MySQL 读书笔记】普通索引和唯一索引应该怎么选择
通常我们在做这个选择的时候,考虑得最多的应该是如果我们需要让 Database MySQL 来帮助我们从数据库层面过滤掉对应字段的重复数据我们会选择唯一索引,如果没有前者的需求,一般都会使用普通索引. ...
- 【MySQL 读书笔记】当我们在使用索引的时候我们在做什么
我记得之前博客我也写过关于索引使用的文章,但是并不全面,这次尽量针对重点铺全面一点. 因为索引是数据引擎层的结构我们只针对最常见使用的 Innodb 使用的 B+Tree 搜索树结构进行介绍. 每一个 ...
- 【MySQL 读书笔记】当我们在执行该查询语句的时候我们在干什么
看了非常多 MySQL 相关的书籍和文章,没有看到过如此优秀的专栏.所以未来一段时间我会梳理读完该专栏的所学所得. 当我们在执行该查询语句的时候我们在干什么 mysql> select * fr ...
- 读书笔记--SQL必知必会--Tips
01 - 如何获取SQL命令帮助信息 官方手册 help 或 help command MariaDB [(none)]> help General information about Mari ...
- 【MySQL 读书笔记】RR(REPEATABLE-READ)事务隔离详解
这篇我觉得有点难度,我会更慢的更详细的分析一些 case . MySQL 的默认事务隔离级别和其他几个主流数据库隔离级别不同,他的事务隔离级别是 RR(REPEATABLE-READ) 其他的主流数据 ...
随机推荐
- 【hashMap】详谈
官方文档地说明 几个关键的信息:基于Map接口实现.允许null键/值.非同步.不保证有序(比如插入的顺序).也不保证序不随时间变化. 一.概述 HashMap 是一个散列表,它存储的内容是键值对(k ...
- Python:fake-useragent 伪装请求头
写爬虫的时候,在进行 request 请求的时候,多数情况下需要添加请求头,否则就不能正常请求. 添加请求头最常用的做法是修改 User-Agent 来伪装浏览器. 以前在写请求头的时候,都是通过 c ...
- group by搭配 order by解决排序问题
问题 Ftravel_id Facct_no Froute_code Fmodify_time 41010020180725102219102000010452 1359c027b0a15266418 ...
- 简易调色盘控件 for .NET(EN)
By Conmajia Originally posted in 2012 Introduction Simple & fast implementation of a rectangular ...
- 系统检测工具ROSWTF
ROSWTF 详细见http://wiki.ros.org/roswtf roswtf will examine your ROS setup, such as your environment va ...
- 对HTML5标签的认识(三)
这篇随笔继续来认识HTML标签.这次随笔主要是对<table>标签的认识和最近我学习到的一些标签来和大家分享. 一.<table>标签 <table>标签的作用主要 ...
- Java 8中Stream API学习笔记
1)函数式编程的优势和劣势分别是什么?优势:①不可变性 ②并行操作 ③执行顺序更灵活 ④代码更加简洁纯粹的函数式编程,变量具有不可变性,同一个参数不会在不同场景下得出不同的结果,因此大大增强了系统的稳 ...
- http header Content-Type之常用三种
Content-Type 用于指示资源的MIME类型 在响应头中,告诉客户端实际返回内容的类型 在请求头中,告诉服务器实际发送的数据类型 句法: Content-Type: text/html; ch ...
- 前端入门25-福音 TypeScript
声明 本篇内容摘抄自以下来源: TypeScript 中文网 只梳理其中部分知识点,更多更详细内容参考官网. 正文-TypeScript 今天来讲讲有 Java 基础转 JavaScript 的福音: ...
- 最近javascript的学习小记
一.关于javascript的原型与隐式原型 1.prototype 首先function是一个对象,每一个function都具有一个prototype对象,prototype对象默认是{constr ...