mysql主要后台线程介绍说明

本文详细介绍了InnoDB存储引擎中的各类线程,包括masterthread、insertbufferthread、readthread、writethread、logthread、purgethread、lockthread及错误监控线程的功能与职责。同时,展示了如何通过showengineinnodbstatus命令查看这些线程的实时状态。

 

线程名称说明
master thread主要负责将合并也脏缓存页刷到数据文件,执行purge操作,触发检查点,合并插入缓冲区等;
insert buffer thread主要负责插入缓冲区的合并操作;
read thread负责数据库读取操作,可以配置多个读线程;
write thread负责数据库的写操作,可以配置多个写线程;
log thread用于将重做日志文件刷新到logfile中;
purge threadmysql5.5之后用单独的purge thread 执行purge操作;
lock thread负责锁控制和死锁检测等;
错误监控线程主要负责错误监控和错误处理;


 

通过show engine innodb status 命令查看线程的状态;


=====================================
2019-09-06 10:37:06 0x7f18c3fbe700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 12 seconds
--------
FILE I/O
--------
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
I/O thread 2 state: waiting for completed aio requests (read thread)
I/O thread 3 state: waiting for completed aio requests (read thread)
I/O thread 4 state: waiting for completed aio requests (read thread)
I/O thread 5 state: waiting for completed aio requests (read thread)
I/O thread 6 state: waiting for completed aio requests (write thread)
I/O thread 7 state: waiting for completed aio requests (write thread)
I/O thread 8 state: waiting for completed aio requests (write thread)
I/O thread 9 state: waiting for completed aio requests (write thread)
Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,
 ibuf aio reads:, log i/o's:, sync i/o's:
Pending flushes (fsync) log: 0; buffer pool: 0
7220497 OS file reads, 1072100 OS file writes, 191589 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s

----------------------------
END OF INNODB MONITOR OUTPUT
============================
 |


 

MySQL 数据库中并没有直接提供 `SHOW BACKGROUND THREADS` 这样的命令来查看后台线程信息。不过,可以通过其他方式获取与线程相关的信息,尤其是通过 `SHOW PROCESSLIST` 命令和 `INFORMATION_SCHEMA` 中的 `PROCESSLIST` 表来查看当前活动的线程。 ### 查看当前连接线程 使用 `SHOW PROCESSLIST` 命令可以列出当前所有活跃的线程,包括每个线程的 ID(即 `PROCESSLIST_ID`),这个 ID 也可以通过 `SELECT CONNECTION_ID()` 函数获取[^2]。 ```sql SHOW PROCESSLIST; ``` 该命令返回的结果中包含以下关键字段: - **Id**:线程的唯一标识符,也称为连接 ID。 - **User**:发起连接的用户。 - **Host**:客户端的主机名或 IP 地址。 - **db**:当前连接使用的数据库。 - **Command**:线程正在执行的命令类型。 - **Time**:线程处于当前状态的时间(秒数)。 - **State**:线程的当前状态。 - **Info**:正在执行的 SQL 语句(如果有的话)。 ### 查询 INFORMATION_SCHEMA 获取线程信息 除了 `SHOW PROCESSLIST`,还可以通过查询 `INFORMATION_SCHEMA` 数据库中的 `PROCESSLIST` 表来获取类似的线程信息: ```sql SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST; ``` 此查询返回的结果结构与 `SHOW PROCESSLIST` 相同,并且可以与其他 SQL 查询结合使用以进行更复杂的分析。 ### 后台线程与系统线程 需要注意的是,MySQL 内部还有一些后台线程用于管理诸如 InnoDB 存储引擎、复制、日志刷新等任务。这些线程通常不显示在 `SHOW PROCESSLIST` 的结果中,因为它们不是由客户端连接触发的。要查看这些系统级别的线程,通常需要依赖操作系统的工具(如 `ps` 或 `top`)或者 MySQL 的性能模式(Performance Schema)。 启用 Performance Schema 后,可以通过如下方式查看内部线程: ```sql SELECT * FROM performance_schema.threads; ``` 这将列出所有 MySQL 线程,包括后台系统线程,提供线程 ID、类型、名称等详细信息。 ### 杀死某个线程 如果发现某个线程阻塞了其他操作或导致性能问题,可以使用 `KILL` 命令终止它。例如: ```sql KILL <processlist_id>; ``` 其中 `<processlist_id>` 是从 `SHOW PROCESSLIST` 或 `INFORMATION_SCHEMA.PROCESSLIST` 查询中获得的线程 ID。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值