InnoDB存储引擎基础

分布式存储中指明了存储的下层就是存储引擎,所以就拿一个实际的存储引擎进行学习了解,存储引擎究竟是如何操作使用的。下面对InnoDB存储引擎做一个简单的总结。

1、什么是InnoDB存储引擎,在此存储引擎上支撑的什么样的数据库

InnoDB目前支持上层的数据库为MySQL,目前支持MySQL的相关特性由:ACID的事务,行锁,MVCC版本控制,外键,非锁定读

2、关于Innodb的源码中基本结构

innode默认有一个内存池和持久化的磁盘,其中内存池中运行有7个线程,其中有4个IO线程,有一个主线程,一个锁线程,还有一个错误监控线程

3、innode内存的缓冲区中缓存的数据有:

数据页
索引页
插入换成区
自适应哈希索引
锁信息
数据字典信息

4、master主线程的主要操作

每秒钟进行刷新操作:

总是将日志刷新到磁盘上
可能合并插入缓冲,取决于一秒内IO的次数
最多刷新100个脏页到磁盘上
没有用户活动,自动切换到后台操作

每10s进行的刷新操作

刷新100个脏页到磁盘上
合并至多5个插入缓冲
将日志刷新到磁盘上
产生一个检查点等

5、innode为了考虑缓冲区和磁盘IO的平衡,使用的不是之前了解的单纯的LRU算法,使用下面的方法:

将内存中修改的页称为脏页,待刷新到磁盘上

插入的新页不是直接插入到LRU缓冲区中,专门设置了一个插入缓冲区,新页插入到插入缓冲区中

即不是像传统的一样未命中替换末尾冷的数据页,而是可以将多个脏页刷新到磁盘上,内存缓冲区剩余空也,可以直接被插入,通过这种方法来维护缓存的。

6、聚集索引和非聚集索引的区别
聚集索引:

物理存放的顺序和索引存放的数据一致,即索引的前后对应的数据位置的前后

打个比方:汉语字典中的拼音索引,汉字正文也是按照拼音进行排序的

非聚集索引:

物理存放的顺序与索引存放的数据是不一致的

打个比方:汉语字典中的偏旁部首,偏旁部首的相邻的数据索引,正文实际位置并不相邻

7、聚集索引和非聚集索引插入时候的区别

对于聚集索引:物理位置插入后,直接在索引+1后面插入即可

对于非聚集索引,插入后,还需要首先通过聚集索引找到新插入的页,然后计算非聚集索引,然后离散的访问下一个非聚集索引。

8、innod中对于非聚集索引的优化

针对非聚集索引这种离散化的读操作,innod对这种进行了优化

优化方式:

使用插入缓冲区,innodb在内存中开辟了一个区域叫做插入缓冲区,这个缓冲区是用来处理插入非聚集索引的。

主要执行以下操作:

插入的非聚集索引是否命中,命中则直接返回
未命中,则加入到插入缓冲区
在缓冲区进行合并操作,将多个非聚集缩影操作合并称为一个操作,即操作一个索引页,通过这种方法减少非聚集索引离散度的影响、

9、innodb两次写入方法赖保证数据的可靠性

innodb 写入时采用两次写的思想,并不是直接把数据脏页刷新到磁盘上,而是先后两个将数据顺序的写入到磁盘的书共享表空间,在从磁盘的共享表空间同步到磁盘的物理区域上。

10、innodb中自适应哈希索引的技术

用于哈希索引查询的速度非常快,但是哈希的过程建立是耗时的,所以innodb中提出了自适应哈希索引

首先,innodb对索引的查找进行监控,如果用户对某些数据的索引访问非常频繁,则会自动为这些数据使用哈希索引,建立索引表,这样下次访问这些频繁的数据即可使用哈希索引。

但是哈希索引仅仅用于SQL进行等值查询,返回查询是不行的、

11、innodb的文件

除了上述讲了以下关于innode的操作知识,innode对外存放有效的数据是表空间的形式存放的

每个以innodb引擎的表都会产生一个表空间,该文件存放表的索引和插入缓冲的一些信息

除了表空间文件外,还有一个重做日志文件,用来恢复事务日志。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值