IT袋

当前位置:主页 > 经验教程 > 硬件教程 >

InnoDB内存结构详解

InnoDB内存结构详解 深入解析InnoDB的内存结构(2)

时间:2023-09-23 22:59:29 来源:IT袋 作者:苏晓敏
导读:InnoDB内存结构详解,change buffer工作原理如下: 当更改的页存在于buffer pool的lru list,则直接在缓冲池中修改这个页,这个页会变成脏页,链入到flush list中,但并不马上刷盘;

InnoDB内存结构详解

change buffer工作原理如下:

  1. 当更改的页存在于buffer pool的lru list,则直接在缓冲池中修改这个页,这个页会变成脏页,链入到flush list中,但并不马上刷盘;此时不涉及change buffer操作。
  2. 当更改的页不存在于buffer pool的lru list,就要先从磁盘读取要修改的数据页到buffer pool后再修改(数据不会在磁盘中直接更改)。但为了避免修改操作引发的磁盘读IO,系统会将DML操作记录到change buffer中,并不马上刷盘。等下次对这些修改的页进行查询时,由于lru list不存在该页,会从磁盘读取(磁盘页是更改前的数据),为了避免读到脏数据,该磁盘页会和change buffer中的更改合并后才链入到lru list。如果未来一段时间都不会查询到这个修改了的页,也会有insert buffer thread定时将change buffer的数据合并到磁盘页中。
  3. 如果做出的更改是对唯一键索引的值的修改,InnoDB要做唯一性校验,必须查询磁盘,再在lru list上的页修改,不会在change buffer中操作。

综上:change buffer适合写多读少的场景,并且满足非唯一索引。

Adaptive Hash Index

Adaptive Hash Index(AHI,自适应哈希索引),是指InnoDB存储引擎通过监控表上索引页的查找模式,自动根据查找模式对“热点数据”来创建哈希索引。因为对B+树索引的访问需要依次访问根节点>中间节点>叶子节点,而对哈希索引的访问仅需要一次HASH计算即可定位到目标位置。一些资料统计,启用AHI后,读取和写入速度可以提高2倍,辅助索引的连接操作性能可以提高5倍。

通过下列指令可以查询到数据库的相关设置:

show variables like '%hash_index';(DMS设置的是OFF)

AHI使用条件:

  1. 索引被访问了17次(BTR_SEARCH_HASH_ANALYSIS)
  2. 索引中的某个页已经被访问了至少100次(BTR_SEARCH_BUILD_LIMIT)
  3. 数据页被相同模式(相同的查询条件)访问N次(N=页中记录*1/16)

AHI使用buffer pool中的数据页进行构造,仅保存在内存中,且仅对热点数据进行处理,因此构造AHI速度极快。

log buffer

log buffer就是redolog buffer的简称,是存储要写入磁盘上的redolog的内存区域。

log buffer由变量innodb_log_buffer_size定义大小,默认为16MB(DMS中设置了8GB)。log buffer的内容会根据设置刷盘,足够大的log buffer可以使得大事务完全依赖缓存运行,而不需要在事务提交前将redolog数据写入磁盘。因此,如果有更新、插入或删除许多行的事务,增加log buffer的大小可以节省磁盘I/O。

log buffer是顺序写的,刷盘也是顺序的,所以当某个脏页对应的redolog从log buffer刷盘时,会保证将在其之前产生的redolog也刷盘,详情见下文redolog的介绍。

以上就是IT袋网带来的InnoDB内存结构详解的相关内容,希望对您有所帮助!

相关阅读