脏页:内存数据页跟磁盘上数据页内容不一致,将内存页称为脏页

干净页:内存数据写入磁盘后,内存页跟磁盘页数据一致,称内存页为干净页

刷脏页的俩种情况:

1、redo log满了,这时候系统不能再接受更新了,所有的更新都必须堵住,这时候的更新数为0

2、内纯不够用了,要先将脏页写到磁盘。这种情况是常态

innodb用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态:

还有没使用的;innodb的策略是尽量使用内存,对于一个长时间运行的数据库来说,未被使用的内存页很少

使用了并且是干净页

使用了并且是脏页

3、数据库空余的时候

4、mysql正常关闭的时候

而当要读入的数据页没有在内存的时候,就必须到缓冲池中申请一个数据页。这时候只能把最久不使用的数据页从内存中淘汰掉:如果要淘汰的是一个干净页,就直接释放出来复用;但如果是脏页呢,就必须将脏页先刷到磁盘,变成干净页后才能复用。

所以,刷脏页虽然是常态,但是出现以下这两种情况,都是会明显影响性能的:

一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长   #查询会导致从redo log 将数据flush到磁盘上,然后返回查询结果

日志写满,需要flush到磁盘,这时候更新全部堵住,写性能跌为 0,这种情况对敏感业务来说,是不能接受的。

InnoDB 需要有控制脏页比例的机制,来尽量避免上面的这两种情况。

innodb_io_capacity  #告诉innodb磁盘的IO性能为多少,一般设置为磁盘的IOPS

磁盘的 IOPS 可以通过 fio 这个工具来测试

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

innodb_io_capacity  设置过小导致的问题:

数据库写入速度很慢,TPS很低,IO压力却很小,原因是innodb以为磁盘性能就那么小,刷脏比生产脏页还慢,脏页积累,影响查询更新性能

MySQL 中的一个机制,可能让你的查询会更慢:

在准备刷一个脏页的时候,如果这个数据页旁边的数据页刚好是脏页,就会把这个“邻居”也带着一起刷掉;而且这个把“邻居”拖下水的逻辑还可以继续蔓延,也就是对于每个邻居数据页,如果跟它相邻的数据页也还是脏页的话,也会被放到一起刷。

在 InnoDB 中,innodb_flush_neighbors 参数就是用来控制这个行为的,值为 1 的时候会有上述的“连坐”机制,值为 0 时表示不找邻居,自己刷自己的。

找“邻居”这个优化在机械硬盘时代是很有意义的,可以减少很多随机 IO。机械硬盘的随机 IOPS 一般只有几百,相同的逻辑操作减少随机 IO 就意味着系统性能的大幅度提升。

而如果使用的是 SSD 这类 IOPS 比较高的设备的话,建议把 innodb_flush_neighbors 的值设置成 0。因为这时候 IOPS 往往不是瓶颈,而“只刷自己”,就能更快地执行完必要的刷脏页操作,减少 SQL 语句响应时间。

在 MySQL 8.0 中,innodb_flush_neighbors 参数的默认值已经是 0 了。

mysql脏数据_mysql的刷脏相关推荐

  1. mysql ibata文件_重装系统后,怎么调用之前mysql的数据_mysql

    重装系统后,如何调用之前mysql的数据 前提是:必须保留之前的数据库数据 在介绍此方法之前,提醒各位最好的转移数据的方法为: 在原来MYSQL服务器导出SQL文件,然后再在新的MYSQL服务器导入数 ...

  2. java 脏数据_Java程序的脏数据问题是什么?

    脏数据(Out-of-date data),指过时的数据. 如果在您的Java程序中存在脏数据,将或多或少地给软件系统带来一些问题,如:无法实时地应用已经发生改变的配置,软件系统出现一些莫名其妙的.难 ...

  3. mysql 复制数据_MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库.使用以下方法,可以非常简单地实现. 假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb.步骤如 ...

  4. elastic如何和mysql同步数据_MySQL数据库之mysql 同步数据到 ElasticSearch 的方案

    本文主要向大家介绍了MySQL数据库之mysql 同步数据到 ElasticSearch 的方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL Binlog 要通过 ...

  5. mysql 单机 数据_MySQL数据一致性-单机

    数据+LOG 数据库的数据由两部分组成,一部分是数据,一部分是LOG.Innodb的数据包括内存(Innodb buffer pool)中和硬盘中的数据.数据的更改首先会作用到内存中的缓存数据,然后I ...

  6. mysql文本数据_mysql操作文本数据

    有时为了更快速地插入大批量数据或交换数据,需要从文本中导入数据或导出数据到文本. 一. 建立测试表,准备数据 首先建立一个用于测试的表示学生信息的表,字段有id.姓名.年龄.城市.薪水.Id和姓名不 ...

  7. go mysql 查询数据_MySQL常用语句之查询数据-Go语言中文社区

    简单查询: select [distinct] *| {字段名1,字段名2,字段名3, ...} from 表名 [where 条件表达式1] [group by 字段名 [having 条件表达式2 ...

  8. php验证mysql内数据_MySQL中数据类型的验证_MySQL

    CHAR char (M) M字符,长度是M*字符编码长度,M最大255. 验证如下: mysql> create table t1(name char(256)) default charse ...

  9. mysql 镜像数据_mysql官方镜像数据存储问题

    mysql官方镜像的Dockerfile中,有这么一条设置,即用了VOLUME这个关键字,同时后面设置了一个路径,/var/lib/mysql,这个路径是用来存储数据库的各种表的数据的. 这一条设置会 ...

  10. mysql 处理数据_MySQL数据库,如何处理重复的数据?

    前言 这是一个基本问题,这篇文章是我很早之前遇到的一种情况,后来在学习视频的时候又遇到了一次,因此给出一个总结.其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头, ...

最新文章

  1. 对于数据库进行设计在PHP,关于数据库表的设计
  2. MySQL 遇到的问题
  3. 几个常用的宏:likely和unlikely __raw_writel
  4. graphpad如何做x轴在上方的图_数据分析最有用的25个 Matplotlib图
  5. 微软的创新还是败笔?Windows 8为苹果创造天赐良机
  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设置浮动和偏移
  7. java 多线程 扫描,多线程扫描文件夹耗时方法分析
  8. HttpResponse类
  9. sql server 入门_SQL Server中的数据挖掘入门
  10. Python菜鸟入门:day15编程学习
  11. 二. python面向对象(内置方法and析构函数)
  12. 【数据安全案例】花旗集团承认遭受数据安全泄露
  13. Cookies 和 Session的区别
  14. TransE算法的整理
  15. c++学习记录之多态
  16. ue编辑器php漏洞:ueditor getshell
  17. 数据结构--基本概念
  18. 使用JLINK仿真器调试树莓派4
  19. 利用CSS设置文字的阴影效果
  20. 微信无法下载文件如何做提示跳转到浏览器

热门文章

  1. 光流的概念以及 Lucas-Kanade 光流法
  2. 红蜘蛛 v6.2.1160解除键鼠屏蔽以及实现窗口化
  3. mediawiki java_MediaWiki
  4. 7步轻松设置授权管理器License Manager
  5. 百度一键Root授权管理完美卸载解决方案
  6. Unity3D插件之FingerGestures:手势插件
  7. Vue移动端H5手势缩放滚动拖拽插件Easyscroller
  8. DevOps 对比分析:产品、服务、开源投入
  9. Python 科研风格字体(中文宋体、英文新罗马)
  10. 使用bat脚本实现本地文件压缩和删除