博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
InnoDB存储引擎概述--概述
阅读量:5338 次
发布时间:2019-06-15

本文共 1825 字,大约阅读时间需要 6 分钟。

后台线程

作用

刷新内存池数据,保证内存缓存的是最新的数据,将已修改的数据文件刷新到磁盘中,数据库发生异常时InnoDB能恢复至正常运行状态.

Master Thread

负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新,合并插入缓冲,UNDO页的回收.

IO Thread

Async IO处理IO请求,四种Thread: write, read, insert buffer, log IO thread, 可设置: innodb_read_io_threads, innodb_write_io_threads

Purge Thread

来回收已经使用并分配的undo页.

Page Cleaner Thread

脏页刷新的操作放在该线程中执行.

内存

缓冲池

缓冲池大小可配: innodb_buffer_pool_size

缓冲池个数可配: innodb_buffer_pool_instances

LRU List, Free List, Flush List

改进LRU算法,该算法为midpoint insertion strategy,默认midpoint的位于列表的5/8处,该位置可以通过innodb_old_blocks_pct控制.

参数innodb_old_blocks_time表示页读取到mid位置后需要等待多久才会被加入到LRU的热端.

脏页既存在于LRU list, Flush list中,LUR列表是用来管理页列表的可用性,而Flush列表是用来管理将页刷新回磁盘,两者互不影响.

重做日志缓冲池:可配置参数innodb_log_buffer_size,默认为8MB,以下三种将缓存池内容刷新到磁盘中的情况:

1) Master Thread每一秒将重做日志缓冲刷新到重做日志中;

2) 每个事务提交时会将重做日志缓冲刷新到重做日志中;

3) 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志中.

Checkpoint技术

两种Checkpoint: Sharp Checkpoint(数据库关闭时将所有脏页刷新会磁盘), Fuzzy Checkpoint.

Fuzzy Checkpoint有以下几种:

Master Thread Checkpoint

FULSH_LRU_LIST Checkpoint

Async/Sync Flush Checkpoint

Dirty Page too much Checkpoint

Master Thread的工作方式

内部分为多个loop: loop, background loop, flush loop, suspend loop;

loop

每秒操作:

日志缓冲刷新到磁盘,即使这个事务还没有提交(总是);

合并插入缓冲(可能);

至多刷新100个脏页到磁盘(可能);

若当前无用户活动,切换到background loop.

每10秒操作:

刷新100个脏页到磁盘;(可能)

合并至多5个插入缓冲;(总是)

将日志缓冲刷新到磁盘;(总是)

删除无用的undo页;(总是)

刷新100个或10个脏页到磁盘(总是).

background loop

删除无用的undo页(总是);

合并20个插入缓冲(总是);

跳出主循环(总是);

不断刷新100个页直到符合条件(可能,跳转到flush loop完成).

1.2.x前增加可选项

innodb_io_capacity

innodb_max_dirty_pages_pct

innodb_adaptive_flushing

innodb_purge_batch_size

1.2.x后改进

Master Thread伪代码:

从Master Thread中分离出刷新脏页的操作至一个单独的Page Cleaner Thread.

InnoDB关键特性

Insert Buffer

适用对象:  非唯一的辅助索引

内部实现:  B+树

Insert/Change Buffer

Double Write

 

Adaptive Hash Index(AHI)

AHI有一个要求:对这个页的连续访问模式必须是一样的

Async IO

 

Flush Neighbor Page

 

转载于:https://www.cnblogs.com/cheungchein/p/8706195.html

你可能感兴趣的文章
使用Unity3D的50个技巧:Unity3D最佳实践
查看>>
中国移动MM Android/OPhone付费SDK--MMBillingSDK,集成问题总结
查看>>
Unity3d + NGUI 的多分辨率适配
查看>>
Unity3D优化之合并网格
查看>>
CVE-2012-4792 Exploit Without HeapSpary
查看>>
文件复制粘贴操作小结
查看>>
Django博客开发-数据建模与样式设定
查看>>
vmware中配置centos7网络
查看>>
AngularJS $timeout和 $interval ,定时器手机验证码倒计时
查看>>
Sublime使用教程(推荐插件安装)
查看>>
tomcat 解析(一)-文件解析
查看>>
关于Bootstrap
查看>>
EditPlus去除拷贝代码前的行号
查看>>
OpenLayers绘制图形
查看>>
tp5集合h5 wap和公众号支付
查看>>
Flutter学习笔记(一)
查看>>
iOS10 国行iPhone联网权限问题处理
查看>>
Objective-C中一种消息处理方法performSelector: withObject:
查看>>
《Cracking the Coding Interview》——第13章:C和C++——题目3
查看>>
LeetCode - Dungeon Game
查看>>