美文网首页
InnoDB存储引擎特性简介

InnoDB存储引擎特性简介

作者: 花醉霜寒 | 来源:发表于2020-01-09 15:02 被阅读0次

InnoDB的特性包括
\color{green}{插入缓冲(Insert Buffer和Change Buffer)}
插入缓冲主要针对的是非聚类索引的插入,不是每次直接插入到索引页中,而是先判断插入的非聚类索引页是否在缓冲池中,若在则直接插入,若不在,则先放到一个叫Insert Buffer对象中,然后在以一定的频率和情况进行Insert Buffer和辅助索引叶子节点的merge操作,这时通过将多个插入操作合并到一个操作中(因为在一个索引页中),这个大大提高了非聚类索引的插入性能。而对于更新操作,可以分为两个过程,将记录标记为已删除和真正将记录删除,Delete Buffer和PurgeBuffer分别对应更新的两个阶段。
Insert Buffer和Change Buffer的使用必须满足两个条件:
1)索引是辅助索引(secondary index)
2)索引不是唯一的
可以通过

SHOW ENGINE INNODB STATUS\G;

查看Insert Buffer的使用情况,如下图所示

InsertBuffer

seg size表示当前Insert Buffer的大小, merges表示合并的次数,即真正插入的次数
insert 表示Insert Buffer, delete mark 表示Delete Buffer, delete 表示 Purge Buffer
可以通过innodb_change_buffer_max_size来控制Change Buffer的大小

changeBuffer

表示Change Buffer最大占用Buffer Pool的25%,该值的最大有效值为50

\color{green}{两次写(Double Write)}
两次写保证数据页的可靠性,如果Innodb存储引擎在写入某个页到表中,而这个页只写入一部分,如16k的页仅仅写了前4k时发生数据库宕机,这种情况就是数据写失效,此时可以通过重做日志进行恢复,但是重做日志中记录的是对页的物理操作,如果页本身已经损坏,在对其进行重做是没有意义的,也就是说在重做之前,用户需要一个页的副本,当写入失效时,先通过副本来还原该页,在进行重做,这就是double write,可以通过参数skip_innodb_doublewrite可以禁止使用doublewrite功能。

double wreite

一共写了1104533页,实际写入次数为197839,两者的比值远大于64,说明系统写操作压力比较大

pages_flsuhed

比较pages_written 和 pages_flushed两个值基本相等,说明每次刷新缓存的时候,都会写入doublewrite buffer

\color{green}{自适应哈希索引(Adaptive Hash Index)}
InnoDB存储引擎会监控对表上个索引页的查询。如果观察到建立哈希索引能够带来速度的提升,则建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index, AHI),AHI是通过缓冲池的B+树页构造出来的,因此建立的速度很快,而且不需要对整张表构建hash索引。InnoDB存储引擎会自动根据访问频率和模式来自动的为某些热点数据建立哈希索引。

\color{green}{异步IO(Async IO)}
用户可以在发出一个IO请求之后,立即在发出下一个IO请求,当全部IO请求发送完毕之后,等待所有的IO操作的完成,这就是AIO。AIO的优势是可以进行IO Merge操作,即将多个IO合并为一个IO操作,提升性能。通过查询innodb_use_native_aio来查询是否开启AIO,官方测试开启AIO后,恢复速度可以提升75%。

\color{green}{刷新邻接页(Flash Neighbor page)}
当刷新一个脏页时,InnoDB存储引擎会检测该页所在的区(extent)的所有页,如果是脏页,那么一起进行刷新,优点显而易见就是减少IO次数,在传统的机械硬盘上有着很大的性能提升,但是需要考虑两个问题:
1)是不是会将不怎么脏的页进行写入,而该页很快又会变成脏页?
2)固态硬盘有着很高的IOPS,是否需要这个特性?
可以通过innodb_flush_neighbors来控制是否开启该功能。
建议:对于固态硬盘,该参数设置为0.

相关文章

  • 五,存储引擎

    1,简介 2,了解功能 3,存储引擎介绍 监控系统架构整改 4,InnoDB存储引擎核心特性 查看存储引擎设置 查...

  • 「Mysql索引原理(一)」1.存储引擎简介

    存储引擎 0. 前言1. 存储引擎查看2. InnoDB存储引擎特性存储InnoDB历史3. MyISAM存储引擎...

  • mysql(七)

    MySQL存储引擎-innodb 查看存储引擎 innodb和myisam的物理区别 innodb 核心特性 MV...

  • InnoDB存储引擎特性简介

    InnoDB的特性包括插入缓冲主要针对的是非聚类索引的插入,不是每次直接插入到索引页中,而是先判断插入的非聚类索引...

  • 淘宝MySQL文档整理

    MySQL · 引擎特性 · InnoDB 事务锁系统简介 MySQL · 引擎特性 · Innodb 锁子系统浅...

  • Mysql数据引擎

    InnoDB数据存储引擎(Mysql5.5+ 默认数据存储引擎)主要特性: InnoDB引擎提供了对数据库ACID...

  • sql--存储引擎

    2018-10-08 存储引擎 InnoDB:是mysql默认的事务型存储引擎,只有在需要InnoDB不支持的特性...

  • 数据库套餐打包

    存储引擎 InnoDB InnoDB 是 MySQL 默认的事务型存储引擎,只要在需要它不支持的特性时,才考虑使用...

  • Day95-MySQL-中级DBA课程

    上节回顾: 存储引擎种类 InnoDB 核心特性 事务ACID 锁 ,隔离级别 innodb_flush_log_...

  • InnoDB存储引擎简介

    前言: 存储引擎是数据库的核心,对于 MySQL 来说,存储引擎是以插件的形式运行的。虽然 MySQL 支持种类繁...

网友评论

      本文标题:InnoDB存储引擎特性简介

      本文链接:https://www.haomeiwen.com/subject/rhvyactx.html