当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL PS_THREAD_ID 怎样把连接编号转换为监控线程编号

MySQL PS_THREAD_ID 怎样把连接编号转换为监控线程编号

来源:17golang原创 2026-10-30 15:20:09 0浏览 收藏

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。

进程列表连接编号与监控线程编号的静态映射关系
静态结构图:两个编号空间由映射函数及 threads 记录联系起来,不表示固定数值相等。

在目标实例上取得映射

先确认正在连接的是发生问题的实例。示例中的 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,不能拿它直接解释操作系统进程或线程标识。

查不到行就代表采集系统故障吗?

不一定。目标会话可能已经结束,查询也可能落在错误实例上;先核对这些条件,再讨论采集配置。

参考:MySQL 8.4 Performance Schema 函数;threads 表字段、权限及生命周期。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
茶叶拆封后为什么不能与有气味的物品混放茶叶拆封后为什么不能与有气味的物品混放
上一篇
茶叶拆封后为什么不能与有气味的物品混放
Go go-flags 遇到未知参数时怎样保留给下游处理
下一篇
Go go-flags 遇到未知参数时怎样保留给下游处理
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    795次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    786次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    874次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    840次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    673次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码