MySQL--Insert Buffer
在进行数据插入时,需要将数据插入到聚集索引和非聚集索引中,而对于非聚集索引,需要先确定数据要插入的索引页,再将索引页加载到内存中进行修改,而在业务上很难保证插入数据在非聚集索引上也是连续的,因此插入操作会引入大量随机IO操作。
Innodb存储引擎引入Insert Buffer Pool特性来对插入操作进行优化,在INSERT操作是,对非唯一索引的更新没有实时更新,而是将更新操作进行缓存,在一定条件下再触发操作将更新操作应用到索引上。
操作原理:
插入数据时判断索引页是否存于内存中:
1、索引页存在于内存中,直接更新索引页
2、索引页不存在于内存中,且满足将更新操作放入Insert Buffer Pool操作条件,将更新操作信息和索引页信息放入到Insert Buffer Pool中。
虽然"更新操作"可以被暂时缓存到Insert Buffer Pool中,但最终还是需要将"更新操作"应用到索引页上,即Merge操作,Merge操作根据触发方式分为两种:
1、主动Merge,由Innodb主线程定期后台进行,采用异步IO进行操作读取索引页面,然后进行merge。
A) 对于每秒执行一次主线程,如果过去1s之内发生的I/O小于系统I/O能力的5%,则触发一次Merge操作,merge的页面数为系统I/O能力的5%
B) 对于每10秒执行一次得主线程,必定触发一次merge操作,merge的页面数为系统I/O能力的5%
2、被动Merge,由用户操作触发:
A) Insert操作导致目标索引页的空间不足,需要进行页拆分操作,Insert Buffer只能处理单个页面,不能缓存需要拆分的索引页。
B) 当前Insert Buffer太大,需要强制进行merge操作。
C) 由于特殊原因,将"更新操作"放入Insert Buffer时出错,需要将"更新操作"直接应用到索引页上。
D) 用户操作需访问索引页,将索引页从磁盘中加载到内存,将Inser Buffer中缓存的"更新操作"进行merge。
##====================================================##
Insert Buffer优点:
1、在INSERT操作能快速返回,提高插入效率
2、在进行Merge时,可以将多个连续的页面一次读取到内存中进行merge,减少随机IO带来的性能损耗,将随机IO转换为顺序IO
##====================================================##
Insert Buffer的相关知识点
1、Innodb存储引擎使用Insert Buffer Bitmap来跟踪每个非聚集索引页的使用情况,从而推断出是否会发生页拆分的情况。
2、非聚集唯一索引无法使用Insert Buffer,因为需要在插入时需要读取索引页来确定插入数据是否唯一。
3、在MySQL 5.5中,对Insert Buffer进行增强,引入Change Buffer特性,能对INSERT/DELETE/UPDATE操作的修改信息进行缓存。
##====================================================##
MySQL--Insert Buffer的更多相关文章
- 【mysql】Innodb三大特性之insert buffer
一.什么是insert buffer insert buffer是一种特殊的数据结构(B+ tree)并不是缓存的一部分,而是物理页,当受影响的索引页不在buffer pool时缓存 secondar ...
- 全网最清楚的:MySQL的insert buffer和change buffer 串讲
目录 一.前言 二.问题引入 2.1.聚簇索引 2.2.普通索引 三.change buffer存在的意义 四.再看change buffer 五.change buffer 的限制 六.change ...
- innodb insert buffer 插入缓冲区的理解
今天在做一个大业务的数据删除时,看到下面的性能曲线图 在删除动作开始之后,insert buffer 大小增加到140.对于这些状态参数的说明 InnoDB Insert Buffer 插入缓冲,并不 ...
- InnoDB关键特性之insert buffer
insert buffer 是InnoDB存储引擎所独有的功能.通过insert buffer,InnoDB存储引擎可以大幅度提高数据库中非唯一辅助索引的插入性能. 数据库对于自增主键值的插入是顺序的 ...
- innodb 关键特性(insert buffer)
一.insert buffer 性能改善 insert buffer和数据页一样,也是物理页的一个组成部分. 在innodb存储引擎中,主键是行唯一的标识符.通常应用程序中行记录的插入顺序是按照主键递 ...
- MySQL Index--Change Buffer
Change Buffer功能 当执行INSERT/DELETE/UPDATE三类DML操作需要修改二级索引上数据时,如果需要修改的二级索引页未存在于当前Buffer Pool中,可以先将该" ...
- MySql 缓冲池(buffer pool) 和 写缓存(change buffer) 转
应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库. 操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问. M ...
- InnoDB Insert Buffer(插入缓冲 转)
一,插入缓冲(Insert Buffer/Change Buffer):提升插入性能 只对于非聚集索引(非唯一)的插入和更新有效,对于每一次的插入不是写到索引页中,而是先判断插入的非聚集索引页是否在缓 ...
- 使用 xlrd 模块实现对excel 的读取、excel转json 、excel 转 mysql insert 语句
#-*- coding:utf-8 -*- # 处理 excel 中的 area 为 Mysql insert 语句 import xlrd, json, codecs, os # data = xl ...
- (转载)如何优化MySQL insert性能
(转载)http://blog.csdn.net/tigernorth/article/details/8094277 对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是 ...
随机推荐
- TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)
描述 The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located ...
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-8CDH5安装和集群配置
Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了. 准备文件 从 http://archive.cloudera.com/cdh5/par ...
- django xadmin拓展User模型
django提供四种拓展模型的方法: 1.代理模型 2.Profile拓展模型User 3.AbstractBaseUser拓展模型User 4.AbstractUser拓展模型 之前想通过第四种方法 ...
- java中解析excel 批量插入数据库
Facade 层 实现类 (@Service("samePeriodModelImportFacade")) 1. 获取cells 的方法 public Cells getCel ...
- rabbitmq 启动报错 Failed to get nic info
这个报错 基本搜索不到什么有效信息 解决办法: hostnamectl set-hostname xxx.local # 先把rabbitmq进程杀掉$ ps -ef | grep rabbitmq ...
- visual studio vode 汉化
在vs code 的商店中搜索Chinese,找到如下模块,安装. 安装后,按下ctrl+shift+p,找到configure display language ,点击进入,修改 改成如图字母就可以 ...
- linux 学习之路:ls命令使用
1.命令格式: Ls 显示指定工作目录下的目录内容 语法:ls [-alrtAFR] [name...] 2.命令参数: 3.命令功能: 显示列出目前工作目录所含之文件及子目录 4.命令范例: 列出根 ...
- ORA-15137: cluster in rolling patch
oracle 12.1.0.2,给diskgroup加盘的时候报错ORA-15137: cluster in rolling patch 确认两节点补丁相同 crsctl query crs soft ...
- java8 先groupingBy 后map
Map<Integer,List<String>> mapBanJI_UserNameList=list.stream().collect(Collectors.groupin ...
- list对象中根据两个参数过滤数据
list对象中根据两个参数过滤数据 List<demo> list = new List<demo>() { ,b=,c=,d= }, ,b=,c=,d= }, ,b=,c=, ...