原创

mysql innodb架构

innodb架构主要由:后台线程、内存池、物理文件组成,此处附图一张:


一、后台线程

1)Master Thread

Master Thread 是一个非常核心的线程,主要负责将缓存池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页数据、合并插入缓存、undo页的回收等。

2)IO Thread 

InnoDB 存储引擎大量使用了AIO来处理IO请求,这样可以提高数据库的性能。IO Thread主要负责这些IO请求的回调处理。

涉及参数:innodb_read_id_thread 、innodb_write_io_thread

3)purge Thread 

用来回收已经使用并分配的undo页。 1.1版本之前purge操作在Master Thread中完成,而从1.1版开始,purge操作可以到单独线程中来处理。

涉及参数:innodb_purge_threads 1.1默认为1  不可设置大于1,1,在1.2版可以设置为多个。

4)page thread cleaner 1.2版引入,作用是将脏页的刷新放在单独的线程来执行。

二、内存

1) 缓冲池 innodb_buffer_pool

索引页index page、数据页datat page、undo页、插入缓存 insert buffer、自适应哈希索引、innoDB存储的锁信息 lock info、数据字典

重做日志缓冲池 redo_log_buffer

额外缓冲池 innodb_addition_mem_pool_size

2)LRU(Lastt Recent Used,最近最少使用)

mysql对LRU进行了一些优化,加入了midpoint位置。新读到的页虽然是最新访问的页,但不直接放入LRU列表的首部,而是放在midpoint位置。

正常情况下位置在LRU的列表长度的5/8处。  参数:innodb_old_blocks_pct,该参数设置新页插入LRU列表的百分比。

主要是为了防止访问全部的页把活跃度高的页挤走。

三、物理文件

暂时不讨论了

正文到此结束
Loading...