返回顶部
首页 > 资讯 > 数据库 >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://lsjlt.com/news/60280.html(转载时请注明来源链接)

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

猜你喜欢
  • mysql中的changebuffer是什么
    mysql中的change buffer是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先:正常insert的时候,也是...
    99+
    2024-04-02
  • mysql中的innodb是什么
    mysql中的innodb是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。innodb简介InnoDB,是MySQL的数据库引擎之一,...
    99+
    2024-04-02
  • mysql中的myisam是什么
    mysql中的myisam是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。myisam介绍MyISAM是默认存储引擎(Mysql5.1...
    99+
    2024-04-02
  • mysql中的engine是什么
    今天就跟大家聊聊有关mysql中的engine,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。mysql engine表示存储引擎,存储引擎是MySQ...
    99+
    2024-04-02
  • mysql中的varchar是什么
    mysql中的varchar是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql中varchar是可变长度的类型,在...
    99+
    2024-04-02
  • MySQL中的锁是什么?
    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许...
    99+
    2024-04-02
  • mysql中的char是什么
    这篇文章将为大家详细讲解有关mysql中的char,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。char简介在MYSQL中,字段类型char是指:使用指定长度的固定长度表...
    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中的connection pool是什么
    今天就跟大家聊聊有关mysql中的connection pool是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。connection pool即...
    99+
    2024-04-02
  • MySQL中order指的是什么
    这篇文章将为大家详细讲解有关MySQL中order指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql是一种关系数据库,它有许多关键字供使用者用来操作数据,...
    99+
    2024-04-02
  • mysql中的外键是什么
    本篇内容介绍了“mysql中的外键是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Foreign ke...
    99+
    2024-04-02
  • MySQL中的索引是什么
    这篇文章将为大家详细讲解有关MySQL中的索引是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。对于高级开发,我们经常要编写一些复杂的sql,那么防止写出低效sql,我...
    99+
    2024-04-02
  • mysql中acid指的是什么
    这篇文章主要介绍了mysql中acid指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、事务的基本要素(ACID)  1、原子性(...
    99+
    2024-04-02
  • mysql中SQL指的是什么
    这篇文章主要介绍了mysql中SQL指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、SQL是结构化查询语言。DML  数据操纵语言 ...
    99+
    2023-06-15
  • MySQL中的/*是什么意思?
    这是一种评论。 是评论的结束。让我们实现并展示如何创建评论mysql> MySQL 将忽略上面的注释。让我们看一个例子。在这里,我们用 编写了注释mysql> mysql> create table DemoTabl...
    99+
    2023-10-22
  • MySQL 中的基数是什么?
    在 MySQL 中,术语基数是指可以放入列中的数据值的唯一性。它是一种影响数据搜索、聚类和排序能力的属性。 基数可以有两种类型,如下 - 低基数 - 列的所有值必须相同。 高基数 - 列的所有值必须是唯一的。 如果我们对列施加约束以限制重复...
    99+
    2023-10-22
  • MySQL中的/*是什么意思
    在MySQL中,/ /用于多行注释。它可以在SQL语句中的任何位置使用,用于注释掉一段代码或提供对代码的解释。多行注释可以跨越多个行...
    99+
    2023-10-20
    MySQL
  • mysql中filesort指的是什么
    本篇内容介绍了“mysql中filesort指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-11-30
    mysql filesort
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作