开发者社区> miles_wong> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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    |
+-------------------------------+-------+

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Innodb undo之 undo结构简析
水平有限,如果有误请指出 参考: 阿里内核月报 姜老师的MySQL内核:innodb存储引擎 做一个简单的记录,自己备用 一、大体结构 rollback segments(128) undo segments(1024) undo log (header insert/modify .
1282 0
InnoDB的哈希算法
InnoDB存储引擎中自适应哈希索引使用的是散列表(Hash Table)的数据结构。但是散列表不只存在于自适应哈希中,在每个数据库中都存在。设想一个问题,当前我的内存为128G,我怎么得到内存中的某一个被缓存的页呢?内存中查询速度很快,但是也不可能遍历所有内存。
961 0
InnoDB的B+树索引
B+树索引其本质就是B+树在数据库中的实现,但是B+索引在数据库中有一个特点就是其高扇出性,因此在数据库中,B+树的高度一般都在2~3层,也就是对于查找某一键值的行记录,最多只需要2到3次IO,这倒不错。
946 0
+关注
miles_wong
Java核心技术 数据存储与数据库 分布式系统与计算 系统研发与运维 编程语言
87
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载