版本情况
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列表,表示热点数据。
未完待续