返回顶部
首页 > 资讯 > 数据库 >怎么理解MySQL change buffer
  • 476
分享到

怎么理解MySQL change buffer

2024-04-02 19:04:59 476人浏览 独家记忆
摘要

本篇内容介绍了“怎么理解Mysql change buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

本篇内容介绍了“怎么理解Mysql change buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

change buffer是mysql5.5加入的新特性,change buffer是insert buffer的加强,insert buffer只针对insert有效,change buffer对insert、delete、update(delete+insert)、purge都有效。当修改一个索引块(secondary index)时的数据时,索引块在buffter pool中不存在,修改信息就会被cache在change buffer中,当通过索引扫描把需要的索引块读取到buffer pool时,会和change buffer中修改信息合并,再择机写回disk。目的还是为了减少随机io带来性能损耗,说明白了:把随机IO尽量变成顺序IO。
Change buffer的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果。
change buffer是存放二级索引的没有在buffer pool的变更页的缓存区,变更的buffer是由insert,update,delete等操作导致的。等页被加载进buffer pool中后会将change buffer中的页合并。 
二级索引通常是非唯一的,插入也是很随机的顺序,更新删除也都不是在邻近的位置,所以change buffer就避免了很多的随机io的产生。puge操作会在系统空闲或慢关闭的时候定时将变更页写入到磁盘上去。 
change buffer合并在有大量的二级索引页更新或有很多影响行的情况下会花费很长的时间。change buffer会占用innodb buffer pool的部分空间,在磁盘上,change buffer会占用系统表空间,所以在数据库重启后,索引变更仍然被缓存。在change buffer中被缓存的数据可以使用innodb_change_buffering控制,我们也可以调整innodb_change_buffer_max_size配置change buffer的大小。

索引对insert的影响

  1、表insert,对应表上的所有索引都需要insert;

  2、假设这些索引不常使用,容易产生物理读;

  3、索引的顺序和表的顺序完全不一致;

  原则:一个表上的索引最好不超过6个

将对索引的更新记录存入insert buffer中,而不是直接调入索引页进行更新;择机进行merge insert buffer的操作,将insert buffer中的记录合并(merge)到真正的辅助索引中。
解决了insert表数据产生过多物理读的问题。
Insert Buffer 何时 merge
有2种情况innodb会merge Insert Buffer 到磁盘 
1),master loop 线程主动merge
若过去1s之内发生的I/O,小于系统I/O能力的5%,则主动进行一次Insert buffer的merge操作。Merge的页面数为系统I/O能力的5%,每10s,必定触发一次insert buffer merge动作.
Merge的页面数仍旧为系统I/O能力的5% (系统能力指innodb_io_capacity)

2),读取数据发现该page在Insert Buffer还没有被merge,那么innodb首先会做一个merge操作,所以此时读取的速度会降低

在系统负载较高时,merge操作会很少,而在系统比较空闲时,merge操作会非常频繁,所以当你的系统突然负载变低时,DB还有可能会进行很长一段时间的IO操作。

merge insert buffer的操作可能发生在什么情况下:
  在merge insert buffer之前,insert buffer数据是存在内存中,为了防止数据库意外宕机导致数据丢失,系统会周期性将insert buffer数据写入共享表空间中。
  1、辅助索引页被读取到buffer pool中
    例如这在执行正常的select查询操作,索引页被调入内存,该索引页对应在insert buffer中的索引更改记录就会发生merge操作。
  2、insert buffer bitmap页追踪到该辅助索引页已无可用空间时
    存于ibd文件中(表数据文件)
    记录每一个索引页在insert buffer中对应的行数

如何看insert buffer的效果
  1、insert buffer所占空间,占比太高就影响缓冲性能
  2、每次merge处理的数据量
    1)、merges如果很高,说明insert buffer调小了,也说明索引建多了;
    2)、对表进行批量IDU的时候,可能会导致insert buffer迅速增加。
关注change buffer在innodb buffer pool中的占比
mysql> show variables like '%change_buffer%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| innodb_change_buffer_max_size | 25    |
| innodb_change_buffering       | all   |
+-------------------------------+-------+
2 rows in set (0.01 sec)
  1、innodb_change_buffer_max_size:表示change buffer在buffer pool中的最大占比,默认25%,最大50%
  2、innodb_change_buffering:表示索引列merge对象,all表示对IDU索引列都起作用,都进行merge,如果只想对insert索引列进行merge,就把all改为inserts。

调整建议:
  1、如果系统中有严重的insert、update并且还有活跃的delete时,就增大max_size;
  2、针对不更改数据的纯报表系统,可以减小该参数值。

“怎么理解MySQL change buffer”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解MySQL change buffer

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

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

猜你喜欢
  • 怎么理解MySQL change buffer
    本篇内容介绍了“怎么理解MySQL change buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • mysql的buffer pool 和 change buffer
    线上三张图吧:   一、innodb系统架构图  mysql的buffer pool 和 change buffer原文地址:https://www.cnblogs.com/mmh760/p/13500691.html...
    99+
    2016-11-06
    mysql的buffer pool change buffer 数据库入门 数据库基础教程 数据库 mysql
  • MySQL Buffer pool里的change buffer是什么
    小编给大家分享一下MySQL Buffer pool里的change buffer是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一...
    99+
    2024-04-02
  • 怎么配置Change Buffer
    小编给大家分享一下怎么配置Change Buffer,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  Change Buffer...
    99+
    2024-04-02
  • mysql中change buffer的作用是什么
    MySQL中的change buffer是用来缓存对InnoDB表的插入、更新和删除操作的数据结构。它的作用是延迟对磁盘的写入操作,...
    99+
    2024-05-15
    mysql
  • mysql中change buffer的用法是什么
    在MySQL中,change buffer是一种缓冲池,用于延迟执行INSERT、UPDATE和DELETE操作的物理写入。当对表进...
    99+
    2024-05-15
    mysql
  • 怎么理解MySQL的Insert buffer
    本篇内容介绍了“怎么理解MySQL的Insert buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 怎么理解Oracle Buffer
    这篇文章主要介绍“怎么理解Oracle Buffer”,在日常操作中,相信很多人在怎么理解Oracle Buffer问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Or...
    99+
    2024-04-02
  • 如何理解MySQL的Buffer Pool
    本篇内容介绍了“如何理解MySQL的Buffer Pool”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前...
    99+
    2024-04-02
  • 怎么理解Oracle中的buffer cache
    本篇内容主要讲解“怎么理解Oracle中的buffer cache”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Oracle中的buffer cache...
    99+
    2024-04-02
  • 怎么理解Linux的Cache和Buffer
    本篇文章给大家分享的是有关怎么理解Linux的Cache和Buffer,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先说明,本文讨论的cache指的是Linux中的page ...
    99+
    2023-06-16
  • 怎么理解Node.js中的Buffer模块
    这篇文章主要讲解了“怎么理解Node.js中的Buffer模块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Node.js中的Buffer模块”吧!...
    99+
    2024-04-02
  • MySQL的join buffer原理
    一、MySQL的join buffer 在MySQL对于join操作的处理过程中,join buffer是一个重要的概念,也是MySQL对于table join的一个重要的优化手段。虽然这个概念实现并不复杂,但是这...
    99+
    2022-05-19
    MySQL join buffer
  • mysql的Buffer Pool存储及原理解析
    目录一、前言1、buffer pool是什么2、buffer pool的工作流程3、buffer pool缓冲池和查询缓存(query cache)二、buffer pool的内存数...
    99+
    2024-04-02
  • 怎么理解Linux内存管理中Buffer和Cache
    本篇内容介绍了“怎么理解Linux内存管理中Buffer和Cache”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2024-04-02
  • mysql中pt-online-schema-change怎么用
    这篇文章主要介绍了mysql中pt-online-schema-change怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。pt-onl...
    99+
    2024-04-02
  • 怎么配置MySQL内存buffer pool
    本篇内容介绍了“怎么配置MySQL内存buffer pool”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • 怎么理解DB BUFFER LRU列表的latch等待
    这篇文章主要介绍“怎么理解DB BUFFER LRU列表的latch等待”,在日常操作中,相信很多人在怎么理解DB BUFFER LRU列表的latch等待问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2024-04-02
  • MySql InnoDB存储引擎之Buffer Pool运行原理讲解
    目录1. 前言2. Buffer Pool2.1 Buffer Pool结构2.2 Free链表2.3 缓冲页哈希表2.4 Flush链表2.5 LRU链表2.6 多个实例2.7 Buffer Pool状态信息3. 总结...
    99+
    2023-01-04
    MySql InnoDB存储引擎Buffer Pool MySql InnoDB MySql InnoDB Buffer Pool
  • MySql InnoDB存储引擎之Buffer Pool运行原理讲解
    目录1. 前言2. Buffer Pool2.1 Buffer Pool结构2.2 Free链表2.3 缓冲页哈希表2.4 Flush链表2.5 LRU链表2.6 多个实例2.7 B...
    99+
    2023-01-04
    MySql InnoDB存储引擎Buffer Pool MySql InnoDB MySql InnoDB Buffer Pool
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作