MySQL PS_THREAD_ID 怎样把连接编号转换为监控线程编号
MySQL 的 PS_THREAD_ID(connection_id) 可以把连接编号映射成 Performance Schema 的线程编号。参数应取自 SHOW PROCESSLIST 的 Id 或 threads 表的 PROCESSLIST_ID;返回值才用于关联监控表里的 THREAD_ID。两种编号不能直接互换。
官方地址:https://dev.mysql.com/doc/refman/8.4/en/performance-schema-functions.html
以下以 MySQL 8.4 文档为依据。遇到“有连接号却查不到线程事件”的排查任务,我会先确认编号来源和实例,再看采集条件。这是操作建议,本文没有连接生产数据库或执行示例。
先把两种编号分开
我不习惯把交接消息里的“线程号”直接粘进查询。先问清楚:它来自进程列表,还是 Performance Schema?在用户连接对应的 threads 行中,PROCESSLIST_ID 是连接编号,THREAD_ID 是监控线程编号;后台线程的 PROCESSLIST_ID 则可能为 NULL。

在目标实例上取得映射
先确认正在连接的是发生问题的实例。示例中的 8042 仅为占位数字,应换成当次已确认的目标连接编号。
-- 记录实例和查询时间,避免把不同实例的编号混用。
SELECT @@hostname AS host_name,
@@port AS port_number,
VERSION() AS server_version,
NOW() AS observed_at;
-- 8042 是示例占位值,必须替换为当前目标连接编号。
SET @target_connection_id = 8042;
SELECT @target_connection_id AS connection_id,
PS_THREAD_ID(@target_connection_id) AS ps_thread_id;
结果应理解为“这一时刻的映射”。函数返回无符号大整数或 NULL,不能假定连接在下一次查询前仍然存在。若只是查看当前会话,也可使用下面的写法。
-- 用当前会话的连接编号进行映射,不需要手填编号。
SELECT CONNECTION_ID() AS connection_id,
PS_THREAD_ID(CONNECTION_ID()) AS ps_thread_id;
用映射结果定位线程记录
对我来说,先核对 threads 行比立刻扩大事件查询更清楚:它能说明连接用户、主机和采集状态。以下查询需要相应表的读取权限;获得线程表 SELECT 权限可能看见其他用户的线程信息,应使用受授权的诊断账号。
-- 同时保留连接号条件,便于检查这条映射对应的对象。
SELECT t.THREAD_ID, t.PROCESSLIST_ID,
t.PROCESSLIST_USER, t.PROCESSLIST_HOST,
t.INSTRUMENTED
FROM performance_schema.threads AS t
WHERE t.PROCESSLIST_ID = @target_connection_id
AND t.THREAD_ID = PS_THREAD_ID(@target_connection_id);
-- 查询当前语句,限制输出量;没有行不等于连接一定没有活动。
SELECT e.THREAD_ID, e.EVENT_ID, e.SQL_TEXT
FROM performance_schema.events_statements_current AS e
WHERE e.THREAD_ID = PS_THREAD_ID(@target_connection_id)
LIMIT 5;

SQL_TEXT 可能包含业务信息,交接时应按自身数据管理要求脱敏。这些查询不会修复慢 SQL,也不改变线程状态;它们只负责定位观察对象。
遇到 NULL 或无事件时怎样收尾
| 现象 | 先判断什么 | 处理建议 |
|---|---|---|
| 函数返回 NULL | 参数是否为空、连接是否仍在、线程实例资源是否可用 | 重新确认目标与实例,不把 NULL 当成线程编号 |
| 函数报错 | 版本、函数支持和 Performance Schema 是否启用 | 保留原始错误再处理环境问题 |
| 能映射,事件却为空 | 事件采集配置和查询时刻 | 继续按事件表规则排查,不立即宣告无活动 |
| 连接已经重连 | 是否仍是原会话 | 重新获取编号,不继续复用旧映射 |
官方文档特别区分了线程统计 consumer 与编号映射:关闭 thread_instrumentation 不会直接使 PS_THREAD_ID 失效;线程实例内存不足或上限为 0 则可能返回 NULL。若 Performance Schema 整体关闭,函数会报错。不要把几种现象归成同一个开关问题。
本篇只读查询没有需要回滚的业务修改。我更愿意在信息不足时停止扩大操作范围,先补齐记录,而不是为了让图表出现数据临时开启所有采集项。
交接时保留哪些线索
至少记下实例、观察时间、连接号来源、映射值和查询状态。threads 行会在会话结束后移除;自动重连关联的是新记录,所以一次映射不应当作长期身份。适合使用这个方法的场景,是手头已有连接编号、需要查对应监控数据的短时诊断。
PS_THREAD_ID(NULL) 表示当前会话吗?
不表示,它返回 NULL。不要与 sys.ps_thread_id() 的空参数语义混淆;需要当前会话时可显式传 CONNECTION_ID()。
映射结果能直接作为操作系统线程号吗?
不能。本文返回的是 Performance Schema 的 THREAD_ID,不能拿它直接解释操作系统进程或线程标识。
查不到行就代表采集系统故障吗?
不一定。目标会话可能已经结束,查询也可能落在错误实例上;先核对这些条件,再讨论采集配置。
茶叶拆封后为什么不能与有气味的物品混放
- 上一篇
- 茶叶拆封后为什么不能与有气味的物品混放
- 下一篇
- Go go-flags 遇到未知参数时怎样保留给下游处理
-
- 数据库 · MySQL | 1小时前 | MySQL · mysql Performance Schema PS_CURRENT_THREAD_ID PS_THREAD_ID THREAD_ID
- MySQL PS_CURRENT_THREAD_ID 怎样取得当前会话的内部线程编号
- 337浏览 收藏
-
- 数据库 · MySQL | 2小时前 |
- MySQL ST_Validate 返回 NULL 时怎样区分无效几何与空值
- 447浏览 收藏
-
- 数据库 · MySQL | 2小时前 |
- MySQL ST_Collect 怎样把分组中的几何对象聚合起来
- 432浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · mysql 字符集 排序规则 WEIGHT_STRING
- MySQL WEIGHT_STRING 怎样比较排序规则产生的权重
- 492浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL FORMAT 的 locale 参数怎样改变千分位符号
- 443浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · 数据库 · 权限管理 · mysql 默认角色 SET DEFAULT ROLE activate_all_roles_on_login
- MySQL SET DEFAULT ROLE 怎样影响下一次登录
- 454浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · 数据库 · mysql CURRENT_ROLE SET ROLE 角色激活
- MySQL CURRENT_ROLE 为什么没有显示已经授予的全部角色
- 143浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · mysql FROM_BASE64 TO_BASE64 Base64换行
- MySQL TO_BASE64 结果中的换行怎样影响数据交换
- 209浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL FROM_BASE64 怎样处理输入中的空白字符
- 369浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL EXPORT_SET 怎样为每一位生成不同的开关文本
- 400浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL JSON_DEPTH 怎样计算对象和数组混合时的嵌套层数
- 393浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 795次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 786次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 874次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 840次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 673次使用
-
- MySQL JSON_TABLE 展开数组时如何保留缺失字段
- 2026-09-10 501浏览
-
- MySQL 分区表怎么处理跨分区唯一键:分区列约束与建表取舍
- 2026-08-30 501浏览
-
- MySQL权限管理设置全攻略
- 2026-03-29 501浏览
-
- MySQL分片实现方法及常见方案解析
- 2025-06-24 501浏览
-
- MySQL表空间碎片怎么清理?超详细优化教程
- 2025-06-13 501浏览

