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 对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是 ...
随机推荐
- html(),text(),var()区别与用法
text() 设置或返回所选元素的文本内容 html() 设置或返回所选元素的内容(包括HTML标记) val() 设置或返回表单字段的值 用html()效果把html标签也获取出来了: 用val() ...
- Windows防火墙开启ping,禁ping的配置方法
Windows 7,Win 2008 R2,2012 R2: Windows防火墙 --> 高级设置 --> 入站规则 --> 在列表里找到“文件和打印机共享(回显请求 - ICMP ...
- dsPIC30F 细节点问题不定期更新ing
知识点1 TRISD: I/O 引脚 方向控制 寄存器 (1--input, 0--Output)LATD: I/O 引脚 输出锁存器PORTD: 是双向I/O 端口 备注:LATD = 0x000 ...
- Angular中不同的组件间传值与通信的方法
主要分为父子组件和非父子组件部分. 父子组件间参数与通讯方法 使用事件通信(EventEmitter,@Output): 场景:可以在父子组件之间进行通信,一般使用在子组件传递消息给父组件: 步骤: ...
- 20165213 Exp1 PC平台逆向破解
PC平台逆向破解 实验内容 1.了解掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP指令时,CPU什么也不做,仅仅当做 ...
- ajax 与jsp servlet
jQuery的Ajax实现异步传输List.Map_GOOD 分类: JAVA WEB前端2013-08-29 18:35 6296人阅读 评论(0) 收藏 举报 javajquerylistjson ...
- 适用于 iOS、Android 和 Windows 设备的移动设备管理
适用于 iOS.Android 和 Windows 设备的移动设备管理 随着企业环境中移动设备的数量不断增加,详细检查访问您企业资源的移动设备变得至关重要.统一终端管理软件 Desktop Centr ...
- Numpy与Matplotlib
一.Numpy numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,numpy的速度比Pyt ...
- ffmpeg 推流相关指令
1.rtsp->rtsp(只解封装,不解码) ffmpeg -re -rtsp_transport tcp -i rtsp://usr:passwd@ip:port/h264/ch1/sub/a ...
- (PMP)解题技巧和典型题目分析(模拟一)