关于mysql:InnoDB-线程模型

31次阅读

共计 872 个字符,预计需要花费 3 分钟才能阅读完成。

Thresh

Master Thread

Master thread 是 InnoDB 的主线程,负责调度其余各线程,优先级最高。

 作用是将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。蕴含:脏页的刷新(page cleaner thread)、undo 页回收(purge thread)、redo 日志刷新(log thread)、合并写缓冲等。

外部有两个主解决,别离是每隔 1 秒和 10 秒解决。

 每 1 秒的操作:刷新日志缓冲区,刷到磁盘
    合并写缓冲区数据,依据 IO 读写压力来决定是否操作
    刷新脏页数据到磁盘,依据脏页比例达到 75% 才操作(innodb_max_dirty_pages_pct,innodb_io_capacity)每 10 秒的操作:刷新脏页数据到磁盘
    合并写缓冲区数据
    刷新日志缓冲区
    删除无用的 undo 页 

IO Thread

在 InnoDB 中应用了大量的 AIO(Async IO)来做读写解决,这样能够极大进步数据库的能。

在 InnoDB1.0 版本之前共有 4 个 IO Thread,别离是 write,read,insert buffer 和 log thread,起初版本将 read thread 和 write thread 别离增大到了 4 个,一共有 10 个了。

read thread:负责读取操作,将数据从磁盘加载到缓存 page 页。write thread:负责写操作,将缓存脏页刷新到磁盘。log thread:负责将日志缓冲区内容刷新到磁盘。insert buffer thread:负责将写缓冲内容刷新到磁盘。

Purge Thread

事务提交之后,其应用的 undo 日志将不再须要,因而须要 Purge Thread 回收曾经调配的 undo 页。

show variables like '%innodb_purge_threads%';

Page Cleaner Thread

作用是将脏数据刷新到磁盘,脏数据刷盘后相应的 redo log 也就能够笼罩,即能够同步数据,又能达到 redo log 循环应用的目标。会调用 write thread 线程解决。

show variables like '%innodb_page_cleaners%';

正文完
 0