MySQL线程

MySQL服务端是多线程软件,它的每个组件都使用线程。

  • 可以是后台线程,由主线程或存储引擎创建的;

  • 也可以是为用户连接创建的前台线程

每个线程至少有两个唯一标识符:一个是操作系统线程ID,另一个是MySQL内部线程ID

  • 操作系统线程ID可以通过相关工具查看,例如在Linux系统中可使用ps -efL命令查看。

  • 而MySQL内部线程ID在大多数performance_schema 表中以 THREAD_ID 命名。

  • 此外,每个前台线程都有一个指定的 PROCESSLIST_ID :连接标识符。在 SHOW PROCESSLIST 命令输出中,或在 MySQL 命令行客户端连接成功的提示信息中可以看到(Your MySQL connection id is 25)。

提示

performance_schema中的 threads 包含了服务器中存在的所有线程

SELECT
    name,
    thread_os_id,
    thread_id,
    processlist_id
FROM threads
ORDER BY processlist_id DESC ;

+--------------------------------+------------+---------+--------------+
|name                            |thread_os_id|thread_id|processlist_id|
+--------------------------------+------------+---------+--------------+
|thread/sql/one_connection       |7248        |51       |25            |
|thread/sql/one_connection       |14216       |50       |24            |
|thread/sql/compress_gtid_table  |6116        |26       |1             |
|thread/sql/main                 |4800        |1        |NULL          |
|thread/sql/thread_timer_notifier|5376        |2        |NULL          |
|thread/innodb/io_ibuf_thread    |5428        |3        |NULL          |
|thread/innodb/io_read_thread    |5436        |4        |NULL          |
|thread/innodb/io_log_thread     |5432        |5        |NULL          |
|thread/innodb/io_read_thread    |5448        |6        |NULL          |
|thread/innodb/io_read_thread    |5444        |7        |NULL          |
+--------------------------------+------------+---------+--------------+

最后更新于