MySQL InnoDB的插入缓冲

InnoDB存储引擎有三大特性非常令人激动,它们分别是插入缓冲、两次写和自适应哈希,本篇文章先介绍 第一个特性 - 插入缓冲(insert buffer)

在上一篇《MySQL - 浅谈InnoDB存储引擎》中,我们可以 看到在InnoDB的内存中有单独一块叫“插入缓冲”的区域,下面我们详细来介绍它。

非聚集索引写性 能问题

为了阐述非聚集索引写性能问题,我们先来看一个例子:

mysql>create table t (

id int auto_increment,

name varchar(30),

primary key (id));

我们创建了一个表,表 的主键是id,id列式自增长的,即当执行插入操作时,id列会自动增长,页中行记录按id顺序存放,不需要 随机读取其它页的数据。因此,在这样的情况下(即聚集索引),插入操作效率很高。

但是,在大部 分应用中,很少出现表中只有一个聚集索引的情况,更多情况下,表上会有多个非聚集的secondary index (辅助索引)。比如,对于上一张表t,业务上还需要按非唯一的name字段查找,则表定义改为:

mysql>create table t (

id int auto_increment,

name varchar(30),

primary key (id),

key (name));

这时,除了主键聚合索引外,还产生了一个name列的辅助索引,对于该非聚集 索引来说,叶子节点的插入不再有序,这时就需要离散访问非聚集索引页,插入性能变低。

时间: 2024-10-12 04:11:15

MySQL InnoDB的插入缓冲的相关文章

Mysql InnoDB性能调节提示

· 如果Unix的top工具或者Windows任务管理器显示,你的数据库的工作负荷的CPU使用率小于70%,则你的工作负荷可能是磁盘绑定的,可能你正生成太多的事务和提交,或者缓冲池太小.使得缓冲池更大一些会有帮助的,但不要设置缓冲池等于或超过物理内存的80%. · 把数个修改放在一个事务里.如果事务对数据库修改,InnoDB在该事务提交时必须刷新日志到磁盘.因为磁盘旋转的速度至多167转/秒,如果磁盘没有骗操作系统的话,这就限制提交的数目为同样的每秒167次. · 如果你可以接受损失一些最近的已

MySQL innodb引擎详解

innodb是事物安全的MySQL存储引擎 是oltp应用中核心表的首选存储引擎 MySQL第一个支持事物的存储引擎是BDB MySQL第一个完整支持ACID事物是innodb innodb的特点 行锁设计 支持MVCC 支持外键 提供一致性非锁定读 同时被设计用来最有效的利用以及使用内存和cpu 版本 功能 老版本innodb 支持ACID 行锁设计 MVCC innodb 1.0.x 增加了compress和dynamic页格式 innodb 1.1.x 增加了Linux AIO 多回滚段

MySQL InnoDB 常用优化参数

内存相关 innodb_buffer_pool_size 缓冲池,会缓冲索引页.数据页.undo页.插入缓冲.自适应哈希索引.innodb存储的锁信息.数字字典信息等 innodb_buffer_pool_instances 允许多个缓冲池实例,每页根据哈希平均分配到不同缓冲池实例中,减少数据库内部资源竞争,增加数据库并发处理能力 innodb_old_blocks_pct 确定modpoint位置,默认37,modpoint指新读取到的页放入LRU(最近最少使用算法)列表中的位置,modpoi

MySQL InnoDB的两次写

今天我们来介绍InnoDB存储引擎的第二个特性 - 两次写(doublewrite),如果说插入缓冲是为了提高写 性能的话,那么两次写是为了提高可靠性,牺牲了一点点写性能. 部分写失效 想象这么一个 场景,当数据库正在从内存向磁盘写一个数据页时,数据库宕机,从而导致这个页只写了部分数据,这就是 部分写失效,它会导致数据丢失.这时是无法通过重做日志恢复的,因为重做日志记录的是对页的物理修改 ,如果页本身已经损坏,重做日志也无能为力. 两次写机制 从上面分析我们知道,在部分写 失效的情况下,我们在应

反驳"MySQL InnoDB (不行)的性能问题",千万级别记录来测试说明

在 JavaEye 上看到一篇对 MySQL FUD(Fear, uncertainty and doubt) 的文章 用MySQL InnoDB Benchmark 性能测试来说明 http://www.javaeye.com/topic/34676 文中提到:"InnoDB 的磁盘性能很令人担心,MySQL 缺乏良好的 tablespace 真是天大的缺陷! --网上有用户反映存在同样的插入性能问题,百万行记录插入之后,插入速度下降到了 1/30,从开始的 1600行/秒衰退到 50行/秒-

MySQL Innodb数据库性能实践——热点数据性能

对于大部分的应用来说,都存在热点数据的访问,即:某些数据在一定时间内的访问频率要远远高于其它数据. 常见的热点数据有"最新的新闻"."最热门的新闻"."下载量最大"的电影等. 为了了解MySQL Innodb对热点数据的支持情况,我进行了基准测试,测试环境如下: [硬件配置] 硬件 配置 CPU Intel(R) Xeon(R) CPU E5620 主频2.40GHz, 物理CPU 2个,逻辑CPU 16个 内存 24G(6块 * 4G  DDR

MySQL批量SQL插入性能优化

对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. 经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考. 1. 一条SQL语句插入多条数据. 常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VAL

MySQL批量SQL插入各种性能优化

对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的.   经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考.   1. 一条SQL语句插入多条数据.   常用的插入语句如:      修改成:     修改后的插入操作能够提高程序的插入效率.这里第二种SQL执行效率高的主要原因是合并后日志量(MyS

MySQL实现批量插入以优化性能的教程_Mysql

对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. 经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考. 1. 一条SQL语句插入多条数据.常用的插入语句如:   INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VA