教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 数据库 > MYSQL教程 >

聊聊mysql5的Insert Buffer

时间:2014-03-12 17:02来源:未知 作者:ken 点击:

1,Insert Buffer 作用
 

Insert Buffer包含于Innodb Buffer Pool,用于缓冲非唯一索引 [除primary key跟unique key] 叶子节点的插入操作 (5.5开始 insert buffer变为change buffer,支持了update delete操作)
 

为什么要有这么一个区域呢?

原因很简单:Insert对于主键来说是一个顺序IO,对于secondary index 更新操作则是一个随机IO,Insert Buffer可以将多个随机IO merge成 一个 有利于减少随机IO

2,Insert Buffer 位置
 

在一个InnoDB系统中,insert buffer的内存占用是比较大的,最大可以达到buffer pool的1/2。为了保证insert buffer的恢复能在较短时间内完成,insert buffer pages也会由dirty page

flush操作写回disk。系统崩溃时,就能够保证insert buffer table (SYS_IBUF_TABLE)能够较快恢复

3,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操作
 

4,查看Insert Buffer使用

我们可以通过show engine innodb status\G 查看Insert Buffer使用状况,如下是Insert Buffer信息部分
 

 

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 7545, free list len 3790, seg size 11336,
8075308 inserts, 7540969 merged recs, 2246304 merges

size部分表示没有被merge的页数

free list表示空闲的页面(这些页面从未被用过)

seg部分表示Insert Buffer分配大小
 

inserts表示做了多少此insert操作,merged recs表示被merge的记录数,merges表示进行了多少此merge操作

从上面这些数据可以看到Insert Buffer减少了3/4 的IO操作 (2246304/8075308)


参考资料:
1,http://www.mysqlops.com/2012/05/21/mysql-innodb-insert-buffer.html
2,http://www.mysqlperformanceblog.com/2009/01/13/some-little-known-facts-about-innodb-insert-buffer/
3,http://dev.mysql.com/doc/refman/5.1/en/innodb-insert-buffering.htm

(责任编辑:ken)
TAG标签:
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容