暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL中的各种线程

原创 清酒和歌 2020-07-19
1371

概述

在MySQL中,存在有各种各样的线程,每种线程又各有各自的功能
复制

线程划分

我们可以通过show engine innodb status\G来查看mysql中的线程

----------------- BACKGROUND THREAD ----------------- srv_master_thread loops: 4 srv_active, 0 srv_shutdown, 120974 srv_idle srv_master_thread log flush and writes: 120978
复制

首先是主线程,master线程每秒会定时执行一次。
srv_active:主线程active的状态,每当有更新、删除、插入,数据表相关的操作的时候,就会增加
srv_shutdown:在shutdown时增加
srv_idle:线程空闲时增加
log flush and writes:主线程定期刷新redo日志,和参数innodb_flush_log_at_timeout有关,控制刷新时间

-------- FILE I/O -------- I/O thread 0 state: waiting for i/o request (insert buffer thread) I/O thread 1 state: waiting for i/o request (log thread) I/O thread 2 state: waiting for i/o request (read thread) I/O thread 3 state: waiting for i/o request (read thread) I/O thread 4 state: waiting for i/o request (read thread) I/O thread 5 state: waiting for i/o request (read thread) I/O thread 6 state: waiting for i/o request (write thread) I/O thread 7 state: waiting for i/o request (write thread) I/O thread 8 state: waiting for i/o request (write thread) I/O thread 9 state: waiting for i/o request (write thread)
复制

其次是io线程,对于大多数的io线程来说,在刷新到硬盘数据时,都是使用fsync()来同步刷新
这些线程有插入缓冲线程,主要管理内存中的增删改和索引合并数据,在等到一个合适的机会刷新到硬盘。日志缓冲刷新线程,和innodb_flush_log_at_timeout有关。读写的io线程,是最基本的线程

Purge线程:主要用来清理undo log,可以通过参数innodb_purge_threads来设置线程数。在undo表空间满的时候,或无法为当前事物分配undo slot的时候,会执行truncate操作。

最后是刷脏线程,由参数innodb_page_cleaners控制线程数。

总体来说,所有的线程数最好不要超过cpu核心数,否则cpu会进行时间分片,后果就是严重的性能下降

最后修改时间:2020-07-19 21:38:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论