MySQL information_schema.processlist 实战宝典:解锁DBA的监控超能力

MySQL性能分析之show processlist及information_schema.processlist详解 简要说明show processlist和processlist表的使用,重点介绍state、info、time等属性的解释、如何应用于实际分析 阅读详情

一、引言:为什么processlist是DBA的瑞士军刀?

作为MySQL数据库管理员,我们经常会遇到这样的场景:数据库突然变慢,应用程序开始报错,领导焦急地询问原因…这时,information_schema.processlist 就是我们第一时间要使用的诊断工具。不同于教科书式的简单介绍,本文将带你深入实战,揭示processlist不为人知的高级用法和独特见解。

二、基础实战:从入门到精通

2.1 基础查询的隐藏技巧

常规写法:

SELECT * FROM information_schema.processlist;

进阶技巧(添加可读性转换):

SELECT 
    ID,
    USER,
    HOST,
    DB,
    COMMAND,
    CONCAT(FLOOR(TIME/60), 'm ', MOD(TIME,60), 's') AS TIME_FORMATTED,
    STATE,
    LEFT(INFO, 100) AS SHORT_INFO
FROM information_schema.processlist
ORDER BY TIME DESC;

独特见解:将秒数转换为"分秒"格式更符合人类阅读习惯,LEFT函数防止超长SQL语句影响显示效果

2.2 精准定位问题的黄金查询

查找所有非空闲连接:

SELECT 
    ID,
    USER,
    HOST,
    DB,
    COMMAND,
    TIME,
    STATE,
    LEFT(INFO, 200) AS INFO
FROM information_schema.processlist
WHERE COMMAND NOT IN ('Sleep', 'Binlog Dump', 'Daemon')
ORDER BY TIME DESC
LIMIT 50;

专业提示:排除’Binlog Dump’和’Daemon’等系统线程可以减少干扰

三、高级实战:疑难问题排查三板斧

3.1 第一板斧:锁定"罪魁祸首"线程

查找阻塞源头(独创的关联查询法):

SELECT 
    p.ID AS blocked_thread_id,
    p.USER AS blocked_user,
    p.TIME AS blocked_time,
    p.STATE AS blocked_state,
    LEFT(p.INFO, 200) AS blocked_query,
    b.ID AS blocking_thread_id,
    b.USER AS blocking_user,
    b.TIME AS blocking_time,
    b.STATE AS blocking_state,
    LEFT(b.INFO, 200) AS blocking_query
FROM information_schema.processlist p
JOIN performance_schema.threads t ON p.ID = t.PROCESSLIST_ID
JOIN performance_schema.events_waits_current w ON t.THREAD_ID = w.THREAD_ID
JOIN performance_schema.threads bt ON w.BLOCKING_THREAD_ID = bt.THREAD_ID
JOIN information_schema.processlist b ON b.ID = bt.PROCESSLIST_ID
WHERE p.STATE = 'Waiting for table metadata lock';

核心价值:这种多系统视图关联查询能精准定位锁等待的源头,是解决复杂锁问题的利器

3.2 第二板斧:深度分析SQL执行模式

识别高频查询模式(独创的指纹分析法):

SELECT 
    -- 提取SQL指纹(去除具体值,保留结构)
    REGEXP_REPLACE(INFO, '[0-9]+', 'N') AS sql_pattern,
    COUNT(*) AS execution_count,
    AVG(TIME) AS avg_time,
    MAX(TIME) AS max_time,
    SUM(TIME) AS total_time
FROM information_schema.processlist
WHERE INFO IS NOT NULL
GROUP BY sql_pattern
ORDER BY total_time DESC
LIMIT 10;

创新点:通过正则表达式标准化SQL,识别真正需要优化的查询模式而非单个SQL

3.3 第三板斧:预测性监控

建立连接健康度评分模型(独创算法):

SELECT 
    USER,
    COUNT(*) AS total_connections,
    SUM(CASE WHEN TIME > 10 THEN 1 ELSE 0 END) AS slow_queries,
    SUM(CASE WHEN STATE LIKE '%lock%' THEN 1 ELSE 0 END) AS locked_queries,
    ROUND(SUM(CASE WHEN TIME > 10 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS slow_query_percentage,
    -- 健康度评分公式(独创)
    ROUND(100 - (SUM(CASE WHEN TIME > 10 THEN 1 ELSE 0 END) / COUNT(*) * 100 
          - (SUM(CASE WHEN STATE LIKE '%lock%' THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS health_score
FROM information_schema.processlist
WHERE USER NOT IN ('system user', 'event_scheduler')
GROUP BY USER
ORDER BY health_score ASC;

业务价值:量化的健康度评分可直观反映各用户连接质量,实现预测性监控

四、企业级实战:构建智能监控系统

4.1 自动化的长事务杀手

创建智能终止存储过程:

DELIMITER //
CREATE PROCEDURE auto_kill_long_transactions(IN max_duration INT)
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE thread_id BIGINT;
    DECLARE db_user VARCHAR(100);
    DECLARE exec_time INT;
    DECLARE query_text TEXT;
    DECLARE kill_command TEXT;
    
    -- 只选择非系统用户的长事务
    DECLARE cur CURSOR FOR 
        SELECT p.ID, p.USER, p.TIME, p.INFO
        FROM information_schema.processlist p
        JOIN information_schema.innodb_trx t ON p.ID = t.trx_mysql_thread_id
        WHERE p.TIME > max_duration 
        AND p.USER NOT IN ('system user', 'repl', 'event_scheduler');
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO thread_id, db_user, exec_time, query_text;
        IF done THEN
            LEAVE read_loop;
        END IF;
        
        -- 记录日志(独创的详细日志格式)
        INSERT INTO killed_transactions_log 
            (thread_id, db_user, execution_time, query_text, killed_at)
        VALUES 
            (thread_id, db_user, exec_time, query_text, NOW());
        
        -- 构建动态KILL命令
        SET kill_command = CONCAT('KILL ', thread_id, ';');
        
        -- 执行KILL(使用预处理语句防止注入)
        SET @kill_stmt = kill_command;
        PREPARE stmt FROM @kill_stmt;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        
        -- 发送警报(可集成到企业微信/钉钉)
        CALL send_alert(CONCAT('已终止长事务: 用户=', db_user, 
                          ', 持续时间=', exec_time, '秒'));
    END LOOP;
    CLOSE cur;
END //
DELIMITER ;

企业级特性:完善的日志记录、安全防护和警报通知,适合生产环境使用

4.2 实时监控仪表盘查询

构建监控仪表盘的核心SQL:

SELECT 
    -- 基础指标
    COUNT(*) AS total_connections,
    SUM(CASE WHEN COMMAND = 'Sleep' THEN 1 ELSE 0 END) AS idle_connections,
    SUM(CASE WHEN COMMAND != 'Sleep' THEN 1 ELSE 0 END) AS active_connections,
    
    -- 性能指标
    SUM(CASE WHEN TIME > 5 THEN 1 ELSE 0 END) AS slow_queries,
    MAX(TIME) AS longest_running_query,
    ROUND(AVG(CASE WHEN COMMAND != 'Sleep' THEN TIME ELSE NULL END), 2) AS avg_active_time,
    
    -- 资源等待指标
    SUM(CASE WHEN STATE LIKE '%lock%' THEN 1 ELSE 0 END) AS locked_threads,
    SUM(CASE WHEN STATE LIKE '%wait%' THEN 1 ELSE 0 END) AS waiting_threads,
    
    -- 数据库分布
    COUNT(DISTINCT DB) AS active_databases,
    (SELECT DB FROM information_schema.processlist 
     WHERE DB IS NOT NULL GROUP BY DB ORDER BY COUNT(*) DESC LIMIT 1) AS most_active_db,
    
    -- 用户分布
    COUNT(DISTINCT USER) AS active_users,
    (SELECT USER FROM information_schema.processlist 
     GROUP BY USER ORDER BY COUNT(*) DESC LIMIT 1) AS most_active_user
    
FROM information_schema.processlist;

可视化价值:这些指标可直接用于Grafana等监控系统,构建完整的MySQL监控仪表盘

五、独家秘籍:processlist的隐藏玩法

5.1 连接溯源技术

追踪连接来源应用(独创的客户端特征分析):

SELECT 
    USER,
    -- 提取客户端名称(从HOST和INFO中分析)
    CASE 
        WHEN HOST LIKE '10.100.%' THEN '内部应用服务器'
        WHEN INFO LIKE '%/* MyBatis */%' THEN 'Java/MyBatis应用'
        WHEN INFO LIKE '%django%' THEN 'Python/Django应用'
        WHEN HOST LIKE 'localhost%' THEN '本地管理连接'
        ELSE '未知客户端'
    END AS client_type,
    COUNT(*) AS connection_count,
    AVG(TIME) AS avg_time
FROM information_schema.processlist
GROUP BY USER, client_type
ORDER BY connection_count DESC;

业务洞察:通过这种分析可以识别不同应用的数据库使用模式,为容量规划提供依据

5.2 预测连接池泄漏

检测连接池泄漏模式:

SELECT 
    USER,
    HOST,
    COUNT(*) AS connection_count,
    SUM(CASE WHEN COMMAND = 'Sleep' AND TIME > 300 THEN 1 ELSE 0 END) AS leaked_connections,
    ROUND(SUM(CASE WHEN COMMAND = 'Sleep' AND TIME > 300 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS leak_percentage
FROM information_schema.processlist
WHERE COMMAND = 'Sleep'
GROUP BY USER, HOST
HAVING leaked_connections > 5 OR leak_percentage > 20
ORDER BY leaked_connections DESC;

故障预防:这种查询可以在连接池泄漏导致问题前提前发现异常

六、总结与最佳实践

6.1 黄金法则

  1. 定期快照法则:每15分钟保存一次processlist快照,建立性能基线
  2. 三层分析法:全局状态→问题用户→具体SQL的递进分析流程
  3. 安全第一原则:生产环境KILL操作前必须确认影响范围

6.2 推荐监控策略

分级监控策略表:

级别检查频率检查内容阈值响应动作
紧急每分钟锁等待>30s1次立即通知
警告每5分钟查询>60s5次记录分析
注意每小时空闲连接>300s20个周报汇总

6.3 终极建议

建议将本文中的高级查询封装成存储过程,并集成到您的数据库监控系统中。同时,考虑将processlist分析与慢查询日志、性能模式(performance_schema)数据关联起来,构建全方位的数据库监控解决方案。

记住,processlist不仅是故障排查工具,更是性能优化的罗盘。通过持续分析processlist数据,您可以发现数据库使用模式,预测性能问题,最终实现从被动救火到主动预防的转变。

information_schema.processlist 表详解 MySQL的information_schema.processlist表(或SHOW PROCESSLIST命令)是监控数据库连接的重要工具。该表包含8个关键字段:连接ID、用户、主机地址、当前数据库、执行状态(如Query/Sleep)、持续时间、SQL执行状态(如Locked/Sending data)以及执行的SQL语句。通过这些字段,管理员可以实时查看所有连接情况,识别慢查询(TIME>10秒)、空闲连接(COMMAND='Sleep')、锁等待(STATE含lock)等问题,并可终止特定连接 阅读详情

相关推荐

YOLOv8 + TensorRT 实战:手把手教你用 C++ 实现实时视频流目标检测(附完整项目代码)

本文详细介绍了如何将YOLOv8与TensorRT结合,通过C++实现实时视频流目标检测的全流程。从环境配置、模型转换优化到视频处理架构设计,手把手教你构建高性能检测系统,并附完整项目代码。特别针对Windows平台下的TensorRT模型加速部署提供了实用技巧和性能优化方案。

weixin_29051193的博客 345

mysq_INFORMATION_SCHEMA.processlist解释

了解这些基本信息后,下面我们看看查询出来的结果都是什么意思。

qq_40953798的博客 1787

并网逆变器学习笔记5---三电平DPWM

三电平DPWM

圆桌骑士的博客 1万+

Mysql中如何查看线程

show processlist 命令:显示哪些线程正在运行 执行结果如下: 各列的含义和用途: ID列   一个标识,你要kill一个语句的时候很有用,用命令杀掉此查询 /*/mysqladmin kill 进程号。 user列   显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。 host列   显示这个语句是从哪个ip的哪个端口上发出的。用于追踪出问题语句的用户。 db列   显示这个进程目前连接的是哪个数据库。 command列   显示当前连接的执行的命令,.

qq_36527174的博客 1225

EAST算法(Efficient and Accuracy Scene Text))

1.EAST模型简介 本文介绍的文本检测模型EAST,便简化了中间的过程步骤,直接实现端到端文本检测,优雅简洁,检测的准确性和速度都有了进一步的提升。如下图: 其中,(a)、(b)、(c)、(d)是几种常见的文本检测过程,典型的检测过程包括候选框提取、候选框过滤、bouding box回归、候选框合并等阶段,中间过程比较冗长。而(e)即是本文介绍的EAST模型检测过程,从上图可看出,其过程简化为只有FCN阶段(全卷积网络)、NMS阶段(非极大抑制),中间过程大大缩减,而且输出结果支持文本行、单词的多个角度

博客 9578

winedt + miktex + SumatraPDF 搭建latex环境

整个环境包含三部分: - winedt: 前端编辑器 - miktex: 后端编译器 - SumatraPDF: 预览器顺序无关紧要, 不过如果先装miktex的话, 可能会被winedt在安装的时候自动找到路径从而不需要设置.1.安装miktex首先在latex-project官网, 打开”get”后, 有四种平台: Linux, Mac OS, Windows, Online. 我写论文

Iteration makes perfection. 6462

mysql问题排查常用脚本

查询出执行时间较长的进程 select * from information_schema.processlist where command != 'Sleep' and time > 5*60 order by time desc 查看进程 show full processlist 查询 正在执行的事务 SELECT * FROM information_schema.INNODB_TRX 查看正在锁的事务 SELECT * FROM INFORMATION_S

csdncjh的博客 765

工业质检升级!C#上位机集成YOLOv8.3.138+Blob分析:尺寸测量+缺陷检测一步到位

工业场景的技术选型,从来不是“选最先进的”,而是“选最适配的”。这个项目的成功,不在于采用了多前沿的技术,而在于找对了“贴合场景的技术组合”和“落地导向的实施思路”。C#上位机的稳定性保障了系统长期运行,YOLOv8.3.138的精度解决了缺陷检测痛点,Blob分析的抗干扰能力确保了尺寸测量准确,三者结合实现了“1+1+1>3”的效果。先摸透场景,再选技术:不要盲目追求最新模型,先深入了解车间环境、生产节奏、精度要求,选择兼容性强、稳定性高的技术方案;数据质量决定模型性能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 608

MySQL中information_schema.processlist表字段详解及作用

表提供了当前数据库实例中所有活跃线程(连接)的信息。这个表对于监控和诊断数据库活动非常有用,特别是在遇到性能问题或需要了解哪些查询正在运行时。请注意,从MySQL 8.0开始,权限,否则他们只能看到自己所属线程的信息。此外,由于这个表反映了实时的连接状态,因此它非常适合进行动态监控和即时分析数据库负载情况。使用这个表时,需要注意权限问题:除非用户拥有。等表来获取类似信息。已经被弃用,推荐使用。

学亮编程手记 2857

【Halcon-2D测量】add_metrology_object_rectangle2_measure 函数功能(用于向2D计量模型中添加旋转矩形(rectangle2类型)计量对象)

HALCON算子add_metrology_object_rectangle2_measure解析摘要 该算子是HALCON 2D计量模块的核心算子,用于添加旋转矩形计量对象并配置测量参数。主要功能包括:定义旋转矩形几何轮廓(中心坐标、主轴角度、长短半长);生成垂直于矩形边界的测量区域;设置边缘提取预处理参数(高斯平滑、振幅阈值)。关键注意事项:MeasureLength1必须小于矩形长短半长;角度参数Phi需使用弧度单位;多线程需同步模型句柄。该算子适用于方形螺母、PCB板边框等矩形零件的精密测量,需与a

weixin_45590420的博客 1223

第1章 大数据概述

三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 第二次 1995年前后 互联网 信息传输

wyz191的专栏 7088

如何查看mysql进程:show processlist

show processlist 是显示用户正在运行的线程,需要注意的是,除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。 show processlist 显示的信息都是来自MySQL系统库 information_schema 中的 processlist 表。所以使用下面的查询语句可以获得相同的结果: select * from information_schema.processlis

yinghuochong124的博客 3781

超声波雷达探测车位及信号处理方法

在APA泊车中用到了超声波雷达,第一次接触,总结研究之。

周陽讀書 1229

MySQL笔记-查询进程列表(查客户端IP、使用的用户、当前状态、ID号、使用的库)及断开客户端连接

查询进程列表: SELECT * FROM information_schema.processlist 这里ID就是客户端连接到MySQL的ID号,USER为连接的用户,HOST为客户端主机号,DB为操作的DB等等等等。 使用kill id端口连接如: kill 4703 ...

IT1995的博客 1816

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL之自带四库之information_schema库

Mysql5.7版本自带4个数据库,information_schema、mysql、performance_schema、sys。INFORMATION_SCHEMA提供对数据库元数据的访问 ,有关MySQL服务器的信息,例如数据库或表的名称,列的数据类型或访问权限。有时用于此信息的其他术语是数据字典和系统目录。该位置存储有关MySQL服务器维护的所有其他数据库的信息。information_schema库共计有61张表。

月生的静心苑 6446

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MySQL information_schema 系统库介绍

前言: 当我们安装好 MySQL 数据库后,会发现数据库实例自带有 information_schema 系统库,你是否有去关注过这个系统库呢?是否有查询过此库中的表数据呢?又是否清楚此库存在的具体作用呢?带着这些疑问,我们一起来看本篇文章。 1. information_schema 简介 information_schema 顾名思义就是一个信息库,是用来存储数据库的元数据(比如数据库,表的名称,列的数据类型或者访问权限等),在每个 MySQL 实例中,information_sc..

笔记 1029

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL调优总结

第一步:找出慢SQL 方法1:去数据库服务器查看slow.log文件,查看相应的SQL进行调优 方法2:MySQL命令查看正在执行的SQL任务:show processlist; 执行 select * from information_schema.PROCESSLIST where command='Query' and time>1;找出执行超过1秒的SQL 第二步:优化SQL...

chan_1030261721的博客 284

mysql

可以通过performance_schema.threads表来关联,将information_schema.processlist和performance_schema.events_statements_current一一对应起来。trx_mysql_thread_id:MySQL中的进程ID,与show processlist中的ID值相对应。根据INNODB_TRX中的trx_mysql_thread_id查询进程明细,host为客户端ip段进口。blocking_pid : 当前拥有锁的锁ID。

while(life)++; 986

MySQL 中 information_schema.processlist 使用原理

information_schema.processlist 是 MySQL 中一个关键的系统视图,用于展示当前服务器中所有正在运行的线程信息,对数据库监控和性能分析至关重要。

你的童年,我的童年,好像不一样。 1058

各种数据库查询运行中的sql以及终止进程

查询各种数据源,查询运行中的sql以及终止进程总结。

s07aser123的专栏 2336

MySQL开发必备-INFORMATION_SCHEMA库总结

INFORMATION_SCHEMA 提供对数据库元数据、有关MySQL服务器的信息(如数据库或表的名称、列的数据类型或访问权限)的访问。有时用于此信息的其他术语是数据字典和系统目录。

发现问题,面对问题,分析问题,解决问题,总结问题 2495

常用命令之mysql命令

作为一名运维工程师,我们需要运维的内容可能非常广泛,可能是路由器、交换机;肯能有服务器、操作系统;可能有nginx、中间件等;也有可能是数据库等等。这几天可能倒腾网络配置,过几天可能研究如何优化linux性能,再过几天又可能化身DBA,总之就是领导需要啥运维就得会啥!常在河边站哪有不湿鞋,好记性不如烂笔头。为了临阵磨枪,我们需要把各类知识领域常用命令收纳规整,再需要的时候可以翻出笔记,找到那些我们需要的知识!作为一个混合型运维工程师,如果说数据库需要学习和了解的,首先考虑的一定是mysql。mysql因

月生的静心苑 578

为什么要避免大事务以及大事务如何解决?

什么是大事务 运行时间比较长,长时间未提交的事务就可以称为大事务 大事务产生的原因 操作的数据比较多 大量的锁竞争 事务中有其他非DB的耗时操作 。。。 大事务造成的影响 并发情况下,数据库连接池容易被撑爆 锁定太多的数据,造成大量的阻塞和锁超时 执行时间长,容易造成主从延迟 回滚所需要的时间比较长 undo log膨胀 。。。 如何查询大事务 注:本文的sql的操作都是基于mysql5.7版本 以查询执行时间超过10秒的事务为例: select * from information_schema.

kingwinstar的博客 2051

SQL 语句优化

SQL 语句优化 1. SQL优化的一般步骤 当碰到一个存在性能问题的 MySQL 数据库时,一般按照如下步骤进行分析解决: 定位问题 SQL; 分析 SQL 执行计划; 分析 SQL Profile; 实施优化措施。 2. 定位问题SQL 定位 MySQL 的问题 SQL,主要有两种方法,查看当前线程(show processlist)和慢日志。一般来说,当前发生的问题用到 show processlit,事后分析用到慢日志。 2.1 查看当前线程 通过 show processlist

lbjzwy的博客 241

慢查询

目录查询命令慢查询配置分析慢查询日志mysqldumpslowpt-query-digestExplainTablepossible_keyskeykey_lenrefrowsselect_typetypeExtra 查询命令 show variables like "slow%"; // 查看慢查询日志状态 select * from information_schema.PROCESSLIST where TIME>=0; // 实时获取超出指定时间阈值的sql set profiling=1;

发财猪猪的笔记窝 452
上一篇: MySQL 中 information_schema.processlist 使用原理
下一篇: 微信小程序分包配置
杯莫停丶
博客等级 码龄7年 969粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杯莫停丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值