扩展 MySQL 5.6  /  第 2 章 MySQL 线程

第 2 章 MySQL 线程

MySQL 服务器创建以下线程:

  • 连接管理器线程处理服务器侦听的网络接口上的客户端连接请求。在所有平台上,一个管理器线程处理 TCP/IP 连接请求。在 Unix 上,此管理器线程还处理 Unix 套接字文件连接请求。在 Windows 上,一个管理器线程处理共享内存连接请求,另一个处理命名管道连接请求。服务器不会创建线程来处理它不监听的接口。例如,不支持命名管道连接的 Windows 服务器不会创建线程来处理它们。

  • 连接管理器线程将每个客户端连接与专用于它的线程相关联,该线程处理该连接的身份验证和请求处理。管理器线程在必要时创建一个新线程,但通过首先查询线程缓存以查看它是否包含可用于连接的线程来尽量避免这样做。当连接结束时,如果缓存未满,则将其线程返回到线程缓存。

    有关调整控制线程资源的参数的信息,请参阅连接接口

  • 在源复制服务器上,来自副本服务器的连接像客户端连接一样处理:每个连接的副本有一个线程。

  • 在副本服务器上,启动 I/O 线程以连接到源服务器并从中读取更新。启动一个 SQL 线程以应用从源读取的更新。这两个线程独立运行,可以独立启动和停止。

  • 信号线程处理所有信号。该线程通常还处理警报和调用process_alarm(),以强制空闲时间过长的连接超时。

  • 如果InnoDB使用,默认会有额外的读写线程。这些的数量由 innodb_read_io_threadsinnodb_write_io_threads 参数控制。请参阅InnoDB 启动选项和系统变量

  • 如果使用 编译 mysqld-DUSE_ALARM_THREAD,则会创建处理警报的专用线程。这仅用于某些存在问题的系统,sigwait()或者如果您希望thr_alarm()在没有专用信号处理线程的情况下在应用程序中使用代码。

  • 如果服务器以该 选项启动,则会创建一个专用线程来每秒刷新所有表。 --flush_time=valval

  • 为其发出语句的每个表INSERT DELAYED都有自己的线程。请参阅INSERT DELAYED 语句

  • 如果事件调度程序处于活动状态,则调度程序有一个线程,当前正在运行的每个事件都有一个线程。请参阅 事件调度程序概述

mysqladmin processlist仅显示连接INSERT DELAYED、复制和事件线程。