首页  

MySQL InnoDB的4个特性     所属分类 mysql 浏览量 1274
insert buffer
Double write 
adaptive hash index 自适应哈希索引
read-ahead

insert buffer

对于为非唯一索引,辅助索引的修改操作并非实时更新索引的叶子页,
而是把若干对同一页面的更新缓存起来做合并为一次性更新操作,
转化随机IO 为顺序IO,提高写性能。

Double write 

提高可靠性,主要用来解决部分写失败(partial page write)
doublewrite有两部分组成,
一部分是内存中的doublewrite buffer,大小为2M,
另外一部分就是物理磁盘上的共享表空间中连续的128个页,即两个区,大小同样为2M。
当缓冲池的作业刷新时,并不直接写硬盘,而是通过memcpy函数将脏页先拷贝到内存中的doublewrite buffer,
之后通过doublewrite buffer再分两次写,每次写入1M到共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘。

查看doublewrite的使用 情况
show global status like ‘innodb_dblwr%’
slave上可以通过设置skip_innodb_doublewrite参数关闭两次写功能来提高性能
master上一定要开启此功能,保证数据安全


自适应哈希索引
监控表上索引的查找,如果观察到建立哈希索引可以提升速度,则建立哈希索引,所以称之为自适应(adaptive)的。
通过缓冲池的B+树构造而来,因此建立的速度很快。需要将整个表都建哈希索引,自动根据访问的频率

限制
1.只能用于等值比较,例如=, <=>,in
2.无法用于排序
3.有冲突可能
4.自动管理,无法人为干预。

预读 read-ahead


提供两种预读的方式,
一种是 Linear read ahead,由参数innodb_read_ahead_threshold控制,
当连续读取一个 extent 的 threshold 个 page 的时候,会触发下一个 extent 64个page的预读。

另外一种是Random read-ahead,由参数innodb_random_read_ahead控制,当连续读取设定的数量的page后,会触发读取这个extent的剩余page。
 
预读由后台线程异步完成的。启动innodb_read_io_threads个后台线程,

上一篇     下一篇
认知世界三个区:舒适区、学习区、恐慌区

50个经典思维助你打开思路

投资人尽职调查要点整理

jdk jcmd 使用

mysql知识点整理

架构师需要具备的能力和素质