INNODB引擎的4大特性

技术INNODB引擎的4大特性 INNODB引擎的4大特性1、插入缓存
2、二次写
3、自适应哈希
4、预读
一、插入缓存(insert buffer)
插入缓冲(insert Buffer/Chang

INNODB发动机的四大特点

1.插入缓存

2.写两遍。

3.自适应散列

4.预读一、插入缓存(insert buffer)

插入缓冲区/更改缓冲区:提高插入性能。变更缓冲区是插入缓冲区的增强,只对插入有效,变更缓冲区对插入、删除、更新(删除插入)和清除有效。

它只对插入和更新非聚集索引(非唯一)有效。每次插入都不写入索引页,而是先判断插入的非聚集索引页是否在缓冲池中,如果在,则插入字节;如果没有,先放入插入缓冲区,在按照一定的效率进行合并操作,在写会Disk.这通常会将多个插入合并到一个操作中,目的还是为了减少随机IO带来性能损耗。.

使用插入缓冲区的条件:

非聚集索引

非唯一索引

更改缓冲区作为缓冲池的一部分存在。Innodb_change_buffering参数缓存对应的操作:(更新将被视为删除插入)

Innodb_change_buffering:设置值为:插入、删除、范围、更改(插入和删除)、全部(默认)、无。

All:默认值,缓存插入、删除、清除操作。

插入:缓存插入操作。

Deletes:缓存删除操作。

更改:缓存插入和删除操作。

Purges:缓存后台心脏的物理删除操作。

它的使用范围可以通过参数来控制:

Innodb_change_buffer_max_size,默认为25%,即缓冲池的1/4,最多可以设置为1/2。当MySql实例中有大量修改操作时,考虑Innodb_change_buffer_max_size有多大。

以某一频率合并的条件是什么?

辅助索引页被读入缓存池,普通选择首先检查非聚集索引页是否存在于插入缓冲区中,如果存在,则合并并插入它。

辅助索引页没有可用空间。如果空间小于页面大小的1/32,将强制执行合并操作。

每秒和每10秒的主合并操作。

二、二次写(Double wite)

DoubleWrite缓存位于系统表空间的存储区域,用于在Innodb Buffer池中刷新后、写入数据文件前缓存Innodb的数据页。因此,当操作系统或数据库进程在将数据页写入磁盘的过程中崩溃时,Innodb可以在DoubleWrite缓存中找到数据页的备份,并使用它来执行崩溃恢复。将数据页写入双写缓存的操作所需的IO消耗,该数据页将被写入一个大的连续块中。

在应用重做日志之前,用户需要一份页面的副本。当写入失败时,页面的副本用于恢复页面未被重做,这就是双写。

双写的构成:

内存中双写缓冲区的大小是2M。

物理磁盘上的共享表空间中有128个连续页面,即2个扩展页面,大小与2M相同。

当缓冲池中的脏页被刷新时,脏页将被memcpy()函数照片打印到内存中的Double Write Buffer,然后被Double Write分成两次,每次1M被顺序写入共享表空间的物理磁盘。在这个项目中,由于Double Write页面是连续的,这个过程是按顺序写的,成本不大。双写页写入后,双写缓冲区中的页被写入每个表空间文件,此时的写入是离散的。如果操作系统在将页面写入磁盘的过程中崩溃,Innodb可以从共享表空间中的Double Write中找到页面的副本,将其复制到表空间文件中,然后应用重做日志。

三、自适应哈希索引(AHI)

Adaptive Hash索引属性使Innodb更像内存中的数据库,可以通过Innodb_adaptive_hash_index打开,也可以通过参数—— skip-Innodb _ Adaptive _ Hash _ index关闭。

注意:自适应哈希可以关闭。

生成哈希索引的条件很苛刻。

索引被访问过17次吗?

索引中的一个页面已经被访问了100次。

访问模式必须

须是一样的。
例如对于(a、p)访问模式情况:
where a = xxx
where a = xxx and b = xxx

Innodb存储引擎会监控对表上二级索引的查找,如果发现某二级索引被频繁访问 ,二级索引成为 热数据,建立哈希索引可以代理速度的提升。
经常访问的二级索引数据会自动被生成到hash索引里面去(最近连续被访问三次的数据),自适应哈希索引通过缓冲池的B+树构造而来,因此建立的速度很快。
哈希(Hash)是一种非常快的等值查找方法,一般情况下这种查找的时间复杂度为O(1) 即一般仅需要一次查找就能定位数据,而B+树的查找次数,取决于B+树的高度,在生产环境中,B+树的高度一般是3、4层,故需要3-4次的查询。

Innodb会监控对表上个索引页的查询,如果观察到简历哈希索引可以带来速度提升,则自动建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)

特点:

  1. 无序,没有树高
  2. 降低对二级索引树的频繁访问资源,索引树高=4 访问索引:访问树,根节点,叶子节点。
  3. 自适应
    缺陷:
  4. jash自适应索引会占用Innodb buffer pool
  5. 自适应hash索引只适合搜索等值的查询,如select * from table where index_col='xxx' 而对于其他查找类型,如范围查找,是不能使用的。
  6. 极端情况下,自适应hash索引才有比较大的意义,可以减低逻辑读。

四、预读
Innodb使用两种预读算法来提高I/O性能:线性预读(linear read_ahead)和随机预读(randomread-ahead)为了区分这两种预读的方式,我们可以吧线性预读放到以extent为单位,而随机读放到exent中的page为单位,线性预读着眼于降下一个extent提前读取到 buffer pool中,而随机预读着眼于extent中的剩余的page提前读取到buffer pool中。

原文为:https://www.cnblogs.com/zhs0/p/10528520.html

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/117966.html

(0)

相关推荐

  • abca式的成语,abac式的形容词语大全

    技术abca式的成语,abac式的形容词语大全碍手碍脚abca式的成语、毕恭毕敬、呆头呆脑、多才多艺、独来独往无尤无怨、无缘无故、无怨无德、无昼无夜、无踪无影 武爵武任、勿怠勿忘、误打误撞、先圣先师、先知先觉 闲非闲是、

    生活 2021年10月21日
  • php7如何将字符串转为数组

    技术php7如何将字符串转为数组这篇文章主要介绍php7如何将字符串转为数组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 转换方法:1、用str_split(),语法

    攻略 2021年11月7日
  • python模块shutil函数怎么用

    技术python模块shutil函数怎么用小编给大家分享一下python模块shutil函数怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文大纲os模块是Python标准库中一个重要的模块,里面

    攻略 2021年10月27日
  • mysql数据目录结构是怎么样的

    技术mysql数据目录结构是怎么样的mysql数据目录结构是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql数据目录结构(转

    攻略 2021年11月16日
  • 有关mysql的坑有哪些

    技术有关mysql的坑有哪些这篇文章主要介绍“有关mysql的坑有哪些”,在日常操作中,相信很多人在有关mysql的坑有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有关mysql的坑

    攻略 2021年10月21日
  • 気怎么读,situation怎么读

    技术気怎么读,situation怎么读situation[英][ˌsɪtʃuˈeɪʃn] [美][ˌsɪtʃuˈeʃən] 生词本
    简明释义
    n.(人的)情况気怎么读;局面,形势,处境;位置;[心理学]情境
    复数

    生活 2021年10月27日