innodb 关键特性

简介: 插入缓冲两次写自适应哈希索引异步IO刷新邻接页插入缓冲innodb存储引擎对于非聚集索引的插入或更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池,若在,则直接插入;不在,则先放在一个insert buffer对象中。
  • 插入缓冲
  • 两次写
  • 自适应哈希索引
  • 异步IO
  • 刷新邻接页

插入缓冲

innodb存储引擎对于非聚集索引的插入或更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池,若在,则直接插入;不在,则先放在一个insert buffer对象中。数据库这个非聚集的索引已经插到叶子节点,而实际并没有,知识存放在另一个位置。然后再以一定的频率和情况进行insert buffer和辅助索引页子节点的merge操作,这样就把多次插入操作合并为一个。

insert buffer使用条件:

  • 索引为辅助索引
  • 索引不是唯一的

使用命令show engine innodb status查看插入缓冲信息

mysql>show engine innodb status\G;
......
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 33, seg size 35, 2118 merges
merged operations:
 insert 2296, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
......

seg size显示当前insert buffer的大小为35*16KB;
free list len表示空闲列表的长度;
size代表已经合并记录页的数量
merges合并次数

merged operations和discarded operations显示change buffer中每个操作的次数

merged operations合并操作
merged operations insert插入的记录数
merged operations delete mark删除的记录数
merged operations delete清除记录数

discarded operations表示发生merge操作时,表已删除。
discarded operations insert表示取消的合并操作数
。。。

change buffer
innodb从1.0.x开始引入change buffer。innodb可以对DML操作都进行缓冲。
通过参数innodb_change_buffering开启各种buffer选项。可选值:inserts、deletes、purges、changes、all、none。changes表示启用inserts和deletes,all表示启用全部,none表示都不启用。默认all。

mysql> show variables like 'innodb_change_buffering';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_change_buffering | all   |
+-------------------------+-------+

通过参数innodb_change_buffer_max_size控制change buffer最大内存使用数量。默认25,表示最多使用1/4的缓冲池内存空间。该参数最大有效值50.

mysql> show variables like 'innodb_change_buffer_max_size';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| innodb_change_buffer_max_size | 25    |
+-------------------------------+-------+
目录
相关文章
|
5月前
|
存储 关系型数据库 MySQL
mysql的InnoDB引擎实现ACID特性的原理
mysql的InnoDB引擎实现ACID特性的原理
|
5月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】2.6-InnoDB关键特性
【MySQL技术内幕】2.6-InnoDB关键特性
45 0
|
存储 SQL 缓存
MySQL InnoDB如何保证事务特性
MySQL InnoDB如何保证事务特性
139 0
|
存储 SQL 监控
MySQL之InnoDB关键特性
MySQL之InnoDB关键特性
142 0
MySQL之InnoDB关键特性
|
Oracle 关系型数据库 MySQL
新特性速递 | InnoDB redo log archiving(归档)
新特性速递 | InnoDB redo log archiving(归档)
328 0
|
关系型数据库 数据库 索引
数据库面试题【十一、InnoDB引擎的4大特性】
数据库面试题【十一、InnoDB引擎的4大特性】
381 0
|
Oracle 关系型数据库 MySQL
新特性速递 | InnoDB redo log archiving(归档)
新特性速递 | InnoDB redo log archiving(归档)
|
监控 关系型数据库
MySQL8.0 - 新特性 - 说说InnoDB Log System的隐藏参数
InnoDB在设计lock-free的log system时,除了已有的参数外,还通过宏控制隐藏了一些参数,如果你使用源码编译时,打开cmake选项-DENABLE_EXPERIMENT_SYSVARS=1, 就可以看到这些参数了。
3001 0
|
关系型数据库
MySQL - InnoDB特性 - Buffer Pool漫谈
缓存管理是DBMS的核心系统,用于管理数据页的访问、刷脏和驱逐;虽然操作系统本身有page cache,但那不是专门为数据库设计的,所以大多数数据库系统都是自己来管理缓存。由于几乎所有的数据页访问都涉及到Buffer Pool,因此buffer pool的并发访问控制尤为重要,可能会影响到吞吐量和响应时间,本文主要回顾一下MySQL的buffer Pool最近几个版本的发展(若有遗漏,欢迎评论补充), 感受下最近几年这一块的进步 MySQL5.5之前 只能设置一个buffer pool, 通过innodb_buffer_pool_size来控制, 刷脏由master线程承担,扩展性差。
3369 0
|
关系型数据库 MySQL 索引
MySQL8.0.14 - 新特性 - InnoDB Parallel Read简述
最近的MySQL8.0.14版本增加了其第一个并行查询特性,可以支持在聚集索引上做SELECT COUNT()和check table操作。本文简单的介绍下这个特性。 用法 增加了一个session级别参数: innodb_parallel_read_threads 要执行并行查询,需要满足如下条.
4242 0