Change Buffer:提升InnoDB性能的关键技术

news2024/12/24 10:04:56

摘要: Change Buffer是一种特殊的数据结构,用于缓存二级索引页的更改操作,当这些页不在缓冲池中时。本文将介绍Change Buffer的工作原理、优势和配置,并提供了监控Change Buffer的方法。

52355d6386eee259c5360fd99436cba0.png

Change Buffer是InnoDB存储引擎中的一个重要特性,它通过缓存二级索引页的更改操作,避免了从磁盘读取这些页所需的随机访问IO。当执行INSERT、UPDATE或DELETE操作时,Change Buffer会缓存变更,并在其他读操作将这些页加载到缓冲池时进行合并。

相对于聚簇索引而言,二级索引通常是非唯一的,对二级索引的插入操作往往是相对随机的。同样,删除和更新操作可能会影响不相邻的二级索引页。通过在后续的读操作中合并缓存的变更,可以避免大量的随机访问IO,这些IO本来需要将二级索引页从磁盘读取到缓冲池中。

定期地,当系统处于空闲状态或进行缓慢关闭时,清理操作会将更新后的索引页写入磁盘。相较于每个值立即写入磁盘,清理操作可以更高效地一次性写入一系列索引值的磁盘块。

Change Buffer的合并过程可能需要数小时,特别是在有大量受影响行和需要更新的二级索引的情况下。在此期间,会增加磁盘IO,可能会显著减慢磁盘受限的查询性能。Change Buffer的合并甚至可能在事务提交后、服务器关闭和重启后继续进行。

在内存中,Change Buffer占用缓冲池的一部分。在磁盘上,Change Buffer是系统表空间的一部分,用于缓冲数据库服务器关闭时的索引更改。

配置Change Buffering

Change Buffer中缓存的数据类型由innodb_change_buffering变量控制。可以通过配置该变量来启用或禁用缓冲,还可以配置Change Buffer的最大大小。

下面是innodb_change_buffering的可选值:

all:默认值,缓冲插入、删除标记和清理操作。•none:不缓冲任何操作。•inserts:只缓冲插入操作。•deletes:只缓冲删除标记操作。•changes:缓冲插入和删除标记操作。•`pur

ges`:缓冲后台进行的物理删除操作。

可以在MySQL选项文件(my.cnf或my.ini)中设置innodb_change_buffering变量,也可以使用SET GLOBAL语句动态更改该变量。更改该设置会影响新操作的缓冲,不会影响现有缓冲条目的合并过程。

配置Change Buffer的最大大小

innodb_change_buffer_max_size变量允许配置Change Buffer的最大大小,以缓冲池总大小的百分比表示。默认情况下,innodb_change_buffer_max_size设置为25,最大设置值为50。

在具有大量插入、更新和删除活动的MySQL服务器上,如果Change Buffer的合并无法跟上新的缓冲条目,导致Change Buffer达到其最大大小限制,可以考虑增加innodb_change_buffer_max_size的值。

在用于报表的静态数据或Change Buffer消耗了太多与缓冲池共享的内存空间,导致数据页过早从缓冲池中驱逐时,可以考虑减小innodb_change_buffer_max_size的值。

为了确定最佳配置,可以使用具有代表性负载的不同设置进行测试。innodb_change_buffer_max_size变量是动态的,可以在不重新启动服务器的情况下修改该设置。

监控Change Buffer

以下是监控Change Buffer的几种选项:

•InnoDB标准监视器输出包含Change Buffer的状态信息。可以使用SHOW ENGINE INNODB STATUS语句查看监视器数据。•信息模式中的INNODB_METRICS表提供了Change Buffer的指标数据。可以使用以下查询语句查看Change Buffer的指标和描述:

SELECT NAME, COMMENT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME LIKE '%ibuf%'\G

•信息模式中的INNODB_BUFFER_PAGE表提供了有关缓冲池中每个页面的元数据,包括Change Buffer的索引和位图页面。可以使用以下查询语句对Change Buffer页面的数量进行估算:

SELECT (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE
       WHERE PAGE_TYPE LIKE 'IBUF%') AS change_buffer_pages,
       (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE) AS total_pages,
       (SELECT ((change_buffer_pages/total_pages)*100))
       AS change_buffer_page_percentage;

•性能模式提供了Change Buffer互斥量等待的性能监控。可以使用以下查询语句查看Change Buffer的性能指标:

SELECT * FROM performance_schema.setup_instruments
       WHERE NAME LIKE '%wait/synch/mutex/innodb/ibuf%';

通过合理配置和监控Change Buffer,可以减少磁盘IO,提高数据库的处理能力和响应性能。特别是对于I/O密集型的工作

负载,Change Buffer是一项重要的技术,值得深入研究和优化。

参考资料:

•MySQL 8.0 Reference Manual - 14.7 InnoDB Change Buffering•MySQL 8.0 Reference Manual - 15.18.7 InnoDB Change Buffer Status

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/600278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小米基于 Flink 的实时数仓建设实践

摘要:本文整理自小米软件开发工程师周超,在 Flink Forward Asia 2022 平台建设专场的分享。本篇内容主要分为四个部分: 1. 小米数仓架构演变 2. FlinkIceberg 架构升级实践 3. 流批一体实时数仓探索 4. 未来展望 Tips:点击「阅读原…

每每聊到线程Thread

进程和线程 进程 所谓计算机程序 Program,其实就是通过执行一系列指令来完成某一个任务。当你启动一个程序时,操作系统(OS)会将其加载到内存中,并在内存中申请一块固定地址的命名空间(address space),并在此命名空间内执行相关指令…

bert中文文本摘要代码(2)

bert中文文本摘要代码 写在最前面关于BERT使用transformers库进行微调 model.py自定义参数激活函数geluswish定义激活函数字典 BertConfig类参数配置vocab_size_or_config_json_filefrom_dict方法(from_json_file时调用)from_json_file方法一系列方法 Be…

Coursera自动驾驶2.1——最小二乘法和线性和非线性卡尔曼滤波

文章目录 一、最小二乘法1.最小二乘法2.加权最小二乘法3.递归最小二乘法4.最小二乘法与极大似然 二、卡尔曼滤波1.概述2.线性卡尔曼滤波3.扩展卡尔曼滤波Error State卡尔曼滤波 4.无迹卡尔曼滤波(1)无迹变换(2)无迹卡尔曼滤波 一、…

I.MX6ull 中断 一

一 I.MX6ull 中断介绍 1 中断类型 Cortex-A7内核有8个异常中断,这8个异常中断的中断向量表如下表所示: Cortex-A 内核 CPU 的所有外部中 断都属于这个 IRQ 中断,当任意一个外部中断发生的时候都会触发 IRQ 中断。在 IRQ 中断服 务函数里面就…

linux php8.2安装swoole扩展

下载swoole源码: wget https://wenda-1252906962.file.myqcloud.com/dist/swoole-src-5.0.2.tar.gz tar -zxvf swoole-src-5.0.2.tar.gz cd swoole-src-5.0.2/ 初始化: /www/server/php/82/bin/phpize 配置检查: ./configure --with-…

JDK17在Windows安装以及环境变量配置(超详细的教程)

目录 一、JDK17的安装包下载 二、安装JDK17 第一步:运行JDK的EXE文件 第二步:选择下一步 第三步:选择安装目录 第四步:安装完成 三、配置JDK17的环境变量 第一步:打开系统属性界面 第二步:打开高级…

C#,码海拾贝(31)——约化“对称矩阵“为“对称三对角阵“的“豪斯荷尔德Householder变换法“之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 矩阵类 /// 作者&#xff1a;周长发 /// 改进&#xff1a;深度混淆 /// https://blog.csdn.net/beijinghorn /// </summary> public partial class Matrix {…

数据库信息速递 数据库基础设施已经不在青睐 ETL (译)

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

RabbitMq的高级特性--RabbitMQ高级特性_消息存活时间

RabbitMQ高级特性_消费端限流 &#xff0c; [解耦&#xff0c; 限流&#xff0c;降低压力&#xff0c;发送消息] 通过消费端限流的 方式限制消息的拉取速度&#xff0c;达到保护消费端的目的。 下面我们新建springboot项目进行测试&#xff1a; 新建项目myproducer 依赖&am…

chatgpt赋能python:Python关联算法:从数据挖掘到推荐系统

Python关联算法&#xff1a;从数据挖掘到推荐系统 Python编程语言已经成为各行各业中数据科学家和工程师的首选语言&#xff0c;其中包括处理数据集合的关联算法。 什么是关联算法&#xff1f; 数学上&#xff0c;关联算法是指在大型和复杂数据集合中&#xff0c; 寻找数据之…

干货 | 携程10个有效降低客户端超时的方法

作者简介 Wen&#xff0c;携程资深后端开发工程师&#xff0c;专注系统性能、稳定性、交易系统等领域。 一、背景 在现今的信息时代&#xff0c;微服务技术已成为一种重要的解决方案&#xff0c;微服务技术可以使系统的规模和功能变的更加灵活&#xff0c;从而获得更高的可扩展…

docker基本命令学习 | Docker网络、Docker镜像发布

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; docker安装、卸载 docker安装使用 卸载旧版本docker或者环境 [rootiZf8zdcobr3fw7vn0p3538Z /]# yum remove docker \ > docker-client \ >…

打破逢节降价桎梏!海尔智家:满足用户,全网第一

又是一年618&#xff0c;每到这个上半年最重要的消费节点&#xff0c;许多品牌卖家纷纷掀起价格战。 他们使出满减、满赠、满返等五花八门的策略&#xff0c;为了压制对手进行冲量&#xff0c;这也一度让“逢节降价”成为主流。 在市场天平偏向卖家的时代&#xff0c;这些策略…

SVN服务端visualsvn5.1.4下载安装(windows环境)(实操)

Apache Subversion 通常被缩写成 SVN&#xff0c;是一个开放源代码的版本控制系统&#xff0c;Subversion 在 2000 年由 CollabNet Inc 开发&#xff0c;现在发展成为 Apache 软件基金会的一个项目&#xff0c;同样是一个丰富的开发者和用户社区的一部分。 SVN相对于的RCS、CVS…

做自己喜欢的事

这两天沸沸扬扬的消息说稚辉君公司拿到了百度投资 稚晖君刚拿了百度投资&#xff0c;估值被曝已超独角兽 然后昨晚上小孩发烧&#xff0c;我陪床不敢死睡&#xff0c;跟大佬聊了下拿到投资的感受。 然后说到搞技术好玩这个事情&#xff0c;我就跟他分享了我前天到经历 我前天到…

Jenkins概念及安装配置教程(二)

如何安装Jenkins&#xff1f; Jenkins 安装程序也可以作为通用 Java 包 (.war) 使用。如果您将 Jenkins 与 Selenium 一起用于执行跨浏览器测试&#xff0c;我们建议使用 .war 文件&#xff0c;因为您可以通过在非无头模式下在浏览器上执行的自动化测试来见证测试场景的执行。…

【C# 10 和 .NET 6】使用MVC模式构建网站(笔记1)

Building Websites Using the Model-View-Controller Pattern 使用模型-视图-控制器模式构建网站 本章介绍使用 Microsoft ASP.NET Core MVC 在服务器端构建具有现代 HTTP 架构的网站&#xff0c;包括构成 ASP.NET Core MVC 项目的启动配置、身份验证、授权、路由、请求和响应管…

如何设计和使用文档模板 | 技术写作什么鬼

今天看到叶伟民老师的一篇文章&#xff0c;瞬间泪目&#xff1a;叶老师&#xff0c;您是懂人性的啊。在我整天鞭策自己“不能再拖了”的关键时刻&#xff0c;及时分享经验&#xff1a; 是的&#xff0c;这篇文章实在是拖了太久&#xff0c;了太久&#xff0c;太久&#xff0c;久…

web前端 --- javascript(03) -- 函数、内置对象

函数&#xff08;function&#xff09; 具有名称的&#xff0c;为了实现特定功能的代码集合体 &#xff08;1&#xff09;javascript如何定义函数&#xff1a;function关键字定义 function 函数名称 &#xff08;[ 参数列表 ]&#xff09;{ // 函数体 // [return 返回值]…