processlist中状态详解

2023-05-16

在processlist中,看到哪些运行状态时要引起关注,主要有下面几个:

状态建议
copy to tmp table执行ALTER TABLE修改表结构时建议:放在凌晨执行或者采用类似pt-osc工具
Copying to tmp table拷贝数据到内存中的临时表,常见于GROUP BY操作时建议:创建适当的索引
Copying to tmp table on disk临时结果集太大,内存中放不下,需要将内存中的临时表拷贝到磁盘上,形成 #sql***.MYD、#sql***.MYI(在5.6及更高的版本,临时表可以改成InnoDB引擎了,可以参考选项default_tmp_storage_engine建议:创建适当的索引,并且适当加大sort_buffer_size/tmp_table_size/max_heap_table_size
Creating sort index当前的SELECT中需要用到临时表在进行ORDER BY排序建议:创建适当的索引
Creating tmp table创建基于内存或磁盘的临时表,当从内存转成磁盘的临时表时,状态会变成:Copying to tmp table on disk建议:创建适当的索引,或者少用UNION、视图(VIEW)、子查询(SUBQUERY)之类的,确实需要用到临时表的时候,可以在session级临时适当调大 tmp_table_size/max_heap_table_size 的值
Reading from net表示server端正通过网络读取客户端发送过来的请求建议:减小客户端发送数据包大小,提高网络带宽/质量
Sending data从server端发送数据到客户端,也有可能是接收存储引擎层返回的数据,再发送给客户端,数据量很大时尤其经常能看见备注:Sending Data不是网络发送,是从硬盘读取,发送到网络是Writing to net

 

建议:通过索引或加上LIMIT,减少需要扫描并且发送给客户端的数据量

Sorting result正在对结果进行排序,类似Creating sort index,不过是正常表,而不是在内存表中进行排序建议:创建适当的索引
statistics进行数据统计以便解析执行计划,如果状态比较经常出现,有可能是磁盘IO性能很差建议:查看当前io性能状态,例如iowait
Waiting for global read lockFLUSH TABLES WITH READ LOCK整等待全局读锁建议:不要对线上业务数据库加上全局读锁,通常是备份引起,可以放在业务低谷期间执行或者放在slave服务器上执行备份
Waiting for tables,Waiting for table flushFLUSH TABLES, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE等需要刷新表结构并重新打开建议:不要对线上业务数据库执行这些操作,可以放在业务低谷期间执行
Waiting for lock_type lock等待各种类型的锁:• Waiting for event metadata lock• Waiting for global read lock• Waiting for schema metadata lock• Waiting for stored function metadata lock• Waiting for stored procedure metadata lock• Waiting for table level lock• Waiting for table metadata lock• Waiting for trigger metadata lock建议:比较常见的是上面提到的global read lock以及table metadata lock,建议不要对线上业务数据库执行这些操作,可以放在业务低谷期间执行。如果是table level lock,通常是因为还在使用MyISAM引擎表,赶紧转投InnoDB引擎吧,别再老顽固了

更多详情可参考官方手册:8.14.2 General Thread States

 

8.14.2通用线程状态

下表描述了State 与常规查询处理而非更专门的活动(如复制)相关联的线程值。其中许多仅用于发现服务器中的错误。

  • After create

    当线程在创建表的函数的末尾创建表(包括内部临时表)时,会发生这种情况。即使由于某些错误而无法创建表,也会使用此状态。

  • altering table

    服务器正在执行就地服务 ALTER TABLE

  • Analyzing

    该线程正在计算MyISAM表键分布(例如for ANALYZE TABLE)。

  • checking permissions

    线程正在检查服务器是否具有执行该语句所需的特权。

  • Checking table

    线程正在执行表检查操作。

  • cleaning up

    该线程已处理一个命令,并准备释放内存并重置某些状态变量。

  • closing tables

    线程正在将已更改的表数据刷新到磁盘并关闭已使用的表。这应该是一个快速的操作。如果没有,请验证您没有完整的磁盘,并且磁盘使用率不是很高。

  • committing alter table to storage engine

    服务器已就地完成 ALTER TABLE并提交结果。

  • converting HEAP to MyISAM

    线程正在将内部临时表从 MEMORY表转换为磁盘 MyISAM表。

  • copy to tmp table

    线程正在处理一条ALTER TABLE语句。在创建具有新结构的表之后但在将行复制到表中之前,将发生此状态。

  • Copying to group table

    如果语句具有不同的条件ORDER BY和 GROUP BY条件,则行将按组排序并复制到临时表中。

  • Copying to tmp table

    服务器正在复制到内存中的临时表。

  • Copying to tmp table on disk

    服务器正在复制到磁盘上的临时表。临时结果集太大(请参见 第8.4.4节“ MySQL中的内部临时表使用”)。因此,线程将临时表从内存中更改为基于磁盘的格式,以节省内存。

  • Creating index

    线程正在处理ALTER TABLE ... ENABLE KEYS一个MyISAM表。

  • Creating sort index

    线程正在处理 SELECT使用内部临时表解析的。

  • creating table

    该线程正在创建一个表。这包括创建临时表。

  • Creating tmp table

    该线程正在内存或磁盘上创建一个临时表。如果该表是在内存中创建的,但后来又转换为磁盘表,则该操作期间的状态将为Copying to tmp table on disk

  • deleting from main table

    服务器正在执行多表删除的第一部分。它仅从第一个表中删除,并保存要用于从其他(参考)表中删除的列和偏移量。

  • deleting from reference tables

    服务器正在执行多表删除的第二部分,并从其他表中删除匹配的行。

  • discard_or_import_tablespace

    线程正在处理ALTER TABLE ... DISCARD TABLESPACEor ALTER TABLE ... IMPORT TABLESPACE语句。

  • end

    这发生在结束,但的清理之前 ALTER TABLE, CREATE VIEW, DELETE, INSERT, SELECT,或 UPDATE语句。

  • executing

    该线程已开始执行一条语句。

  • Execution of init_command

    线程正在使用init_command系统变量的值执行语句 。

  • freeing items

    线程已执行命令。在此状态下完成的一些项目释放涉及查询缓存。此状态通常后跟cleaning up

  • FULLTEXT initialization

    服务器正在准备执行自然语言的全文本搜索。

  • init

    出现这种情况的初始化之前 ALTER TABLE, DELETE, INSERT, SELECT,或 UPDATE语句。服务器在此状态下采取的操作包括刷新二进制日志,InnoDB日志和一些查询缓存清除操作。

    对于end状态,可能发生以下操作:

    • 更改表中的数据后删除查询缓存条目

    • 将事件写入二进制日志

    • 释放内存缓冲区,包括用于blob的缓冲区

  • Killed

    有人KILL 向该线程发送了一条语句,下次检查kill标志时,它应该中止。在MySQL的每个主循环中都检查该标志,但是在某些情况下,线程死亡可能仍需要很短的时间。如果该线程被某个其他线程锁定,则杀死操作将在另一个线程释放其锁定后立即生效。

  • logging slow query

    线程正在将一条语句写入慢速查询日志。

  • login

    连接线程的初始状态,直到客户端已成功通过身份验证。

  • manage keys

    服务器正在启用或禁用表索引。

  • NULL

    此状态用于SHOW PROCESSLIST状态。

  • Opening tables

    线程正在尝试打开表。除非有什么阻止打开的步骤,否则这应该是非常快速的过程。例如,一个ALTER TABLE或 LOCK TABLE语句可以阻止打开表,直到该语句完成为止。还值得检查您的table_open_cache价值是否足够大。

  • optimizing

    服务器正在对查询执行初始优化。

  • preparing

    此状态在查询优化期间发生。

  • preparing for alter table

    服务器正在准备执行就地 ALTER TABLE

  • Purging old relay logs

    该线程正在删除不需要的中继日志文件。

  • query end

    此状态在处理查询之后但在该freeing items状态之前发生 。

  • Reading from net

    服务器正在从网络读取数据包。

  • Removing duplicates

    查询的使用 SELECT DISTINCT方式使得MySQL无法在早期阶段优化独特的操作。因此,MySQL需要一个额外的阶段来删除所有重复的行,然后再将结果发送给客户端。

  • removing tmp table

    线程在处理SELECT 语句后正在删除内部临时表。如果没有创建临时表,则不使用此状态。

  • rename

    线程正在重命名表。

  • rename result table

    该线程正在处理一条ALTER TABLE语句,已经创建了新表,并且正在重命名它以替换原始表。

  • Reopen tables

    线程获得了该表的锁,但在获得该锁后注意到底层表结构已更改。它释放了锁,关闭了表,并试图重新打开它。

  • Repair by sorting

    修复代码正在使用某种排序来创建索引。

  • Repair done

    该线程已完成对MyISAM表的多线程修复 。

  • Repair with keycache

    修复代码正在通过密钥缓存一一创建密钥。这比慢得多Repair by sorting

  • Rolling back

    线程正在回滚事务。

  • Saving state

    对于MyISAM表操作(例如修复或分析),线程会将新表状态保存到.MYI文件头。状态包括行数, AUTO_INCREMENT计数器和键分布等信息。

  • Searching rows for update

    该线程正在执行第一个阶段,以在更新所有匹配的行之前找到它们。如果 UPDATE更改了用于查找所涉及行的索引,则必须执行此操作。

  • Sending data

    线程正在读取和处理SELECT语句的行 ,并将数据发送到客户端。因为在此状态下发生的操作往往会执行大量磁盘访问(读取),所以它通常是给定查询生命周期中运行时间最长的状态。

  • setup

    线程正在开始ALTER TABLE操作。

  • Sorting for group

    线程正在做某种排序以满足GROUP BY

  • Sorting for order

    线程正在做某种排序以满足ORDER BY

  • Sorting index

    该线程正在对索引页进行排序,以在MyISAM表优化操作期间更有效地进行访问。

  • Sorting result

    对于SELECT语句,这与相似Creating sort index,但对于非临时表。

  • statistics

    服务器正在计算统计信息以制定查询执行计划。如果线程长时间处于此状态,则服务器可能是磁盘绑定的,正在执行其他工作。

  • System lock

    从此线程已被调用mysql_lock_tables() ,并且线程状态尚未更新。这是一种非常普遍的状态,可能由于多种原因而发生。

    例如,线程将要请求或正在等待表的内部或外部系统锁定。InnoDB在执行期间等待表级锁定时, 可能会发生这种情况LOCK TABLES。如果此状态是由对外部锁的请求引起的,并且您没有使用正在访问同一 表的多个mysqld服务器,则MyISAM可以使用该--skip-external-locking 选项禁用外部系统锁 。但是,默认情况下禁用外部锁定,因此此选项可能无效。对于 SHOW PROFILE,此状态表示线程正在请求锁定(不等待它)。

  • update

    线程已准备好开始更新表。

  • Updating

    线程正在搜索要更新的行,并且正在更新它们。

  • updating main table

    服务器正在执行多表更新的第一部分。它仅更新第一个表,并保存要用于更新其他(参考)表的列和偏移量。

  • updating reference tables

    服务器正在执行多表更新的第二部分,并从其他表更新匹配的行。

  • User lock

    该线程将要请求或正在等待通过GET_LOCK()调用请求的咨询锁定 。对于 SHOW PROFILE,此状态表示线程正在请求锁定(不等待它)。

  • User sleep

    该线程已调用 SLEEP()

  • Waiting for commit lock

    FLUSH TABLES WITH READ LOCK 正在等待提交锁。

  • Waiting for global read lock

    FLUSH TABLES WITH READ LOCK 正在等待全局读取锁定或read_only正在设置全局 系统变量。

  • Waiting for tables

    线程收到通知,表明表的基础结构已更改,因此需要重新打开表以获取新结构。但是,要重新打开该表,它必须等待,直到所有其他线程关闭了该表。

    这张告示,如果另一个线程使用的地方 FLUSH TABLES或有问题的表下面的语句之一: , , , , ,或 。 FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE

  • Waiting for table flush

    该线程正在执行FLUSH TABLES并正在等待所有线程关闭其表,或者该线程收到有关表的基础结构已更改的通知,并且需要重新打开表以获取新结构。但是,要重新打开该表,它必须等待,直到所有其他线程关闭了该表。

    这张告示,如果另一个线程使用的地方 FLUSH TABLES或有问题的表下面的语句之一: , , , , ,或 。 FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE

  • Waiting for lock_type lock

    服务器正在等待THR_LOCK从元数据锁定子系统获取 锁或锁,其中 lock_type指示了锁的类型。

    此状态表示正在等待 THR_LOCK

    • Waiting for table level lock

    这些状态指示等待元数据锁定:

    • Waiting for event metadata lock

    • Waiting for global read lock

    • Waiting for schema metadata lock

    • Waiting for stored function metadata lock

    • Waiting for stored procedure metadata lock

    • Waiting for table metadata lock

    • Waiting for trigger metadata lock

    有关表锁定指示器的信息,请参见 第8.11.1节“内部锁定方法”。有关元数据锁定的信息,请参见第8.11.4节“元数据锁定”。

  • Waiting on cond

    线程正在等待条件变为真的一般状态。没有特定的状态信息。

  • Writing to net

    服务器正在将数据包写入网络。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

processlist中状态详解 的相关文章

随机推荐

  • 手机投屏到电脑(以win10系统为例)

    总目录 文章目录 总目录前言一 电脑设置1 安装无线显示器2 完成投影偏好设置3 启动连接应用 二 手机设置三 优缺点分析总结 前言 手机投屏到电脑个人实操记录 一 电脑设置 1 安装无线显示器 首先win 43 i 进入设置 xff0c
  • 关于 nginx 配置ssl 无法访问,解决过程

    1 单独访问 以IP 43 端口的形式访问或 接口查看是否通 这是验证自己的服务或接口没有问题 2 单独以最简单的形式启动nginx 记住是最简单 xff0c 没有多余配置 xff0c 都是默认的 这是验证nginx启动没有问题 3 检查端
  • 1、FreeRTOS使用,Main函数中需要做的事情

    1 硬件初始化 xff08 也可以放在SystemInit中 xff09 时钟初始化 中断优先级分组 中断优先级分配 xff08 设置 xff09 外设初始化 xff08 时钟 xff0c GPIO xff0c 配置参数 xff0c 是否使
  • ubuntu22.04系统配置(一)(后续有kali的配置)

    ubuntu22 04系统配置深度学习 xff08 一 xff09 xff08 后续有kali的配置 xff09 摘要系统下载以及U盘拷贝系统的基本配置nvidia smi 摘要 配置这个东西真的踩了好多坑 xff0c 之前一直用的Wind
  • GINet:Graph Interaction Network for Scene Parsing(ECCV 2020)详解

    论文地址 xff1a https arxiv org pdf 2009 06160 pdf 一 背景 Scene Parsing 任务属于语义分割的一个分支 xff0c 也是把每个像素点分成一个具体的语义类别 xff0c 它和常见的语义分割
  • C++ string切割,分解字符串,C 库函数 - strtok()

    声明 下面是 strtok 函数的声明 char strtok char str const char delim 参数 str 要被分解成一组小字符串的字符串 delim 包含分隔符的 C 字符串 返回值 该函数返回被分解的第一个子字符串
  • BGP详解

    BGP协议详解 BGP是一种边界网关协议 但是也属于动态路由协议 一 BGP的特征 xff08 一种外部路由协议 xff0c 用来在AS之间传递路由信息 xff0c 是一种增强版的距离矢量协议 xff09 1 可靠的路由更新机制 传输协议
  • el-input-number 如何实现默认不填充0

    只需要把数据设置未 undefined 的就可以了 lt el input number v model 61 num 64 change 61 handleChange min 61 1 max 61 10 label 61 描述文字 g
  • vue项目 el-input输入框字符限制,只显示英文及数字

    element的el input没有限制输入的内容 xff0c 想要限制输入内容就需要自己来开发 xff0c 我使用的方式是正则来判断进行再次赋值实现的 xff0c 不废话上代码 xff1b lt el input v model 61 3
  • cdn方式使用vue和element-ui进行前端开发

    安装 按照vue和element ui的官网开发指南中提供的cdn安装方式 xff0c 直接以script方式引入 要注意引入顺序 span class token comment lt 引入样式 gt span span class to
  • vue el-table 如何实现表格根据分页索引自增长

    在el table 里设置type 61 index xff0c 可以实现表格的索引自增长 xff0c 但是如果我们给表格增加了分页 xff0c 切换页面索引任然是从1 20 xff08 20是自己分页的数量 xff09 xff0c 那么想
  • Vue的计算属性和监听属性

    1 计算属性 computed 当依赖数据发生变化时 xff0c 计算属性会被重新计算 有且只有在依赖数据发生变化时它才会重新计算 xff0c 其他的数据变化对计算属性 应用场景 xff1a 数据的计算显示 v for用v if的计算 sp
  • Element UI el-form-item 遍历表单校验规则

    一 遍历表单校验规则实现案例 prop内容为 遍历数据 43 index 43 校验数据 span class token operator lt span div span class token keyword class span s
  • uni-app引入uView2.0的步骤

    引入uVIew组件可以使用uni app市场插件安装插件即可 xff0c 也可以使用npm下载安装 xff0c 不过使用npm需要在pages json使用easycom属性引用需要的组件类 在uni app插件市场右上角选择使用HBuil
  • Vue-cli创建项目步骤

    一 使用 vue cli 搭建项目 下面整个过程是基于已经安装node js和cnpm的基础上 xff0c node js如何安装就不在这里详说了 xff08 1 xff09 全局安装 vue cli xff0c 在命令提示窗口执行 xff
  • keil5建立工程

    1 xff0c 确认工程代码 主要包括代码的目录或者代码的svn路径 xff0c 其次再来确认代码的编译方法 xff0c 确认该代码是需要keil5编译还是linux gcc 43 makefile 编译 2 xff0c 确认编译手段 确认
  • win10下 frpc的开机自启动

    frp可以用来进行内网穿透 xff0c 其具体实现原理可以参考网上其他教程 xff0c 本文主要描述用户端程序frpc exe在win10下的一种开机自启动方法 本地组策略 在完成配置最后 xff0c 需要进行自启动配置 xff0c 一般的
  • qt 设置背景图片、背景色步骤

    拖一个label 控件 label 上右键选择改变样式表 xff0c 添加资源选择图片 一 设置背景图 background image xff1a 二 铺满整个label border image xff1a 三 添加图片 xff0c i
  • QT 设置按钮QPushButton 圆角、渐变色背景、背景图片、鼠标放上去、鼠标按下效果、透明背景

    设置按钮圆角 渐变色背景 背景图片 鼠标放上去 鼠标按下效果 透明背景 效果 xff1a 一 设置四角圆角 xff1a 二 设置下 左圆角 按钮鼠标放上去改变背景色 三 设置上 右圆角 四 按钮设置背景图片 xff0c 鼠标放上去 按下 更
  • processlist中状态详解

    在processlist中 xff0c 看到哪些运行状态时要引起关注 xff0c 主要有下面几个 xff1a 状态建议copy to tmp table执行ALTER TABLE修改表结构时建议 xff1a 放在凌晨执行或者采用类似pt o