首页 > 解决方案 > 找出什么查询是一个知道它的PID的进程

问题描述

通过使用 htop 命令,我可以看到一个 mysqld 进程占用了超过 500% 的 CPU 使用率,并且它的 PID 是例如 20456 htop only show command /usr/bin/mysqld next to it

现在,我想做的是检查那个 PID 正在做什么查询?我的网站做了很多与数据库相关的事情,我想知道是什么工作导致了这种高 CPU 使用率。有人可以告诉我路吗?

我尝试在 mysql 中显示完整的进程列表,但它没有显示该列表中的 PID,所以我不知道应该关注什么。

标签: mysqldebuggingcpu-usage

解决方案


当我查看线程视图手册时,MySQL 5.7 / 8.0 接缝具有本机支持

THREAD_OS_ID

底层操作系统定义的线程或任务标识符(如果有):

THREAD_OS_ID 包含操作系统线程 ID。

对于 Windows,THREAD_OS_ID 对应于 Process Explorer ( https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx ) 中可见的线程 ID。

对于 Linux,THREAD_OS_ID 对应于 gettid() 函数的值。例如,使用 perf 或 ps -L 命令或在 proc 文件系统 (/proc/[pid]/task/[tid]) 中会公开此值。有关详细信息,请参阅 perf-stat(1)、ps(1) 和 proc(5) 手册页

此外,此视图还包含一PROCESSLIST_ID列,因此您可以将其与information_schema.processlist一起加入,以了解哪个查询正在使用哪个操作系统 PID


推荐阅读