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    |
+-------------------------------+-------+
目录
相关文章
|
19天前
|
存储 安全 关系型数据库
InnoDB引擎特性
InnoDB事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL5.5.5之后,InnoDB作为默认存储引擎,InnoDB主要特性有: InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供了一个类似Oracle的非锁定读。 InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘关系的数据库引擎所不能匹敌的。 InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池
|
6月前
|
存储 关系型数据库 MySQL
mysql的InnoDB引擎实现ACID特性的原理
mysql的InnoDB引擎实现ACID特性的原理
|
6月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】2.6-InnoDB关键特性
【MySQL技术内幕】2.6-InnoDB关键特性
51 0
|
存储 SQL 缓存
MySQL InnoDB如何保证事务特性
MySQL InnoDB如何保证事务特性
142 0
|
存储 SQL 监控
MySQL之InnoDB关键特性
MySQL之InnoDB关键特性
148 0
MySQL之InnoDB关键特性
|
Oracle 关系型数据库 MySQL
新特性速递 | InnoDB redo log archiving(归档)
新特性速递 | InnoDB redo log archiving(归档)
331 0
|
关系型数据库 数据库 索引
数据库面试题【十一、InnoDB引擎的4大特性】
数据库面试题【十一、InnoDB引擎的4大特性】
385 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, 就可以看到这些参数了。
3004 0
|
关系型数据库
MySQL - InnoDB特性 - Buffer Pool漫谈
缓存管理是DBMS的核心系统,用于管理数据页的访问、刷脏和驱逐;虽然操作系统本身有page cache,但那不是专门为数据库设计的,所以大多数数据库系统都是自己来管理缓存。由于几乎所有的数据页访问都涉及到Buffer Pool,因此buffer pool的并发访问控制尤为重要,可能会影响到吞吐量和响应时间,本文主要回顾一下MySQL的buffer Pool最近几个版本的发展(若有遗漏,欢迎评论补充), 感受下最近几年这一块的进步 MySQL5.5之前 只能设置一个buffer pool, 通过innodb_buffer_pool_size来控制, 刷脏由master线程承担,扩展性差。
3378 0