全面了解Mysql(三)关键特性

  1. 插入缓冲
    在这里插入图片描述
    1)概述
    如果主键是自动增长的,在插入的时候速度是非常快的,如果需要创建别的索引,聚集索引也是可以快速插入的,但是如果是非聚集索引,最好能是非唯一索引这样能触发insert buffer,引入插入缓冲的目的是防止频繁离散读取情况发生,首先将索引放入插入缓冲中,随后Master Thread会按条件合并其到索引页,或者当辅助索引页被读取到缓冲池时,insert buffer bitmap页追踪到该辅助索引页无可用空间。
    在这里插入图片描述
    我们可以通过命令show engine innodb status
    在这里插入图片描述
    seg size表示当前insert buffer大小3080*16kb,free list len表示空闲列表的长度,size表示已经合并的记录页,merges 代表合并次数,merged operations下的insert代表插入记录数,discarded operations下的操作表示当前表已经被删除了,无需做的操作。delete mark表示delete buffer,delete表示 purge buffer
    为了防止插入缓冲过大,可以使用IBUF_POOL_SIZE_PER_MAX_SIZEL来设置占用缓冲池比例。
    2)内部实现
    insert buffer是存放在共享表空间ibdata1中的一棵B+树(关于B+树请移步该链接),因此如果恢复某个库使用单纯的ibd文件还不够,有可能辅助索引的数据还在共享表空间中,需要REPAIR TABLE操作重建辅助索引
    B+树内部节点key为space+marker+offset,其中space表空间id,marker兼容老版本,offset表示所在页偏移量,当辅助索引要插入的页不在缓冲中时首先构建key,叶子结构key还是那个key,value是metadata+index record
    在这里插入图片描述
    metadata中4个字节,前两个字节是每个记录的顺序.
    为了保证每次merge insert buffer页必须成功,需要一个特殊的页insert buffer bitmap来标记每个辅助索引页的可用空间,是否有索引在insert buffer,当前页是否为insert buffer树的索引页
  2. 两次写
    如果当存储引擎正在写某个页到表中时,突然宕机了,就会出现部分写失效,这个时候想恢复数据库就比较困难,innodb提供doublewrite,doublewrite由两部分组成,一部分在内存中,一部分在共享表空间中都是2mb,如果宕机后页崩溃了,可以将共享表空间中doublewrite复制到对应表空间文件,再应用重做日志。
    在这里插入图片描述
    使用命令SHOW GLOBAL STATUS LIKE ‘INNODB_DBLWR%’ \G查看doublewrite运行情况。
    在这里插入图片描述
  3. 自适应哈希索引
    哈希速度会比B+树更高点,自适应哈希是对B+树来创建的,当无交替的查询条件完全一样的访问100次,页通过该模式访问N次,其中N=页中记录/16,就会创建哈希索引。
    使用命令SHOW ENGINE INNODB STATUS \G可以查看效率
    在这里插入图片描述
  4. 异步IO
    可以通过SHOW VARIABLES LIKE ‘INNODB_USE_NATIVE_AIO’ \G
    在这里插入图片描述
    AIO的方式可以进行io merge操作。
  5. 刷新邻接页
    当刷新一个脏页时,innodb会检测邻接页是否有脏页,如果有一起刷新,因为AIO可以进行合并操作。
  6. 其它操作
    1)innodb_fast_shutdown 0将所有脏页刷回磁盘,完成full purge、merge insert buffer,1将脏页刷回磁盘,2日志写入日志文件
    2)innodb_force_recovery 6个等级代表不同的恢复等级0为全部恢复。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值