iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql中的changebuffer是什么
  • 243
分享到

mysql中的changebuffer是什么

2024-04-02 19:04:59 243人浏览 薄情痞子
摘要

Mysql中的change buffer是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先:正常insert的时候,也是

Mysql中的change buffer是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

首先:正常insert的时候,也是首先要判断哪个物理页(包括数据页和索引页)可以insert,然后把这个物理块读取到buffer pool,然后再在内存执行insert 操作,然后再刷新到磁盘;

0)Change Buffer为何提高性能

缓存的是一个索引页的 dml的操作,而不是具体的数据页,具体的数据页直接就修改了,对非聚集非唯一的索引页修改的时候才可能用到change buffer。当 buffer pool中没有某个索引页,并且需要dml操作这个索引页的数据的时候,不需要先从磁盘读取该索引页到buffer pool,直接把该操作记录到cahnge buffer 中,这里就减少了一次随机io,然后等下次业务需要访问这个索引页的时候,再把这个页读取到buffer poo中,然后change buffer记录的操作和buffer pool中刚读进来的索引页进行merge 操作。

提高性能的地方还有一点是:对于非聚集非唯一索引的更新或者插入操作,不是每次插入或者更新操作完, 都直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,如果在,则直接插入,不在则放到change buffer中,然后以一定的频率和情况进行change buffer和辅助索引叶子的merge(合并)操作,这时通常可以将多个索引叶子的dml操作合并到一个操作里(因为在一个索引页中),这里也提高了性能

综上所述 cahnge buffer 性能的提升在于两点:

一:当需要修改的索引页不在buffer pool的时候,不需要先把索引页读取到buffer pool,这里减少了io

二:将多个索引叶子的dml操作合并到一个操作里(因为在一个索引页中),批量merge,这里也提高了性能;

1)change buffer的内容

Change Buffer是一种特殊的数据结构,缓存对二级索引页面的更改并且这些页面不在Buffer Pool中(注意缓存的是对索引叶子的修改,而不是具体的索引叶子)。缓存的changes可能由 Insert 、Delete 和 Update的结果导致。稍后在页面被其他读取操作加载到Buffer Pool的时候合并,

简而言之:Change buffer的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果。

3)change buffer 只针对辅助索引而言

对主键索引无效;对辅助索引叶子节点的更改才可能借助change buffer ,如果该列上没有索引,那么就不会借助change buffer了!

4)缓冲池有change buffer 信息固然不错,但他不是单纯是缓存池的一部分,change buffer 和数据页一样,change buffer 是一个B+树,放在共享表空间,默认也就是idbata1,向change buffer 写数据也是需要随机io,但有change buffer后,当buffer 中没有需要修改的叶子块的时候,你不需要把叶子块读进innodb_buffer_cahce中(减少的就是这里的io)只需要把改变写进cahnge buffer即可,然后cahnge buffer中排序最后等待和真正的叶子节点数据合并!批量合并!所以如果更新操作不频繁的时候,并且更新后立马需要读取该页的时候,change buffer 的机制会增加部分io消耗! change buffer 减少了从内存读取硬盘的随机读IO(数据页)操作,换做成批量顺序merge,redo log减少了随机写log操作

5).之所以需要满足索引是辅助索引,并且是非唯一的

因为在插入缓冲时,数据库并不去查找索引页来判断插入的记录的唯一性,如果去查找肯定又会有离散读取的情况发生(随机io),从而导致change buffer 失去意义!

6) change buffer的相关参数

1 innodb_change_buffering 默认是all支持所有DML操作

2 innodb_change_buffer_max_size,默认是25,即缓冲池的1/4。最大可设置为50,采用默认即可

7).合并的操作是在 buffer pool里面进行的

当下一次需要加载这个页面的时候,也就是这个页面有需求的时候,会将Change Buffer内的更改合并到Buffer Pool,随后当服务器在空闲的时候,这个更改会刷到disk(磁盘)上, 或者在不繁忙的时候进行merge,这时候merger操作也是发生在buffer pool;

8).为什么change buffer 存的是 buffer pool中没有的索引页的操作?

因为如果在buffer pool中,那么就直接dml操作对应的索引页了,change buffer 存在就是为了当需要操作的索引页不在buffer pool中,然后不需要立马去磁盘读取该索引页,只有当buffer pool中不存在的时候才可能用到change buffer;

9) 除了数据页被访问,还有哪些场景会触发刷写缓冲中的数据呢?

还有这么几种情况,会刷写缓冲中的数据:

(1)有一个后台线程,会认为数据库空闲时;

(2)数据库缓冲池不够用时;

(3)数据库正常关闭时;

(4)redo log写满时;

画外音:几乎不会出现redo log写满,此时整个数据库处于无法写入的不可用状态。

10)什么业务场景,适合开启InnoDB的写缓冲机制?

先说什么时候不适合,如上文分析,当:

(1)数据库都是唯一索引;

(2)或者,写入一个数据后,会立刻读取它;

这两类场景,在写操作进行时(进行后),本来就要进行进行页读取,本来相应页面就要入缓冲池,此时写缓存反倒成了负担,增加了复杂度。

什么时候适合使用写缓冲,如果:

(1)数据库大部分是非唯一索引;

(2)业务是写多读少,或者不是写后立刻读取;

可以使用写缓冲,将原本每次写入都需要进行磁盘IO的sql优化定期批量写磁盘。

画外音:例如,账单流水业务。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: mysql中的changebuffer是什么

本文链接: https://www.lsjlt.com/news/60280.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql中的changebuffer是什么
    mysql中的change buffer是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先:正常insert的时候,也是...
    99+
    2024-04-02
  • mysql中的gpl是什么
    MySQL中的GPL代表“GNU通用公共许可证”,是一种开源软件许可证,由自由软件基金会发布,根据GPL许可证的规定,任何人都可以自由使用、修改和分发MySQL Community Edition,并且在将其修改版本重新分发时需要保持相应的...
    99+
    2023-07-28
  • mysql中的key是什么
    mysql 中的 key 是索引结构,用于快速查找和访问数据。它存储列值和行指针,并根据列值快速定位数据行,提高查询性能。mysql 支持多种 key 类型,包括主键、唯一键、普通索引、...
    99+
    2024-04-26
    mysql
  • mysql中的join是什么
    mysql 中的 join 是用于组合不同表数据的查询命令,它通过匹配列创建临时表。join 有四种类型:inner join(仅匹配两表中都存在的行)、left join(选择左表所有...
    99+
    2024-04-29
    mysql
  • mysql中的外键是什么
    本篇内容介绍了“mysql中的外键是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Foreign ke...
    99+
    2024-04-02
  • MySQL中的/*是什么意思
    在MySQL中,/ /用于多行注释。它可以在SQL语句中的任何位置使用,用于注释掉一段代码或提供对代码的解释。多行注释可以跨越多个行...
    99+
    2023-10-20
    MySQL
  • MySQL中的索引是什么
    这篇文章将为大家详细讲解有关MySQL中的索引是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。对于高级开发,我们经常要编写一些复杂的sql,那么防止写出低效sql,我...
    99+
    2024-04-02
  • mysql中filesort指的是什么
    本篇内容介绍了“mysql中filesort指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-11-30
    mysql filesort
  • mysql中signed指的是什么
    在MySQL中,signed是一种数据类型修饰符,用于指定整数数据类型的符号属性。当一个整数列被声明为signed时,它可以存储正数...
    99+
    2024-04-09
    mysql
  • mysql中的%是什么意思
    mysql 中的 % 通配符用于在 like 操作符中进行模式匹配,表示零个或多个字符。它可用于查找以给定模式开头的所有字符串或包含给定模式的字符串,还可以可选地查找以给定模式结尾的字符...
    99+
    2024-04-26
    mysql
  • MySQL中order指的是什么
    这篇文章将为大家详细讲解有关MySQL中order指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql是一种关系数据库,它有许多关键字供使用者用来操作数据,...
    99+
    2024-04-02
  • MySQL 中的基数是什么?
    在 MySQL 中,术语基数是指可以放入列中的数据值的唯一性。它是一种影响数据搜索、聚类和排序能力的属性。 基数可以有两种类型,如下 - 低基数 - 列的所有值必须相同。 高基数 - 列的所有值必须是唯一的。 如果我们对列施加约束以限制重复...
    99+
    2023-10-22
  • mysql中gtid指的是什么
    在MySQL中,GTID(Global Transaction Identifier)是一种全局事务标识符。它是由MySQL服务器自...
    99+
    2024-04-09
    mysql
  • MySQL中的/*是什么意思?
    这是一种评论。 是评论的结束。让我们实现并展示如何创建评论mysql> MySQL 将忽略上面的注释。让我们看一个例子。在这里,我们用 编写了注释mysql> mysql> create table DemoTabl...
    99+
    2023-10-22
  • mysql中acid指的是什么
    这篇文章主要介绍了mysql中acid指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、事务的基本要素(ACID)  1、原子性(...
    99+
    2024-04-02
  • mysql中SQL指的是什么
    这篇文章主要介绍了mysql中SQL指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、SQL是结构化查询语言。DML  数据操纵语言 ...
    99+
    2023-06-15
  • mysql中blob是什么
    小编给大家分享一下mysql中blob是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是blob,mysql blob大...
    99+
    2024-04-02
  • mysql中desc是什么
    desc 是 mysql 中查看表结构的命令,使用语法:desc table_name。它输出字段信息,包括名称、类型、空值允许、索引状态、默认值和附加信息。例如:desc custom...
    99+
    2024-05-01
    mysql
  • mysql中str_to_date的作用是什么
    小编给大家分享一下mysql中str_to_date的作用是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql中的st...
    99+
    2024-04-02
  • mysql中mysqld_multi的作用是什么
    这篇文章将为大家详细讲解有关mysql中mysqld_multi的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 _multi是用来管理...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作