MySQL-InnoDB关键特性

2018-10-26  本文已影响23人  agile4j

作者:刘仁鹏
参考资料:《MySQL技术内幕:InnoDB存储引擎》


1.插入缓冲

1.Insert Buffer

  1. 索引是辅助索引
  1. 索引不是唯一索引

2.Change Buffer

3.Insert Buffer的内部实现

  1. space:占4个字节,存储的是待插入记录所在表的表空间ID(space id)
  2. marker:占1个字节,兼容老版本的Insert Buffer,略过
  3. offset:占4个字节,表示页所在的偏移量
  1. space、narker、offset含义与非叶子节点相同
  2. metada:占用4个字节,存储内容如下:
    |名称|字节|
    |---|---|
    |IBUF_REC_OFFSET_COUNT|2|
    |IBUF_REC_OFFSET_TYPE|1|
    |IBUF_REC_OFFSET_FLAGS|1|
    IBUF_REC_OFFSET_COUNT是保存两个字节的整数,用来排序每个记录进入Insert Buffer的顺序,通过这个顺序回放,才能得到记录的正确值

4.Merge Insert Buffer

  1. 辅助索引页被读取到缓冲池时
  2. Insert Buffer Bitmap页追踪到该辅助索引页已无可用空间时
  3. Master Thread(随机选取以保证公平性)

2.两次写

SHOW GLOBAL STATUS LIKE 'innodb_dblwr%'\G

3.自适应哈希索引

  1. 对页的连续访问模式必须一样(即查询条件一样)
  2. 必须是等值查询(不能是范围查询)
  3. 对该模式访问了100次
  4. 页通过该模式访问了N次,其中N=页中记录*1/16

4.异步IO

5.刷新临近页

  1. 是不是可能将不怎么脏的页进行了刷新,而该页稍后很快变成了脏页?
  2. 固态硬盘有较高的IOPS,是否还需要此特性
上一篇 下一篇

猜你喜欢

热点阅读