首页 > 数据库 >MySQL如何定位消耗CPU的SQL

MySQL如何定位消耗CPU的SQL

时间:2023-08-07 21:32:21浏览次数:28  
标签:20 456844 SQL 24.3 mysqld mysql MySQL NULL CPU

Mysql5.7版本以上在pfc下面的表threads表中添加了THREAD_OS_ID字段

[[email protected]][test]> desc performance_schema.threads;
+---------------------+------------------+------+-----+---------+-------+
| Field               | Type             | Null | Key | Default | Extra |
+---------------------+------------------+------+-----+---------+-------+
| THREAD_ID           | bigint unsigned  | NO   | PRI | NULL    |       |
| NAME                | varchar(128)     | NO   | MUL | NULL    |       |
| TYPE                | varchar(10)      | NO   |     | NULL    |       |
| PROCESSLIST_ID      | bigint unsigned  | YES  | MUL | NULL    |       |
| PROCESSLIST_USER    | varchar(32)      | YES  | MUL | NULL    |       |
| PROCESSLIST_HOST    | varchar(255)     | YES  | MUL | NULL    |       |
| PROCESSLIST_DB      | varchar(64)      | YES  |     | NULL    |       |
| PROCESSLIST_COMMAND | varchar(16)      | YES  |     | NULL    |       |
| PROCESSLIST_TIME    | bigint           | YES  |     | NULL    |       |
| PROCESSLIST_STATE   | varchar(64)      | YES  |     | NULL    |       |
| PROCESSLIST_INFO    | longtext         | YES  |     | NULL    |       |
| PARENT_THREAD_ID    | bigint unsigned  | YES  |     | NULL    |       |
| ROLE                | varchar(64)      | YES  |     | NULL    |       |
| INSTRUMENTED        | enum('YES','NO') | NO   |     | NULL    |       |
| HISTORY             | enum('YES','NO') | NO   |     | NULL    |       |
| CONNECTION_TYPE     | varchar(16)      | YES  |     | NULL    |       |
| THREAD_OS_ID        | bigint unsigned  | YES  | MUL | NULL    |       |
| RESOURCE_GROUP      | varchar(64)      | YES  | MUL | NULL    |       |
+---------------------+------------------+------+-----+---------+-------+
18 rows in set (0.01 sec)

THREAD_OS_ID 这对应Linux中的线程PID

找到mysql的进程

[root@MyLinux ~]# ps -ef| grep mysqld
mysql     9014     1  0 12:52 pts/1    00:00:00 /bin/sh ./mysqld_safe --defaults-file=/etc/my.cnf
mysql    10107  9014  0 12:52 pts/1    00:00:35 /usr/local/mysql-8.0.22-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql-8.0.22-linux-glibc2.12-x86_64 --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql-8.0.22-linux-glibc2.12-x86_64/lib/plugin --log-error=/data/mysql/logs/error.log --pid-file=mysql.pid --port=3306

找到mysql线程中消耗CPU最高的一个PID

Threads:  46 total,   3 running,  43 sleeping,   0 stopped,   0 zombie
%Cpu(s): 24.9 us, 39.5 sy,  0.0 ni, 17.0 id, 15.4 wa,  0.0 hi,  3.1 si,  0.0 st
KiB Mem :  1879692 total,    70376 free,   711560 used,  1097756 buff/cache
KiB Swap:  2064380 total,  2063284 free,     1096 used.   904968 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
10359 mysql     20   0 2263804 456844  16296 R 10.7 24.3   0:06.87 mysqld
10132 mysql     20   0 2263804 456844  16296 S  2.7 24.3   0:04.49 mysqld
10134 mysql     20   0 2263804 456844  16296 R  1.3 24.3   0:03.70 mysqld
10131 mysql     20   0 2263804 456844  16296 S  1.0 24.3   0:03.09 mysqld
10133 mysql     20   0 2263804 456844  16296 R  0.7 24.3   0:03.03 mysqld
10173 mysql     20   0 2263804 456844  16296 S  0.7 24.3   0:00.33 mysqld
10128 mysql     20   0 2263804 456844  16296 S  0.3 24.3   0:00.56 mysqld
10172 mysql     20   0 2263804 456844  16296 S  0.3 24.3   0:03.30 mysqld
10107 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:11.63 mysqld
10110 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.17 mysqld
10111 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.18 mysqld
10112 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.19 mysqld
10113 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.20 mysqld
10114 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.23 mysqld
10115 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.22 mysqld
10116 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.22 mysqld
10117 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.28 mysqld
10118 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.19 mysqld
10119 mysql     20   0 2263804 456844  16296 S  0.0 24.3   0:00.19 mysqld

通过10359 定位执行的sql语句

[[email protected]][(none)]> select * from performance_schema.threads where THREAD_OS_ID=10359\G
*************************** 1. row ***************************
          THREAD_ID: 57
               NAME: thread/sql/one_connection
               TYPE: FOREGROUND
     PROCESSLIST_ID: 9
   PROCESSLIST_USER: root
   PROCESSLIST_HOST: localhost
     PROCESSLIST_DB: test
PROCESSLIST_COMMAND: Query
   PROCESSLIST_TIME: 209
  PROCESSLIST_STATE: waiting for handler commit
   PROCESSLIST_INFO: insert into t values (n,"abc", n)
   PARENT_THREAD_ID: NULL
               ROLE: NULL
       INSTRUMENTED: YES
            HISTORY: YES
    CONNECTION_TYPE: Socket
       THREAD_OS_ID: 10359
     RESOURCE_GROUP: USR_default
1 row in set (0.01 sec)

这个功能让我们更容易定位到消耗CPU的sql

标签:20,456844,SQL,24.3,mysqld,mysql,MySQL,NULL,CPU
From: https://blog.51cto.com/u_13482808/6998325

相关文章

  • Docker安装MySQL
    安装版本为MySQL8.0.131.拉取镜像#默认拉取最新镜像dockerpullmysqldockersearch<name>#https://hub.docker.com#在网站选择具体版本dockerpullmysql:8.0.132.创建挂载目录#建立宿主机数据库目录mkdir-p/home/docker/mysql/data#建立宿主机数据库配置文件......
  • Sql去重查询数据,存在部分字段相同 max(id)  和 group by配合使用
    Sql去重查询数据原文链接:https://blog.51cto.com/u_15910936/5932613最近在工作过程中,面试过程中, 部分求职者或者同事,对sql怎么去重查询,不是太熟练今天下午忙里偷闲,整理了一下 其实sql基本的查询,还是蛮有意思,  下面是我大致整理的几种去重查询 1.存在2条一样的数据, 使......
  • SqlServer时间格式化
       sqlserver日期格式化中文-年月日selectconvert(varchar,datepart(yy,getdate()))+N'年'+convert(varchar,datepart(mm,getdate()))+N'月'+convert(varchar,datepart(dd,getdate()))+N'日',cast(datepart(yy,getdate())asvarchar)+N'年......
  • 支持多数据源联合查询的SQL运行引擎sycnany-SQL添加使用自定义函数
    在微服务和云原生愈发流行的今天,数据的分布也愈发脱离单库单机而更加复杂,使用的数据库类型也会更多,但业务的复杂依然会带来了大量的数据查询和导出需求,而很多时候我们很难为数据量的大部分系统创建完整的BI数仓系统,这时候你是不是觉得为这些需求查询和导出数据就会是一个十分困难且......
  • MySQL和MongoDB如何JOIN查询?一个直接在本地运行的SQL执行引擎
    在微服务和云原生愈发流行的今天,数据的分布也愈发脱离单库单机而更加复杂,使用的数据库类型也会更多,但业务的复杂依然会带来了大量的数据查询和导出需求,而很多时候我们很难为数据量的大部分系统创建完整的BI数仓系统,这时候你是不是觉得为这些需求查询和导出数据就会是一个十分困难且......
  • PLSQL客户端刚安装好后无法访问服务器数据库的解决方法
    1、正常安装PLSQL2、安装客户端oracle客户端工具:InstantClientSetup64w-oracle简易客户端.exe3、配置环境变量,在path中添加上面安装客户端工具的地址。4、打开plsql,即可看到登录下面多了一个选项,即可以登录使用了。......
  • Airflow 2.2.6 + MySQL 8.0.27 + Redis 7.0.12 部署Airflow任务调度平台
    本docker-compose文件在centos7.9系统,docker版本为24.0.2上测试的如果你的docker版本低于24.xxx就需要手动安装docker-compose,高于24就不需要安装了,docker已经自带了官方文档,关于docker部署1.先执行mkdir-p./dags./logs./plugins./config./......
  • Navicat Premium的mysql备份和恢复
    备份:::::::恢复::::::......
  • Java 远程连接 SQLite 数据库
    Java可以使用JDBCAPI来连接SQLite数据库。但是,SQLite不支持远程连接,因为它是一种文件数据库,需要直接访问数据库文件。如果您需要从远程位置访问SQLite数据库,可以将SQLite数据库文件放在共享文件夹中,并将该文件夹映射到本地计算机上。然后,您可以在本地计算机上使用JDBC......
  • MySQL基础语句
    select*from表where字段in(select临时表名.字段from(另一个字段)临时表名);deletefrom表名where字段inselect临时表名.字段from(另一个字段)临时表名);update表名set字段=新值where字段in(select临时表名.字段from(另一个字段)临时表名));insertint......