读《MySQL技术内幕 InnoDB存储引擎》 学习总结 第二章

 

第二章.InnoDB存储引擎

 

2.2 InnoDB体系架构。

2.3 .1是多线程模型,后台多个线程主要负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最新的数据。

分为.    Master  Thread ; IO Thread ,Io请求的回调处理; 事务被提交后,其使用的undolog可能不再被需要当我们对记录做了变更操作时就会产生undo记录,,  Purge Thread 回收已经使用并分配的undolog。

2.3.2 内存

缓冲池

InnoDB是基于磁盘存储的,使用缓存池技术提高整体性能,缓冲池是一块内存区域,通过内存速度来弥补磁盘慢的缺憾。

读取: 在数据库对磁盘进行读取操作后首先将读到的页存放在缓冲池中,下次再遇到读取先判断一下是否在缓冲池中,是则直接读取该页否则去数据库中查询。

修改: 首先修改在缓冲池的页,然后以一定的频率刷新到磁盘上。

综上,缓冲池的大小之间影响到来数据库的性能。

缓冲池中的数据页类型:索引页,数据页,undo页,插入缓冲,自适应哈希索引,锁信息,数据字典信息。

算法管理:LRU   (最近最少使用)

改进:增加了midpoint指针,将列表中的数据分为活跃数据与非活跃数据,防止索引或者全表扫描等操作将活跃数据移除,增加磁盘访问量。另外,还设置了old页迁移至new页的指标  block_times。

重做日志缓冲

重做日志是什么。主要用于重建对数据库所有更改的数据  https://www.cnblogs.com/ZeroTiny/p/9229973.html

master Thread每一秒钟会将重做日志刷新到重做日志文件中。

2.4 Checkpoint技术

  题外话: 为了避免数据丢失,在事务提交时先写重做日志再修改页,这也是事务ACID中持久性的要求。

主要工作:将缓冲池的脏页刷新到磁盘中。

主要解决一下问题:

  1. 缩短数据库恢复时间,对checkpoint时间点后的重做日志进行恢复。
  2. 缓冲池不够用时,将脏页刷新到数据库磁盘中,(LRU 溢出的页)
  3. 重做日志不可用时,刷新脏页

2.5 Master Thread的工作方式

内部包含多个循环:主循环,后台循环,刷新循环,暂停循环。

主循环有两大操作:

每秒的操作------日志缓冲刷新到磁盘

每十秒的操作------合并至多五个插入缓冲,讲日志缓冲刷新到磁盘,删除无用的undo页

 2.6 InnoDB关键特性

插入缓冲

 导读———  非聚集索引:存储地址在逻辑上连续但是在物理地址上不连续。比如一个作者写了两种类别的书分别放在了两个不太的书库中。

插入顺序按照主键递增的顺序插入。对于非聚集索引的插入和更新,先判断是否在缓冲池中,若不在则放入到Insert buffer中,慢慢和辅助索引的叶子节点合并。insert buffer内部实现是一颗B+树:具体看书上P63。实现性能上的提升

两次写

实现数据页的可靠性。防止写入某页到表时数据库出现死机。

自适应哈希索引

B+树的查找速度取决于B+树的高度,InnoDB引擎观察到建立哈希索引可以提升速度就会建立哈希索引。

异步IO

同步IO,每进行一次IO操作需要等到它执行完毕才会执行下一个命令。

异步IO可以同时执行,更加高效。

刷新邻接页

刷新脏页时会检测该页所在区的所有页,如果是脏页就一起刷新。

2.7关闭数据库

正常关闭数据库时,需要将所有的脏页刷新回磁盘,完成所有的 full purge和merge insert buffer

用kill命令关闭数据库会导致数据库无法正常关闭,下次数据库启动时会对存储引擎的表进行恢复操作。

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值