首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【转】MySQL SHOW PROCESSLIST详解

【转】MySQL SHOW PROCESSLIST详解

作者头像
保持热爱奔赴山海
发布于 2024-09-29 07:08:21
发布于 2024-09-29 07:08:21
86900
代码可运行
举报
文章被收录于专栏:数据库相关数据库相关
运行总次数:0
代码可运行

原文地址 https://www.modb.pro/db/337567

当前MySQL服务正在做什么? 第一个想到的命令就是processlist是获取信息。返回的结果集有 线程id,IP ,端口,数据库,命令类型,状态维持时间,状态,具体命令行,还有最下面的当前总连接数 信息组成。通过这些指标可以一眼就能了解 当前执行的操作的状态值,并且查看mysql是否存在异常 消耗时间长的SQL语句。

  • User信息可以知道 是哪个用户链接进来的
  • ID作为紧急情况下 kill的 pid
  • Host 可以统计出 客户端链接的ip信息
  • db 提供操作的数据库
  • Command 类型状态
  • Time 状态执行时间,除去Sleep情况,操作10S 以上就要注意了
  • State 当前SQL语句状态,能判断出是否穷主
  • Info 具体执行的SQL ,通过语句进行优化。

这些信息也是非常有助于了解MySQL运行情况,排查问题。

1. processlist结构

在进一步了解processlist的表结构 ,从目前8.0.28版本中的结构中,映射到2张表(5.7只存在information库)

  • information_schema.processlist(TEMPORARY临时表,还是utf8mb3字符集,要是碰到僻生字乱码)
  • performance_schema.processlist(PERFORMANCE_SCHEMA 表 就是内存表)。 当服务关闭的时,会自动drop。 所以这个信息是无法保存的。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql > show create table information_schema.processlist;
CREATE TEMPORARY TABLE `PROCESSLIST` (
  `ID` bigint unsigned NOT NULL DEFAULT '0',
  `USER` varchar(32) NOT NULL DEFAULT '',
  `HOST` varchar(261) NOT NULL DEFAULT '',
  `DB` varchar(64) DEFAULT NULL,
  `COMMAND` varchar(16) NOT NULL DEFAULT '',
  `TIME` int NOT NULL DEFAULT '0',
  `STATE` varchar(64) DEFAULT NULL,
  `INFO` longtext
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;


mysql > show create table performance_schema.processlist;
CREATE TABLE `processlist` (
  `ID` bigint unsigned NOT NULL,
  `USER` varchar(32) DEFAULT NULL,
  `HOST` varchar(261) CHARACTER SET ascii COLLATE ascii_general_ci DEFAULT NULL,
  `DB` varchar(64) DEFAULT NULL,
  `COMMAND` varchar(16) DEFAULT NULL,
  `TIME` bigint DEFAULT NULL,
  `STATE` varchar(64) DEFAULT NULL,
  `INFO` longtext,
  PRIMARY KEY (`ID`)
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Q:为什么有时PROCESSLIST会穷住的情况发生:
  • 默认的SHOW PROCESSLIST持有全局互斥量的同时,从线程管理器中跨活动线程进行迭代。特别是在繁忙的系统上执行,将对性能产生负面影响。
  • 另一种SHOW PROCESSLIST实现基于Performance Schema的PROCESSLIST表,并且不需要互斥锁。
其他
  • Info表示线程正在执行的语句,如果没有执行任何语句,则为NULL。对于SHOW PROCESSLIST,这个值只包含语句的前100个字符。要查看完整的语句,使用SHOW FULL PROCESSLIST(或查询不同的进程信息源)。
  • 拥有PROCESS特权,可以看到所有线程,甚至那些属于其他用户的线程。否则(没有PROCESS权限),非匿名用户可以访问自己线程的信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql > grant process  on  *.* to 'tester01'@'%';
  • processlist表不允许使用TRUNCATE TABLE。
  • performance_schema.processlist受到 performance_schema_max_thread_instances,performance_schema_max_stage_classes, performance_schema=ON 三个参数的影响。所以建议采用默认值即可。

2. processlist组成结构

除了一些基础信息,其实还有更深一次的信息,目前8个方面的信息(命令行,运行状态,复制进程,NDB进程,Event进程)。

Command类型

总共31个命令类型,前面5个应该是经常能看到的,有一定的了解即可:

Thread States线程状态

总共73指标,其中42多个是日常中常看到的。

其他

只显示日常的常看到的状态:

指标

状态

说明

复制进程

Killing slave

正在处理一个STOP SALVE / REPLICA语句。

复制线程

Sending binlog event to slave

发送binlog事件到副本。

复制IO Thread

Waiting for master to send event

正在等待二进制日志事件的到来。

复制SQL Thread

Slave has read all relay log; waiting for more updates

副本已读取所有中继日志;等待更多更新。

复制SQL Thread

Waiting for an event from Coordinator

等待来自协调线程的事件。

复制SQL Thread

Waiting for Slave Workers to free pending events

Workers正在处理的事件的总大小超过系统变量replica_pending_jobs_size_max或slave_pending_jobs_size_max的大小时,就会发生这个等待动作

事件调度器

Waiting on empty queue

调度器的事件队列空,正在休眠中。

3. 常见问题状态分析

下面日常运维中,都会碰到的状态,都会反馈那些问题点:

1.Opening tables:mysql打开的文件可能超过设置参数,需要把以下指标调大 操作系统:limits.conf 参数:innodb_open_files,open_files_limit ,table_open_cache,table_definition_cache

2.Killed:一直维持kill状态 可能事务回滚,或则穷住。条件允许可以等待,但紧急境况下重新启动mysql服务,回滚速度会更快。

3.Sending data:从innodb层获取大量的数据,包含读磁盘,传输数据 等等。这个状态持续时间过长会导致cpu ,io耗尽。影响性能可以kill掉

4.Sorting index:因为语句没有可选索引进行排序,通过临时表进行排序,现象是cpu耗尽,建议添加索引

5.statistics:选出执行计划,如果长时间处于这种状态,则服务器可能是在磁盘上执行其他工作导致。

6.Waiting for commit lock:READ LOCK命令正在等待提交锁

7.waiting for handler commit:提交堵塞,瓶颈可能存在io 或 大批量事务导致。

8.Waiting for table flush:FLUSH TABLES关闭表,但还存在使用的表,所以穷住。需要把对应的使用sql 语句kill掉。主要场景就是xtrabackup时候常碰到。

9.Waiting for table metadata lock:元表锁 ,ddl和dml 冲突,需要对应的dml kill 掉 或停止ddl

10.Writing to net:网络堵塞。网络打满 或 max_allowed_packet设置过小导致。

11.copying to tmp: 大批量生成临时表,sql多表jion 或则 参数(max_heap_table_size tmp_table_size)可能能临时表大小,磁盘io 有关系。

12.高负载下show processlist 谨慎使用。这时候选择performance_schema.processlist也可以的。

13.有些语句在INFO信息不是显示SQL语句这时可以通过performance_schema.events_waits_current 查看具体SQL语句

4. 总结

PROCESSLIST就要MySQL运行的仪表盘一样,随时随刻告诉运行情况。

5.参考

https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​mysql show processlist
功能: 列出正在运行的线程以及这些线程的状态,这对了解客户端执行那些操作很有帮助。
用户1560186
2020/02/17
1.3K0
故障分析 | show processlist 引起的性能问题
业务监控发现交易的平均响应时间比之前慢了近一倍,需要排查一下数据库是不是响应慢了。生产MySQL版本为8.0.18,一主3从半同步复制。
爱可生开源社区
2022/07/11
4180
MYSQL 8 show processlist 到底信息从哪里来,换到哪里了,怎么打开,哪里有进步?
放假的最后一天,的回答最近有一个小朋友问了一个关于 processlist 的问题,基于MYSQL 8 show processlist 到底从哪里来的信息,MYSQL 8 中提供processlist 信息的表与命令之间结果的不同。
AustinDatabases
2022/02/09
2.5K0
MYSQL 8 show processlist  到底信息从哪里来,换到哪里了,怎么打开,哪里有进步?
【MySQL】metadata lock问题
MySQL使用DML来管理对数据库对象的并发访问,并确保数据一致性。DML不仅适用于表,还适用于模式和存储程序(过程、函数、触发器和计划的事件)
用户5522200
2020/06/11
1.6K0
遇到MDL锁,如何分析和处理?
之前遇到一个DBA,在生产库上加字段,导致数据库连接数打满。原因就是MDL锁引起。下面让我来介绍一下MDL锁及其排查和处理方式。
用户10842762
2023/11/15
7131
Server 层混杂信息字典表 | 全方位认识 information_schema(上)
在上一篇《Server层表级别对象字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema系统库的表级别对象字典表,本期我们将为大家带来系列第四篇《Server层混杂信息字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema系统库的系统学习之旅吧。
老叶茶馆
2020/11/26
1K0
PolarDB MySQL 加索引卡主的整体解决方案
在使用PolarDB for MySQL的过程中,我们遇到一个问题,PolarDB 8.02的小版本8.02.2.24 在添加索引的时候,会有部分情况无法添加索引,添加索引失败。具体表现是如下图:
AustinDatabases
2025/04/10
2010
PolarDB MySQL 加索引卡主的整体解决方案
学会用 Mysql show processlist 排查问题
每次执行看到的结果应该都有变化,因为是实时的,所以我定义为:“事发现场”,每次执行就相当于现场的快照
码农编程进阶笔记
2021/07/20
4.1K0
「Mysql优化大师一」mysql服务性能剖析工具
方法一: 全局变量设置,将 slow_query_log 全局变量设置为“ON”状态 mysql> set global slow_query_log='ON'; 设置慢查询日志存放的位置 mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log'; 查询超过1秒就记录 mysql> set global long_query_time=1;
源码之路
2020/09/24
1.3K0
「Mysql优化大师一」mysql服务性能剖析工具
配置详解 | performance_schema全方位介绍
在上一篇 《初相识 | performance_schema全方位介绍》 中粗略介绍了如何配置与使用performance_schema,相信大家对performance_schema能够为我们提供什么样的性能数据已经有一个初步的认识,今天将带领大家一起踏上系列第二篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema配置方式以及各个配置表的作用。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
沃趣科技
2018/05/15
10.5K0
配置详解 | performance_schema全方位介绍
应用示例荟萃 | performance_schema全方位介绍(上)
经过前面6个篇幅的学习,相信大家对什么是performance_schema,已经初步形成了一个整体认识,但我想很多同行看完之前的文章之后可能还是一脸懵逼,今天就为大家带来performance_schema系列的最后一个篇章(全系共7个篇章),在这一期里,我们将为大家列举数十个performance_schema应用示例。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
沃趣科技
2018/07/02
1.4K0
应用示例荟萃 | performance_schema全方位介绍(上)
捅破窗户纸-入门MySQL调优之性能监控
MySQL Server的逻辑架构一般分为三层:服务层(专门为客户端服务)、MySQL Server核心层和存储引擎。
行百里er
2020/12/02
1.1K0
捅破窗户纸-入门MySQL调优之性能监控
实战 MySQL 锁等待问题的定位与排查
在 MySQL 的实际使用中,常常会遇到一条 SQL 执行非常慢的情况,此前我们总结了一系列博客来排查相关的问题:
用户3147702
2022/06/27
3.1K0
实战 MySQL 锁等待问题的定位与排查
会话和锁信息查询视图 | 全方位认识 sys 系统库
在上一篇《等待事件统计视图 | 全方位认识 sys 系统库》中,我们介绍了sys 系统库中的等待事件统计视图,本期的内容先给大家介绍会话信息和锁等待信息查询视图,通过这些视图我们可以清晰地知道每个会话正在做什么事情,是否存在锁等待。下面请跟随我们一起开始 sys 系统库的系统学习之旅吧~
沃趣科技
2018/09/04
1.7K0
会话和锁信息查询视图 | 全方位认识 sys 系统库
应用示例荟萃 | performance_schema全方位介绍(中)
表级锁对应的instruments(wait/lock/table/sql/handler)默认启用,对应的consumers表为performance_schema.table_handles在setup_consumers只受全局配置项global_instrumentation控制,默认启用。所以,默认情况下只需要设置系统配置参数performance_schema=ON即可,下面我们通过一个示例演示如何找出谁持有表级锁
老叶茶馆
2020/11/26
4460
Waiting for table metadata lock问题处理
在使用mysql的时候,我们有时会碰到Waiting for table metadata lock的锁等待。但是这个锁等待比较特殊,在innodb_lock_wait和show engine innodb status 表里面都查不到。
老叶茶馆
2020/06/24
1.7K0
MySQL在线DDL修改表结构的简单经验分享
摘 要 在线DDL修改生产环境的大表一直是运维、DBA一个很头痛的问题,本文分享一些相关经验,希望对还在头痛的同学能有所帮助,当然更希望路过的大神,如果有更靠谱的方案能够指点一二,不吝赐教。 一、故障背景 内部故障群反馈:XX 系统卡住不可用了,请帮忙看看; 排查发现是有一个 alter 修改数据库的表结构的变更,出现了大量的 MDL 锁,导致服务不可用,最后通过 kill 掉这个 alter 恢复了服务。当然, 这个 alter 需求也就暂时搁置了。 业务需求的变更肯定还是要继续执行的,因此就有了各种
张戈
2018/03/26
3.5K0
MySQL在线DDL修改表结构的简单经验分享
MySQL information_schema详解 PROCESSLIST
https://dev.mysql.com/doc/refman/5.7/en/processlist-table.html
bsbforever
2020/08/19
4.4K0
MySQL information_schema详解 PROCESSLIST
MySQL-长事务详解
『入门MySQL』系列文章已经完结,今后我的文章还是会以MySQL为主,主要记录下近期工作及学习遇到的场景或者自己的感悟想法,可能后续的文章不是那么连贯,但还是希望大家多多支持。言归正传,本篇文章主要介绍MySQL长事务相关内容,比如说我们开启的一个事务,一直没提交或回滚会怎样呢,出现事务等待情况应该如何处理,本篇文章将给你答案。
MySQL技术
2019/09/23
3.5K0
MOP 系列|MOP 三种主流数据库常用 SQL(二)
MOP 不用多说,指的就是 MySQL、Oracle、PostgreSQL 三种目前最主流的数据库,MOP 系列打算更新 MOP 三种数据库的索引知识、高可用架构及常用 SQL 语句等等,上面已经更新了 MOP 索引相关的文章,今天打算整理一下这三种数据库的常用 SQL 知识,由于文章过长,今天更新中间的一篇之 MySQL 篇。第一篇 Oracle 相关的详见下方链接:MOP 系列|MOP 三种主流数据库常用 SQL(一)。
JiekeXu之路
2024/05/28
1580
MOP 系列|MOP 三种主流数据库常用 SQL(二)
相关推荐
​mysql show processlist
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验