博客
关于我
MySQL线程状态详解
阅读量:394 次
发布时间:2019-03-05

本文共 5383 字,大约阅读时间需要 17 分钟。

MySQL进程列表解析与线程状态分析

MySQL服务器运行时,后台会有多个线程在执行任务,以确保数据库的稳定性和高效性。这些线程的状态和行为直接影响到数据库的性能和安全性。以下是对MySQL进程列表中各线程状态的详细解析。

1. 进程列表概述

MySQL的进程列表(SHOW PROCESSLIST)显示了当前连接到MySQL服务器的客户端线程和内部线程。每个线程都有独特的标识符(Id),并根据其功能和状态,显示出不同的信息。以下是进程列表中常见的字段解释:

  • Id:由 CONNECTION_ID() 函数返回的连接进程标识符。
  • User:执行语句的MySQL用户名称。"system user"表示内部线程,如主备复制的I/O线程或延迟行处理程序。"unauthenticated user"表示客户端未完成身份验证的连接线程。
  • Host:客户端连接的主机名或IP地址(根据配置显示端口或IP:port格式)。
  • Db:客户端连接的默认数据库名称(NULL表示未指定数据库)。
  • Command:线程正在执行的命令类型或状态。
  • Time:线程处于当前状态的时间(以秒为单位)。
  • State:线程的当前状态或操作提示。
  • Info:线程正在执行的具体语句或操作。

2. 命令类型解析

进程列表中的Command字段反映了线程执行的具体命令类型。以下是常见命令及其描述:

  • Binlog Dump:主库线程将二进制日志内容发送到从库。
  • Change user:执行更改用户或权限的操作。
  • Close stmt:关闭预编译语句。
  • Connect:从库连接到主库。
  • Connect Out:从库正在尝试连接到主库。
  • Create DB:执行创建数据库的操作。
  • Daemon:内部线程,不是客户端连接的线程。
  • Debug:生成调试信息。
  • Delayed insert:延迟插入处理程序的线程。
  • Drop DB:执行删除数据库的操作。
  • Execute:执行预编译语句。
  • Fetch:从结果集中读取数据。
  • Field List:检索表的列信息。
  • Init DB:选择默认数据库。
  • Kill:终止其他线程。
  • Long Data:处理大字段类型的数据。
  • Ping:处理服务器ping请求。
  • Prepare:预编译语句。
  • Processlist:生成进程列表信息。
  • Query:执行查询语句。
  • Quit:线程终止。
  • Refresh:刷新表数据或缓存。
  • Register Slave:注册从库。
  • Reset stmt:重置预编译语句。
  • Set option:设置或重置语句执行选项。
  • Shutdown:关闭MySQL服务器。
  • Sleep:等待客户端发送新语句。
  • Statistics:生成服务器状态信息。
  • Table Dump:将表数据发送到从库。

3. 用户线程状态详解

用户线程的状态反映了其在执行操作时的具体阶段。以下是常见状态及其描述:

  • After create:线程完成创建表操作(包括临时表)。
  • Analyzing:执行ANALYZE TABLE语句。
  • checking permissions:验证执行权限。
  • Checking table:执行表检查操作。
  • cleaning up:释放内存和重置状态变量。
  • closing tables:刷新表数据到磁盘并关闭表。
  • converting HEAP to MyISAM:将内部临时表从HEAP转换为MyISAM。
  • copy to tmp table:执行ALTER TABLE语句,复制旧表数据到新表。
  • Copying to group table:处理GROUP BY和ORDER BY的排序和复制。
  • Copying to tmp table:将数据复制到内存临时表。
  • altering table:执行in-place ALTER TABLE操作。
  • Copying to tmp table on disk:将数据复制到磁盘临时表以节省内存。
  • Creating index:执行ALTER TABLE…ENABLE KEYS语句。
  • Creating sort index:执行SELECT语句时使用内部临时表。
  • creating table:创建表(包括临时表)。
  • Creating tmp table:创建内存或磁盘临时表。
  • committing alter table to storage engine:完成ALTER TABLE操作。
  • deleting from main table:执行多表删除的第一部分。
  • deleting from reference tables:执行多表删除的第二部分。
  • discard_or_import_tablespace:执行ALTER TABLE…DISCARD TABLESPACE或IMPORT TABLESPACE语句。
  • end:语句执行结束前,清除相关状态变量。
  • executing:正在执行语句中的操作。
  • Execution of init_command:执行初始化系统变量的语句。
  • freeing items:释放查询缓存中的项。
  • FULLTEXT initialization:准备执行自然语言全文搜索。
  • init:执行ALTER TABLE、DELETE、INSERT、SELECT或UPDATE操作前的初始化状态。
  • Killed:线程被kill操作终止。
  • logging slow query:向慢查询日志写入语句。
  • login:连接线程的初始状态。
  • manage keys:启用或禁用表索引。
  • NULL:显示在SHOW PROCESSLIST中使用的特殊状态。
  • Opening tables:尝试打开表,可能因锁定或其他阻止。
  • optimizing:执行查询优化阶段。
  • preparing:执行查询优化前的准备阶段。
  • Purging old relay logs:删除不需要的中继日志文件。
  • query end:执行查询语句结束前。
  • Reading from net:从网络读取数据包(MySQL 5.7.8后为Receiving from client)。
  • Removing duplicates:执行SELECT DISTINCT语句时的重复行删除。
  • removing tmp table:执行SELECT语句后删除内部临时表。
  • rename:执行RENAME TABLE语句。
  • rename result table:执行ALTER TABLE RENAME语句。
  • Reopen tables:获得表锁后,发现表结构已更改,需重新打开表。
  • Repair by sorting:使用排序修复索引。
  • preparing for alter table:准备执行in-place ALTER TABLE语句。
  • Repair done:MyISAM表多线程修复完成。
  • Repair with keycache:使用keycache逐个创建索引。
  • Rolling back:执行事务回滚。
  • Saving state:将MyISAM表状态保存到.MYI文件。
  • Searching rows for update:执行UPDATE操作的首阶段。
  • Sending data:读取和处理SELECT语句生成的数据行。
  • Sending to client:向客户端写入数据包(MySQL 5.7.8后为Sending to client)。
  • setup:执行ALTER TABLE操作。
  • Sorting for group:执行GROUP BY排序。
  • Sorting for order:执行ORDER BY排序。
  • Sorting index:优化MyISAM表访问性能。
  • Sorting result:执行SELECT语句时的非临时表排序。
  • statistics:生成服务器状态信息。
  • System lock:调用mysql_lock_tables()获取或等待表锁。
  • update:准备执行UPDATE操作。
  • Updating:搜索并更新数据行。
  • updating main table:执行多表更新的第一部分。
  • updating reference tables:执行多表更新的第二部分。
  • User lock:请求或等待通过GET_LOCK()获得建议锁。
  • User sleep:调用SLEEP()函数。
  • Waiting for commit lock:执行FLUSH TABLES WITH READ LOCK获取提交锁。
  • Waiting for global read lock:执行FLUSH TABLES WITH READ LOCK获取全局读锁。
  • Waiting for tables:表结构已更改,需重新打开表。
  • Waiting for lock_type lock:等待获得特定类型的MDL锁。
  • Waiting on cond:等待条件变为true的通用状态。
  • Writing to net:向网络写入数据包(MySQL 5.7.8后为Sending to client)。

4. 从库I/O线程状态

从库的I/O线程负责接收主库发送的二进制日志事件并写入中继日志。常见状态包括:

  • Checking master version:连接到主库后,检查主库版本号。
  • Connecting to master:尝试连接到主库。
  • Queueing master event to the relay log:将事件复制到中继日志。
  • Reconnecting after a failed binlog dump request:二进制日志dump请求失败后重新连接主库。
  • Registering slave on master:连接成功后,注册从库信息。
  • Requesting binlog dump:向主库请求二进制日志内容。
  • Waiting for its turn to commit:启用slave_preserve_commit_order时,等待旧事务提交。
  • Waiting for master to send event:等待主库发送新的二进制日志事件。
  • Waiting for master update:连接到主库之前的初始状态。
  • Waiting for slave mutex on exit:线程停止时回收互斥资源。
  • Waiting to reconnect after a failed master event read:读取主库二进制日志时失败后,尝试重新连接主库。

5. SQL线程状态

SQL线程负责处理从库接收到的事件并执行。常见状态包括:

  • Killing slave:处理STOP SLAVE语句。
  • Making temporary file (append):执行LOAD DATA INFILE并将数据添加到临时文件。
  • Making temporary file (create):创建临时文件以备LOAD DATA INFILE使用。
  • Reading event from the relay log:从中继日志读取事件。
  • Slave has read all relay log:完成所有中继日志事件重放。
  • Waiting for an event from Coordinator:多线程复制环境下,等待协调器分配事件。
  • Waiting for slave mutex on exit:线程停止时回收互斥资源。
  • Waiting for Slave Workers to free pending events:协调器未分配事件给工作者线程。
  • Waiting until MASTER_DELAY seconds after master executed event:等待主库执行事件后设置的延迟时间失效。

6. 主从连接线程状态

主从连接线程负责建立和维持主库与从库的通信。常见状态包括:

  • Changing master:处理CHANGE MASTER TO语句。
  • Killing slave:处理STOP SLAVE语句。
  • Opening master dump table:创建主库dump表。
  • Reading master dump table data:从主库dump表读取数据。
  • Rebuilding the index on master dump table:重建主库dump表索引。

7. 事件调度线程状态

事件调度线程负责定期执行预定义的SQL任务。常见状态包括:

  • Clearing:停止执行事件。
  • Initialized:调度程序初始化完成。
  • Waiting for next activation:等待事件队列中的事件激活。
  • Waiting for scheduler to stop:发送命令关闭调度程序。
  • Waiting on empty queue:调度程序事件队列为空。

通过对以上状态的了解和分析,可以更好地监控和管理MySQL服务器的运行状态,及时发现潜在问题并采取相应措施。

转载地址:http://wnrwz.baihongyu.com/

你可能感兴趣的文章
NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
查看>>
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>
node exporter完整版
查看>>
Node JS: < 一> 初识Node JS
查看>>
Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
查看>>
Node 裁切图片的方法
查看>>
Node+Express连接mysql实现增删改查
查看>>
node, nvm, npm,pnpm,以前简单的前端环境为什么越来越复杂
查看>>
Node-RED中Button按钮组件和TextInput文字输入组件的使用
查看>>
Node-RED中Switch开关和Dropdown选择组件的使用
查看>>
Node-RED中使用html节点爬取HTML网页资料之爬取Node-RED的最新版本
查看>>
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>
Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
查看>>
Node-RED中使用range范围节点实现从一个范围对应至另一个范围
查看>>
Node-RED中实现HTML表单提交和获取提交的内容
查看>>