14.5.13.4 Insert Buffering

  Database applications often insert new rows in the ascending order of the primary key. In this case, due to the layout

of the clustered index in the same order as the primary key, insertions into an InnoDB table do not require random reads

from a disk.

  On the other hand, secondary indexes are usually nonunique, and insertions into secondary indexes happen in a relatively

random order. In the same way, deletes and updates can affect data pages that are not adjacent in secondary indexes. This

would cause a lot of random disk I/O operations without a special mechanism used in InnoDB.

  When an index record is inserted, marked for deletion, or deleted from a nonunique secondary index, InnoDBchecks whether

the secondary index page is in the buffer pool. If that is the case, InnoDB applies the change directly to the index page. If the

index page is not found in the buffer pool, InnoDB records the change in a special structure known as the insert buffer. The insert

buffer is kept small so that it fits entirely in the buffer pool, and changes can be applied very quickly. This process is known

as change buffering. (Formerly, it applied only to inserts and was called insert buffering. The data structure is still called the insert

buffer.)

Disk I/O for Flushing the Insert Buffer

  Periodically, the insert buffer is merged into the secondary index trees in the database. Often, it is possible to merge several

changes into the same page of the index tree, saving disk I/O operations. It has been measured that the insert buffer can speed

up insertions into a table up to 15 times.

  The insert buffer merging may continue to happen after the transaction has been committed. In fact, it may continue to

happen after a server shutdown and restart (see Section 14.21.2, “Starting InnoDB on a Corrupted Database”).

  Insert buffer merging may take many hours when many secondary indexes must be updated and many rows have been

inserted. During this time, disk I/O will be increased, which can cause significant slowdown on disk-bound queries. Another

significant background I/O operation is the purge thread (see Section 14.5.12, “InnoDB Multi-Versioning”).

Insert Buffering的更多相关文章

  1. MySQL 5.5: InnoDB Change Buffering

    To speed up bulk loading of data, InnoDB implements an insert buffer, a special index in the InnoDB ...

  2. [MySQL Reference Manual]14 InnoDB存储引擎

    14 InnoDB存储引擎 14 InnoDB存储引擎 14.1 InnoDB说明 14.1.1 InnoDB作为默认存储引擎 14.1.1.1 存储引擎的趋势 14.1.1.2 InnoDB变成默认 ...

  3. (转)mysql各个主要版本之间的差异

    原文:http://blog.csdn.net/z1988316/article/details/8095407   一.各版本的常用命令差异 show innodb status\G mysql-5 ...

  4. MySQL版本调研

    1引言 1.1 编写目的 本文的主要目的是通过对当前项目中使用的各种版本的数据库进行比较,分析各自特性和稳定程度,最终推荐合适的版本作为今后的标准数据库. 1.2 背景 当前,部门负责管理维护的现网使 ...

  5. InnoDB关键特性之change buffer

    一.关于IOT:索引组织表 表在存储的时候按照主键排序进行存储,同时在主键上建立一棵树,这样就形成了一个索引组织表,一个表的存储方式以索引的方式来组织存储的. 所以,MySQL表一定要加上主键,通过主 ...

  6. RDS最佳实践(一)—如何选择你的RDS

    在去年双11之前,为了帮助商家准备天猫双11的大促,让用户更好的使用RDS,把RDS的性能发挥到最佳,保障双11当天面对爆发性增加的压力,不会由于RDS的瓶颈导致系统出现问题,编写了 RDS的最佳实践 ...

  7. MySQL 4.1-5.0-5.1-5.5-5.6各版本的主要区别

    各版本的一些命令差异:  show innodb status\G mysql-5.1  show engines innodb status\G mysql-5.5  关于grant授权 mysql ...

  8. MySQL -- Innodb中的change buffer

    change buffer是一种特殊的数据结构,当要修改的辅助索引页不在buffer pool中时,用来cache对辅助索引页的修改.对辅助索引页的操作可能是insert.update和delete操 ...

  9. MYSQL的历史

    MYSQL的历史 见证MySQL发展历程 各分支版本溯源 http://tech.it168.com/a2012/0621/1363/000001363446.shtml [IT168 技术]毫无疑问 ...

随机推荐

  1. c++ 类内部 使用 new delete

    低级错误: /** * @clusterNums 默认为5 分类数目 * @xyVector 处理后点云数据 x y顺序存储 */ int GMM::runGMM(int clusterNums, c ...

  2. vue 父组件如何调用子组件的函数Methods

    答案就是使用ref即可. <countdown ref="countdown"></countdown> beforeDestroy () { // 切换页 ...

  3. Spring的AOP配置

    Spring的AOP配置 1.先写一个普通类: package com.spring.aop; public class Common {  public void execute(String us ...

  4. java中的static方法和实例方法区别

    1.static方法是大家共享的资源,放在内存堆中,比如村里的河水,每个人都可以取,而且不管你创建多少个实例,该方法在内存中只有一个,节省内存空间, 而且访问速度也是比较快的. 2.实例方法就不同,它 ...

  5. if not aa 表示如果aa等于空就是true 相当于if not aa 相当于 if aa== 空

    aa='tt' print(not aa) #表示 bb是空的 not 表示空 bb='' print(not bb)

  6. 个人博客开发之xadmin与ueditor集成

    项目源码下载:http://download.vhosts.cn 1. xadmin 添加ueditor 插件 vim extra_apps\xadmin\plugins\ueditor.py #没有 ...

  7. Databinding在自定义ViewGroup中如何绑定view

    首先我们在平时开发中使用databinding的时候大部分都是在Activity或者fragment中,但我们一旦在自定义ViewGroup中使用的时候就会出现问题 问题描述: 我们在自定义Linea ...

  8. 第一百八十四节,jQuery-UI,验证注册表单

    jQuery-UI,验证注册表单 html <form id="reg" action="123.html" title="会员注册" ...

  9. Eclipse 编译项目

    Eclipse 编译项目 编译 Java 项目 一个项目可以关联多个编译器. java 项目关联的是 java 编译器.可以通过以下方式来查看项目关联的编译器: 在 Package Explorer ...

  10. python 爬虫实战1 爬取糗事百科段子

    首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 本篇目标 抓取糗事百科热门段子 过滤带有图片的段子 实现每按一次回车显示一个段子的发布时间,发布人 ...