innodb的写缓存_innodb写缓存-程序员宅基地

技术标签: 数据库写缓存  mysql写缓存  数据库  写缓存限制  

innodb的写缓存,其设计思想同样是为了减少磁盘的io来提升性能。

对于数据库的写来说,有如下两种情况

1. 修改的内容所在页在缓冲池内

会有如下两步操作

  1. 直接修改缓冲池中的页,一次内存操作

  2. 写入redo log,一次磁盘顺序写操作

那什么时候数据会把修改的数据落盘呢,他会进行定期刷盘,如果没有等到刷盘时间,数据就被从缓存淘汰,就会把脏页刷回磁盘。这样能减少io次数,提升性能。把随机写变成顺序写和批量写,这是优化程序性能的有效方式。

这样数据在读取怎么保持一致性,数据库异常的时候是怎么处理的呢

  1. 读取:会命中缓冲池的页,而不是从磁盘获取
  2. 缓冲池数据淘汰,会将“脏页”刷回磁盘
  3. 数据库异常崩溃,能够从redo log中恢复

2.修改的内容所在页不在缓冲池内

这种情况略为复杂一些,常见的操作是先把数据从磁盘中读取到缓存中,一般操作系统的缓存都是这样处理的。步骤如下:

  1. 先把需要写的页,从磁盘加载到缓冲池,一次磁盘随机读操作
  2. 修改缓冲池中的页,一次内存操作
  3. 写入redo log,一次磁盘顺序写操作

这期间可能触发LRU淘汰我们就不分析了。

但是这个时候,使用缓存和不使用缓存,都是需要一次磁盘随机读的,这样就会导致写的效率比较低。

innodb的解决方案

innodb提升数据库写性能是通过写缓冲(change buffer)来实现的,他的主要作用就是当要写入的页不在缓存中的时候,并不把这个页读取到缓存中来,而只是记录这次更改,在读取这页数据的时候或者写磁盘的时候,再把这次更改和磁盘数据合并,放入缓存中。

在MySQL5.5之前,叫插入缓冲(insert buffer),只针对insert做了优化;现在对delete和update也有效,叫做写缓冲(change buffer)。

写缓存优点

对于情况1中,其实没有什么影响,但是对于情况二,从原来的操作变成了如下的操作,省去了一次磁盘io

  1. 在写缓冲中记录这个操作,一次内存操作
  2. 写入redo log,一次磁盘顺序写操作

但是这里要注意,写缓冲中记录的是操作而不是完整的数据。

那么这种操作是否会影响读操作或者带来数据一致性问题呢

  1. 数据读取时,将数据合并到缓冲池中(所以写后一定会读取的数据,不适合用写缓存)
  2. 数据库异常奔溃,能够从redo log中恢复数据
  3. 写缓冲不只是一个内存结构,它也会被定期刷盘到写缓冲系统表空间

2和3我们不做详解,我们说一下读取的时候发生了什么

因为这一页不在缓存池中,如果发生了读取,则必定会触发磁盘读,这个时候会从写缓存中读出相关的操作,把操作和数据进行合并处理,放入缓存池中。

写缓存的限制

写缓冲优化,仅适用于非唯一普通索引,这是因为如果索引设置了唯一(unique)属性,在进行修改操作时,InnoDB必须进行唯一性检查。这样就必须读取所有的索引数据到缓冲池进行判断是否唯一,磁盘io不可避免,所以写缓存减少磁盘io的意义就不存在了。这时候就采用常规流程,直接把页放到内存中,然后再修改。

写缓冲的刷盘
  1. 是缓冲都会有缓冲池大小,数据库缓冲池不够用时就会触发刷盘
  2. 有一个后台线程,会认为数据库空闲时;
  3. 数据库正常关闭时;

使用写缓冲的场景和参数设置

  • 数据库大部分是非唯一索引
  • 业务是写多读少,或者不是写后立刻读取(立即读取就会触发磁盘io,相当于给你省了,你马上又浪费了。)

mysql参数

参数:innodb_change_buffer_max_size

说明:配置写缓冲的大小,占整个缓冲池的比例,默认值是25%,最大值是50%。

参数:innodb_change_buffering

说明:配置哪些写操作启用写缓冲,可以设置成all/none/inserts/deletes等。

可使用mysql查询参数的命令进行查询

show variables like '%【上面的参数】%';
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/winterfeng123/article/details/108040740

智能推荐

Java Web开发_异步处理以及前端中Vue框架的简单使用(Day3)_后端异步前端怎么处理-程序员宅基地

文章浏览阅读304次。此博客主要记录在学习黑马程序员2023版JavaWeb开发课程的一些笔记,方便总结以及复习。_后端异步前端怎么处理

python数据类型01_python[80., 20., 1000, 200]-程序员宅基地

文章浏览阅读1w次。文章目录数值类型整型(int)long(长整型)浮点数复数不同进制表示数值类型转换数据类型信息获取math 模块、cmath 模块python数学函数abs(x)ceil()cmp()exp()fabs()floor()log()log10()max()min()modf()pow()round()sqrt()python随机数函数choice()randrange()random()seed()..._python[80., 20., 1000, 200]

机器视觉halcon轮廓线处理关键算子-常州龙熙机器视觉培训班_halcon中的轮廓线 导数-程序员宅基地

文章浏览阅读876次,点赞23次,收藏21次。halcon 轮廓线处理 关键算子_halcon中的轮廓线 导数

自动驾驶人机交互HMI产品技术方案_自动驾驶hmi用什么开发-程序员宅基地

文章浏览阅读544次。HMI产品是L4车辆的人机交互程序,为高速运营、港口单车、测试路测等提供状态可视化、任务交互、自动驾驶行车控制、编队控制功能。_自动驾驶hmi用什么开发

Matlab画散点图并拟合(使用cftool函数拟合)_matlab散点图拟合函数-程序员宅基地

文章浏览阅读4w次,点赞13次,收藏120次。Matlab根据坐标点进行绘制散点图并拟合成图像可以使用cftool函数,下面以二维数据拟合进行举例:(1)首先输入数据点x=[0.20,2,4.01,5.99,8.08,9.98,11.96,14.00,15.99,18.00,19.98,21.98,23.99,25.97,28.01,30.00,32.04,33.99,35.98,37.99,39.99,42.00,43.99,45...._matlab散点图拟合函数

Java 命令行运行参数大全_命令行运行java参数-程序员宅基地

文章浏览阅读6.8k次。javac 用法:javac 其中,可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} _命令行运行java参数

随便推点

阿里云mysql空间不足_阿里云MySQL 实例空间使用率过高的原因和解决方法-程序员宅基地

文章浏览阅读419次。用户在使用 MySQL 实例时,会遇到空间使用告警甚至超过实例限额被锁定的情况。在 RDS 控制台的实例基本信息中,即会出现如下信息:本文将介绍造成空间使用率过高的常见原因及其相应的解决方法。对于MySQL 5.6版本的实例,升级实例规格和存储空间后即可解锁实例,关于如何升级实例配置,请参见变更配置。•常见原因造成 MySQL 实例空间使用率过高,主要有如下四种原因:Binlog 文件占用高。数据..._阿里云m2实例数超过限制99999

JQuery信息提示框插件 jquery.toast.js 的使用-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏13次。1.下载https://github.com/kamranahmedse/jquery-toast-plugin在线预览地址2.导入在页面中引入jquery.toast.css文件,jquery和jquery.toast.js文件。<link type="text/css" rel="stylesheet" href="css/jquery.toast.css">..._jquery.toast.js

vue2+vue3——1~35-程序员宅基地

文章浏览阅读271次。vue2+vue3

电脑远程控制软件哪个好用?(4款远程控制软件推荐)_安企神控制软件-程序员宅基地

文章浏览阅读940次,点赞12次,收藏19次。本文介绍了四款远程控制电脑的软件,这四款远程控制电脑软件操作方法都很简单,大家可以根据自己的需要选择合适的软件即可。在另一台电脑的Chrome浏览器中登录同一个谷歌账号,打开谷歌远程桌面选择要控制的电脑,再输入PIN码即可远程控制电脑。是一款好用的电脑远程控制软件,用户可以通过网络远程连接到其他计算机,轻松实现远程监控、远程技术支持。在两台电脑上都登录QQ账号,主控端电脑打开要控制的好友聊天窗口,单击右上角的更多按钮。,在管理者的电脑上安装管理端,在员工的电脑上安装员工端,安装好后会自动进行连接和上线。_安企神控制软件

80 Gbps 的 USB4 2.0 要来了!_usb4+2.0-程序员宅基地

文章浏览阅读1w次,点赞10次,收藏7次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)两年前,英特尔在公布新一代 Thunderbolt 4(以下简称雷电 4)接口标准时曾说:“不是所有 USB4 都能和雷电 4 平起平坐。”如今看来,这句话的顺序可能要颠倒一下了:本月初,USB 推广组官宣了 USB4 v2.0,其可通过 USB Type-C 提供高达 80 Gbps(相当于 10GB/s)的数据传输速率——不仅是 U..._usb4+2.0

【jdk8 jdk17 jdk21 在线中文文档】-程序员宅基地

文章浏览阅读123次。jdk8中文文档jdk17在线文档jdk21在线文档

推荐文章

热门文章

相关标签