mysql学习笔记02-InnoDB基础知识

本文详细介绍了InnoDB存储引擎的不同版本及其功能演进,从innodb1.0.x到1.2.x,涵盖ACID特性、行锁设计、MVCC、压缩及动态页格式等。同时,深入探讨了InnoDB的体系架构,包括后台线程如master thread、IO thread、purge thread和page cleaner thread的工作机制,以及缓冲池的管理方式,如LRU算法和midpoint位置的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本情况

innodb1.0.x 支持ACID、行锁设计、MVCC,增加compress和dynamic页格式,对应mysql5.1版本

innodb1.1.x 继承上述所有功能,增加了LinuxAIO、多回滚段,对应mysql5.5版本

innodb1.2.x继承上述所有功能,新增全文索引、在线索引,对应mysql5.6版本

innodb体系架构

mysql实例(innodb)由一大块内存和后台处理线程组成(类似Oracle实例)。

后台线程:

1. master thread:负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性。

2. IO thread:使用AIO来处理IO请求。负责处理IO请求的回调,包括write、read、insert buffer、log 4种类型的IO线程。

3. purge thread:事务提交或回滚后负责回收undo页,通过参数innodb_purge_threads参数配置。

4. page cleaner thread:innodb1.2引入,负责将脏页持久化到磁盘。

内存区域:

缓冲池

可通过innodb_buffer_pool_size参数配置。show variables like 'innodb_buffer_pool_size'

主要包括索引页、数据页、插入缓冲区、自适应哈希索引、锁信息、数据字典信息。

innodb1.0.x开始,允许有多个缓冲池实例,根据页的hash值平均分配到不同的缓冲池中。通过参数innodb_buffer_pool_instances来配置,通过show engine innodb status查看。

在mysql5.6后可以在information_schema架构下的变innodb_buffer_pool_status查询缓冲区状态。

在innodb中,缓冲池中的页大小默认为16kb,使用LRU算法进行管理,它在LRU列表中加入了midpoint位置,这个位置由参数innodb_old_blocks_pct控制。新读取的页不是保存在LRU首部,而是midpoint处。midpoint之后的列表叫old列表,之前的为new列表,表示热点数据。

未完待续

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值