400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

MysqlInnodb体系结构-创新互联

创新互联建站是一家集网站建设,洪湖企业网站建设,洪湖品牌网站建设,网站定制,洪湖网站建设报价,网络营销,网络优化,洪湖网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

Innodb体系结构

内存

缓冲池
LRU、Free List、Flush List
redo log buffer

redo log先都写入该buffer,而后按一定频率刷新到磁盘(1s/次),默认8M。其刷到磁盘主要一下几个情况:

  1. Master Thread每秒执行一次。

  2. 事物提交时。

  3. redo log buffer剩余空间小于1/2。

额外的内存池

对一些数据结构本身的内存分配是从额外内存池分配。


线程

Master Thread

负责将缓存池中的数据异步刷新到磁盘,包括脏页。合并插入缓存(INSERT BUFFER)、UNDO页的回收等。

IO Thread

Innodb中大量使用AIO处理写请求,IO Thread则主要处理这些请求的回调,包括write、read、insert buffer和log IO Thread。

Purge Thread

主要用来回收undo log,Innodb1.1之前由Master Thread负责。

Page Cleaner Thread

清理已提交事物的UNDO log。


Checkpoint

事务型数据库一般采用Write Ahead Log策略,当事物提交时先写redo log而后修改内存中的页。当数据库宕机对于还未写入磁盘的修改数据可以通过redo log恢复。Checkpoint作用在于保证该点之前的所有修改的页均已刷新到磁盘,这之前的redo log在恢复数据时可以不需要了。

Sharp Checkpoint

发生在数据库关闭时,将所有脏页写入磁盘,数据库运行时一般不使用。

Fuzzy Checkpoint

只刷新部分部分脏页。

  1. Master Thread Checkpoint:Master Thread异步已一定频率刷新一定比例脏页。

  2. Flush_LRU_LIST Checkpoint:为了保证LRU中有一定数量的空闲页,Page Clear Thread将对LRU中尾端页进行移除,如果存在脏页则做刷新。

  3. Async/Sync Flush Checkpoint:为了保证redo log循环使用(覆盖),对于需要将redo文件中不可用的脏页进行刷新到磁盘。

  4. Dirty Page too much Checkpoint:脏页数量太多。


Master Thread工作方式

Innodb 1.2.x之前

主要包括主loop、background loop、flush loop和suspend loop。其中的参数可以配置。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

while(true){

//差不多1s一次

for(int iin 0..9){

刷新日志缓存到磁盘

//1s内的统计值

if IO < 5

合并插入缓存

if 脏页比例 > 预定值

刷新部分脏页(不超过100)

if  没有用户活动

进入background loop{

删除无用undo页

合并20个插入缓冲

可能跳到flush loop{

可能跳到suspend loop

}

跳回主loop

}

sleep 1s;

}

//差不多10s一次

if IO < 200//10s内

刷新100个脏页到磁盘

合并最多5个插入缓冲

刷新日志缓冲

删除无用undo

刷新100或10个脏页

}

Innodb 1.2.x

Master Thread中的脏页刷新功能完全由Page Cleaner Thread执行。

+ View Code

nnodb关键特性

插入缓冲
  1. 对应的索引页被读入缓冲池。

  2. 对应的索引页的可用空间小于1/32,则强制进行合并。

  3. Master Thread中的合并插入缓冲。

两次写

在对脏页刷新到磁盘时,如果某一页还没写完就宕机,此时该页数据已经混乱无法通过redo实现恢复。innodb提供了doublewrite机制,其刷新脏页步骤如下:

1

2

3

1. 先将脏页数据复制到doublewrite buffer中(2MB内存)

2. 将doublewrite buffer分两次,每次1MB写入到doublewrite磁盘(2MB)中。

3. 马上同步脏页数据到磁盘。对于数据混乱的页则可以从doublewrite中读取到,该页写到共享表空间。

自适应哈希索引

InnoDB存储引擎会监控对表上索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引,所以称之为自适应(adaptive) 的。自适应哈希索引通过缓冲池的B+树构造而来,因此建立的速度很快。而且不需要将整个表都建哈希索引,InnoDB存储引擎会自动根据访问的频率和模式 来为某些页建立哈希索引。

异步IO

linux和windows中提供异步IO,其可以对连续的页做合并连续页的IO操作使随机IO变顺序IO。

刷新邻接页

刷新页时判断相邻页是否也是脏页。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:MysqlInnodb体系结构-创新互联
路径分享:http://www.bluegullmedia.com/article/dcjsdg.html

其他资讯

让你的专属顾问为你服务

0.0908s