InnoDB特性(读MySQL技术内幕-InnoDB存储引擎)

插入缓冲

俩次写

自适应哈希索引

异步IO

刷新邻接页

 

插入缓冲Insert Buffer:物理页的一部分

对于非聚集索引的插入或者更新操作,不是每一次直接插入到索引数据页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在,则直接插入,若不在,先放在一个Insert Buffer对象中,看似数据库已经将这个非聚集索引插入到叶子节点中,实则没有,只是存放在另一个位置,再以一定的频率和情况进行Insert Buffer和辅助索引数据页的子节点的merge操作,将多个插入合并到一个操作中(在一个索引数据页中)来提高对于非聚集索引插入的性能。

Insert Buffer插入条件:

索引是辅助索引

索引不是唯一的

show engine innodb status;查看插入缓冲信息

IBUF_POOL_SIZE_PER_MAX_SIZE:控制插入缓冲的大小(因为写密集的情况下,Insert Buufer会占用过多的缓冲池内存,默认最大可占1/2,将次参数改为3,则最大占1/3)

 

Change Buffer(Insert Buffer 升级)

对DML(Insert,Delete,Update)操作都可进行缓冲,分别为:Insert Buffer,Delete Buffer,Purge Buffer(都只适应非唯一辅助索引)

innodb_change_buffering(控制插入缓冲是否开启):inserts(insert 操作),deletes(delete 操作),purges(update 操作),changes(启用inserts和deletes),all(都启用),none(都不启用)

innodb_change_buffer_size(控制Change Buffer最大内存使用量):默认25,最多使用1/4的缓冲内存空间

 

Innsert Buffer内部实现:

数据库全局有一个Insert Buffer B+树(之前版本是每个表一颗)。

(涉及较多的索引知识,回头再看)

 

俩次写(doublewrite):

部分写失效(partial page write):InnoDb正在写入某个页到表中,写了一部分,发生宕机

(可以通过重做日志进行恢复,但重做日志是对数据页的操作,如果数据页本身已经损坏,则不行)

所以在应用重做日志前,需要一个页的副本,当写入失效发生时,先通过页的副本还原页,在进行重做,就是doublewrite

doublewrite分为俩部分:

     一部分是内存中的doublewrite buffer(2MB)

     另一部分是物理磁盘上共享表空间中的连续128个页(2MB)

对脏页刷新时,并不是直接写磁盘,而是先通过memcpy函数将脏页复制到内存中的doblewrite buffer,之后通过doublewrite buffer再分俩次,每次1MB顺序地写入共享表空间的物理磁盘上,然后调用fsync函数,同步磁盘,避免缓冲写带来的问题(此时doublewrite是顺序的)。完成doublewrite页的写入后,再将doublewrite buffer中的页写入各个表空间文件中,此时的写时离散的。

参数skip_innodb_doublewrite可禁止使用doublewrite功能

 

自适应哈希索引

Innodb会监控对表上的各索引页的查询,观察到建立哈希索引可以带来速度提升,则建立哈希索引,称为自适应索引(Adaptive Hash index , AHI)。AHI是通过缓冲池的B+树页构造而来,因此建立速度快,不需要对整张表建立哈希索引。Innodb会自动根据访问的频率和模式来自动为某些热点页建立哈希索引。

要求:

对这个页的访问模式(查询条件)必须是一样的。

以该访问模式访问了100次

页通过该模式访问了N次,其中N=页中记录*1/16

 

 

异步IO(Asynchronous IO,AIO):

可以进行IO Merge操作,就是将多次IO操作合并成一次

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值