MySQL技术内幕 InnoDB存储引擎内幕 学习笔记(二)InnoDB存储引擎

2.1InnoDB引擎概述

完整支持ACID事务,行锁设计,支持MVCC,支持外键,提供一致性非锁定读。

2.2InnoDB存储引擎的版本

InnoDB各版本功能对比
版本功能
老版本InnoDB(mysql5.1静态编译的InnoDB版本)支持ACID,行锁设计,MVCC
InnoDB 1.0.x (mysql5.1动态编译的InnoDB版本,官方称InnoDB Plugin)

继承了上述版本所有功能,增加了compress和dynamic页格式

注:由于不支持多回滚段,最大支持并发事务数量限制在1023

InnoDB 1.1.x (mysql5.5版本)继承了上述版本所有功能,增加了LinuxAIO,多回滚段
InnoDB 1.2.x  (mysql5.6版本)继承了上述版本所有功能,增加了全文索引支持,在线索引添加

2.3InnoDB体系架构

2.3.1后台线程

InnoDB引擎有多个线程负责处理不同的任务。

1Master Thread(核心):负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新,合并插入缓冲(INSERT BUFFER),UNDO页的回收等。

2IO Thread

InnoDB引擎使用AIO处理IO请求

InnoDB 1.0版本之前共有4个IO Thread,分别是write,read,insert buffer和log。在linux平台,io thread数量不能调整,windows平台下可以通过参数innodb_file_io_threads来增大IO Thread。从InnoDB 1.0.x开始,read thread和write thread分别增大到了4个,并且不再使用innodb_file_io_threads参数,而是分别使用innodb_read_io_threads和innodb_write_io_threads参数设置

可以通过命令show engine innodb status来观察InnoDB中的IO Thread:

3Purge Thread

事务提交后,其所使用的undolog可能不再需要,此时需要Purge Thread来回收已经使用并分配的undo页。在InnoDB 1.1版本之前,purge操作仅在InnoDB存储引擎的Master Thread中完成,从InnoDB 1.1版本开始,purge操作可以独立出单独的线程。

可在配置文件中添加如下命令来启用独立的Purge Thread

注:InnoDB1.1版本只能设置为1,InnoDB1.2支持多个Purge Thread

4Page Cleaner Thread

在InnoDB 1.2.x 版本引入,作用是将之前版本中脏页的刷新操作都放入到单独的线程中来完成。减轻原Master Thread的工作及对于用户查询线程的阻塞,进一步提高InnoDB存储引擎的性能。

2.3.2内存

1缓冲池

InnoDB存储引擎是基于磁盘存储的,其中的记录按照页的方式管理。由于cpu速度和磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能。

读取数据库的页:首先将从磁盘读到的页放在缓冲池中,下次再读取页时先从缓冲池读。

修改数据库中的页:首先修改在缓冲池中的页,然后再以一定的频率(checkpoint机制)刷新到磁盘上。

综上,缓冲池大小直接影响着数据库的整体性能。在32位操作系统最多将该值设置为3G。

2LRU List,Free List,Flush List

3重做日志缓冲

4额外的内存池

2.4Checkpoint技术

2.5Master Thread工作方式

2.6InnoDB关键特性

2.7启动,关闭与恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值