第2章 InnoDB存储引擎

来源:互联网 发布:chm生成软件 编辑:程序博客网 时间:2024/05/21 17:45

后台线程负责刷新内存池中的数据
多线程模型
后代线程:
1.Master Thread 核心线程 缓冲池数据异步刷新到磁盘
2、IO Thread IO请求回调
3.Purge Thread
+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| innodb_purge_threads | 4 |
+———————-+——-+

4.Page Cleaner Thread

2.3.2 内存

1.缓存池[一块内存区域]

弥补磁盘读写慢的缺点
在数据库中进行读取页的操作, 首先将从磁盘读到的页存放在缓冲池中, 这个过程称为将页“FIX”在缓冲池中。 下一次再读相同的页时,首先判断该页是否在缓冲池中。 若在缓冲池中,称该页在缓冲池中被命中, 直接读取该页。 否则, 读取磁盘上的页。对于数据库中页的修改操作, 则首先修改在缓冲池中的页, 然后再以一定的频率刷新到磁盘
配置方法:innodb_buffer_pool_size

内存数据对象

这里写图片描述

允许多个缓存池实例,配置选项:innodb_buffer_pool_instances 默认为1
这里写图片描述

2.LRU List、 Free List和Flush List

缓存池算法LRU(最近最少使用)
页的默认大小 16KB
InnoDB 优化了LRU算法,加入了midpoint[LRU列表长度的5/8出]位置,
最新放入的页不放入列表的首部,而放入midpoint位置。
这里写图片描述
37 —列表尾端的37%的位置

INNODB_BUFFER_POOL_STATS 观察缓冲池运行状态

3.重做日志缓冲

日志在内存中的缓存—log buffer.
undo日志记录数据被修改前的值,用于事务失败时进行rollback,恢复数据库,读一致性
redo日志记录数据被修改后的值

2.4 Checkpoint技术

防止数据丢失,采用 Write Ahead log 策略—–当事务提交时,先写重做日志,再修改页
Checkpoint技术解决如下问题:
• 缩短数据库恢复时间[Checkpoint点之前的数据已经刷回磁盘,只需对之后的redo日志进行恢复]
• 缓冲池不够用时,将脏页刷新到磁盘
• 重做日志不可用时,刷新脏页

Checkpoint所做的事,将脏页刷回磁盘

2.5 Master Thread工作方式

具有最高优先级

2.6 InnoDB关键特性

◊ 插入缓存◊ 两次写◊ 自适应哈希索引◊ 异步IO◊ S刷新邻接页

2.6.1 插入缓冲

1。Insert Buffer

是物理页的一个组成部分
不是所有主键插入都是顺序的
聚集索引 -primary key
这里写图片描述

使用条件:辅助索引,索引不唯一

2.Change Buffer

视为Insert Buffer的升级

3.Insert Buffer的内部实现

数据结构:B+树

4.Merge Insert Buffer

发生场景:
◊ 辅助索引页被读取到缓存池中
◊ Insert Buffer Bitmap页追踪到该辅助索引页已无可用空间时;
◊ Master Thread

2.6.2 两次写

Insert Buffer 引擎性能提升,
doublewrite 保证数据页的可靠性
doublewrite:写入失效发生时,先通过页的副本来还原该页,再进行重做

2.6.3 自适应哈希索引 [ANI]

AHI要求,页的连续访问模式必须是一样的
启用AHI后, 读取和写入速度可以提高2倍, 辅助索引的连接操作性能可以提高5倍。

2.6.5 刷新邻接页

工作原理为: 当刷新一个脏页时, InnoDB存储引擎会检测该页所
在区(extent) 的所有页, 如果是脏页, 那么一起进行刷新

原创粉丝点击