位置: 编程技术 - 正文

浅谈innodb的索引页结构,插入缓冲,自适应哈希索引(innodb数据和索引文件)

编辑:rootadmin

推荐整理分享浅谈innodb的索引页结构,插入缓冲,自适应哈希索引(innodb数据和索引文件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:innodb索引实现原理,innodb全文索引,innodb的索引存储在哪个文件,innodb数据和索引文件,innodb数据和索引文件,innodb索引实现原理,innodb的索引存储在哪个文件,innodb的索引存储在哪个文件,内容如对您有帮助,希望把文章链接给更多的朋友!

Physical Structure of an InnoDB Index

所有的innodb索引都是btree索引,索引记录保存在叶子上,默认的索引页大小是K。当有新的记录插入时,innodb出于对将来的insert和update操作的考虑,会尝试留下1/的空闲页大小。

如果索引记录是完全按照索引记录的大小顺序插入的,那么索引也将填满整个页大小的/,如果插入顺序完全随机,那么索引页基本上填充为1/2至/自建。如果填充因子低于1/2,innodb会尝试重建b-tree。

Mysql5.6以后,可以通过innodb_page_size参数设置当前实例下每个索引页的大小,一旦设定,无法再更改回来。推荐的配置一般是K,8K或者4K。另外假如一个Mysql实例设置了不同于默认值的innodb_page_size A,那么将无法使用其他不同于A值的实例上的文件(比如做一个物理备份和恢复)

Insert Buffering

数据库应用通常按照主键顺序插入的,在这种情况下,因为聚集索引的顺序和这个主键值的顺序完全一致,insert操作将会减少很多的随机IO。

另一方面,二级索引通常不是唯一的,那么在二级索引中插入数据时是一个相对随机的顺序。同样的,delete和update操作在影响数据页时,涉及到索引的变更,在二级索引上也并不是紧挨着的。这就导致了大量的随机IO。

当插入一条记录,或者从非唯一的二级索引删除一条记录,innodb首先会去检查该二级索引页是否在缓冲池中。如果在缓冲池,innodb将会直接在内存中修改这个索引页。如果该索引也不在缓冲池,那么innodb将会将这个修改记录到插入缓冲,也就是insertbuffer。Insert buffer通常都比较小,所以能够保证全部在缓冲池中,并且更新非常频繁。这个修改的进程就是change buffering(通常情况下,它只会只作用于insert操作,所以也被称为insertbuffering,而该数据结构就是insert buffer)

Disk I/O for Flushing the Insert Buffer

浅谈innodb的索引页结构,插入缓冲,自适应哈希索引(innodb数据和索引文件)

那么插入缓冲如何减少随机IO的呢?每个一段时间,insert buffer会去合并在insertbuffer中的二级非唯一索引。通常情况下,它会合并N个修改到同一个btree索引的索引页中,从而节约了很多IO操作。经测试,insertbuffer可以提高倍的插入速度。

在事务提交后,insert buffer可能还在合并写入。所以,假如当DB异常重启,reovery阶段,当有非常多的二级索引需要更新或插入时,insert buffer将可能花费很长时间,甚至几个小时。在这个阶段,磁盘IO将会增加,那么就会导致disk-bound类型的查询有显著的性能下滑。

Adaptive Hash Indexes

自适应哈希索引(AHI)使得innodb在缓冲池拥有足够的内存和某些工作负载下,看起来更像一个内存数据库,并且不会牺牲任何事务的特点和稳定性。这个特色由参数innodb_adaptive_hash_index控制,动态参数,默认为on表示打开自适应哈希索引,关闭AHI后内置哈希表将会被立马清空,而正常的操作依旧可以继续,只是直接通过访问B-TREE索引。重新使能AHI后哈希表又会被重建。

通过观察搜素模式,mysql会利用index key的前缀建立哈希索引,这个前缀可以是任意长度,并且它可能仅仅是B-tree上的某些值,而不是整个b-tree。哈希索引通过检测,会在经常被访问的index pages上建立哈希索引。

如果一个表几乎大部分都在缓冲池中,那么建立一个哈希索引能够加快等值查询,通过将btree的索引值转换成一个排序指针。Innodb有这个机制,可以监控索引的搜索情况,如果它注意到有些查询通过建立哈希索引可以优化查询,那么它会自动建立,所以说它是“自适应的”。

在某些工作负载下,通过哈希索引查找带来的性能提升价值远大于这个额外的监控索引搜索情况和保持这个哈希表结构所带来的开销。但某些时候,在负载较高的情况下,自适应哈希索引中添加的read/write 锁也会带来竞争,比如高并发的join操作。Like操作和%的通配符同样不适用于AHI。如果工作负载不适合AHI,建议将它关闭,以免带来不必要的性能开销。因为mysql内部很难预示在一个特定的场合下AHI到底是否合适,推荐做一个实际工作负载的压测(有无AHI两种情况)。在5.6及以后版本中将会考虑让越来越多的工作负载最好disable掉自适应哈希索引,尽管目前而言它默认还是开启的。

哈希索引的创建往往是基于现有的b-tree,innodb可以通过观察b-tree的搜索情况建立任意长度的b-tree索引前缀的方式建立哈希索引。一个哈希索引可以只是部分的,仅包括b-tree index中最经常被访问到的页。

你可以通过观察show engine innodb status结果中的SEMAPHORES部分来决定是否使用自适应哈希索引。如果你看到很多线程都在btr0sea.c文件上创建rw-latch上waiting,那么建议关闭掉自适应哈希索引。本人曾经碰到过的一个case截图如下,典型的高并发模式下AHI引起的竞争,需要关闭AHI

以上这篇浅谈innodb的索引页结构,插入缓冲,自适应哈希索引就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

InnoDb 体系架构和特性详解 (Innodb存储引擎读书笔记总结) 后台线程MasterThread核心后台线程,主要负责将缓冲池的数据异步刷新到磁盘。例如脏页的刷新,插入缓冲的合并,undo页的回收等。每秒一次的操作:1.

InnoDB的关键特性-插入缓存,两次写,自适应hash索引详解 InnoDB存储引擎的关键特性包括插入缓冲、两次写(doublewrite)、自适应哈希索引(adaptivehashindex)。这些特性为InnoDB存储引擎带来了更好的性能和更高的

mysql取得datetime类型的数据,后面会跟个.0的实现方法 mysql的数据类型是datetime,数据库里存的数据是--::,传到java这里变成了--::.0,多了个尾巴.0,可以通过以下集中方法来format显示格

标签: innodb数据和索引文件

本文链接地址:https://www.jiuchutong.com/biancheng/349913.html 转载请保留说明!

上一篇:详谈innodb的锁(record,gap,Next-Key lock)(innodb update 锁)

下一篇:InnoDb 体系架构和特性详解 (Innodb存储引擎读书笔记总结)(innodb底层实现原理)

  • 会计上已资本化处理的工资企业所得税前应如何扣除?
  • 社会保障税的征收条件
  • 企业所得税怎么算出来
  • 无形资产属于货币性项目吗
  • 股东分红的账务处理结转
  • 银联撤销交易步骤
  • 设备5年直线法计提折旧怎么做
  • 资产负债表应交税金负数是什么意思
  • 电子发票上的字体大小
  • 无偿赠送他人货物交增值税吗
  • 现金日记账是收付实现制吗
  • 行政单位要纳税吗
  • 原材料入库单运费要怎么计入?
  • 建筑企业未开票收入增值税申报表怎么填写
  • 财务人员需具备的基本素质和条件是什么
  • 咨询费收入交什么税种
  • 补发工资个人所得税怎么申报
  • 2018劳务费个人所得税税率表
  • 税务机关代开的普通发票上无需加盖收款方的印章
  • 企业所得税减免政策2023
  • 境内向境外提供服务免征增值税
  • 亏损企业能否享受失业金
  • 社保基数填错了 可以退款吗
  • 华为手机如何用有线耳机
  • 如何使用windows10自带杀毒
  • 酒店安装监控费用谁出
  • 企业所得税汇算清缴操作流程
  • php输出mysql查询结果
  • 建材网上销售平台有哪些
  • 应付职工薪酬的借方和贷方
  • php curd
  • 企业购入软件会计分录
  • php socket_create
  • 跨年庆典中燃放的歌曲
  • php in
  • 信用减值损失属于损益类科目吗
  • 非洲加纳霍霍埃族是个国家吗
  • Chat GPT5如果问世会对世界产生什么影响?以及未来chat gpt 5会取代什么类型的工作。
  • fmt println
  • 长期待摊当期发票怎么开
  • 企业可以将自己辞退吗
  • 软件公司股权
  • 小微企业季度申报所得税税率
  • 药店主营业务成本怎么算出来的
  • 给个体工商户打工受伤怎么办
  • 征税小规模纳税申报
  • sqlserver游标实例
  • 工会会员缴纳的医疗互助金列工会什么科目
  • 计提未发生的费用
  • 办公室租赁费摊销分录
  • 哈罗单车说明
  • 销售退回的账务处理会计分录
  • 门面转让费怎么开发票
  • 股票股利应该何时分摊
  • 土地增值税税率怎么算
  • 计提工资的会计处理
  • 单位社保缴费基数比例
  • 过路费纸质发票可以抵扣增值税吗
  • 往来会计岗位职责怎么写
  • 残保金不申报可以补缴吗
  • 数据库时区与url连接设置的时区
  • win7总是提示激活
  • win2008ie安全设置
  • hprof-conv.exe
  • windows10正式版
  • centos7怎么配置ip地址和网络
  • windows 10的屏幕键盘快捷键在哪里
  • 64位CentOS 6.4安装配置流量监控工具ntopng
  • win10移动版和win10区别
  • cocos3.0
  • js计数排序
  • android学习路线
  • js解析url参数的方法
  • 命令适用于
  • js html css
  • javascript的
  • 黔南州都匀市是哪个省
  • 电子税务密码输入错误五次怎么办
  • 地税登录密码忘记了怎么办
  • 耕地占用税应该什么时候交
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设