天涯论坛

 找回密码
 立即注册
搜索
查看: 68|回复: 3

mysql 快速定位cpu 占比过高的sql语句

[复制链接]

2970

主题

144

回帖

9912万

积分

论坛元老

Rank: 8Rank: 8

积分
99129168
发表于 2024-8-4 15:56:35 | 显示全部楼层 |阅读模式

当MySQL数据库的CPU运用反常上升时,定位引起问题的SQL语句能够经过以下过程进行:

1. **运用`top`或`pidstat`命令**:

首要能够经过`top -H -p <mysqld进程id>``pidstat -t -p <mysqld进程id> 1 5`命令来确定哪个线程占用了大量的CPU资源。

2. **查找`performance_schema`或`information_schema`**:

运用以下SQL语句能够查找详细的线程信息,包含其操作系统线程ID(`THREAD_OS_ID`)和正在执行的SQL语句:

```sql

SELECT

a.THREAD_OS_ID,

b.id,

b.USER,

b.HOST,

b.db,

b.PROCESSLIST_INFO,

b.INFO

FROM

PERFORMANCE_SCHEMA.THREADS a,

information_schema.PROCESSLIST b

WHERE

b.id = a.processlist_id AND a.THREAD_OS_ID = <详细线程id>;

```

其中 `<详细线程id>` 是从过程1中获取的线程ID。

3. **分析慢查找日志**:

开启MySQL的慢查找日志,分析执行时间过长的SQL语句。能够经过以下命令查看慢查找日志的配置:

```sql

SHOW VARIABLES LIKE slow_query_log%;

```

而后运用`explain`分析慢查找日志中记录的SQL语句,找出可能的性能瓶颈。

4. **运用`SHOW PROCESSLIST`命令**:

登录到MySQL服务器,运用`SHOW FULL PROCESSLIST;`命令查看当前正在执行的所有线程,包含它们的状态和执行时间。这有助于识别长期运行的查找

5. **运用`SHOW PROFILE`或`SHOW PROFILES`**:

针对短期执行但CPU运用率高的SQL,能够运用`SHOW PROFILE`或`SHOW PROFILES`来获取SQL语句的仔细性能数据。

6. **检测`information_schema`中的`processlist`表**:

经过以下命令查找`processlist`表,找到CPU运用率高的线程:

```sql

SELECT * FROM performance_schema.threads WHERE thread_os_id = 1;

```

这将表示与特定操作系统线程ID关联联的MySQL线程的仔细信息。

7. **运用通用日志记录**:

倘若必须能够开启MySQL的通用日志记录功能,记录所有执行的SQL语句,以便进行分析:

```sql

SET GLOBAL log_output=TABLE;

SET GLOBAL general_log=ON;

```

而后经过查找`mysql.general_log`表来查看日志记录的SQL语句。

经过这些过程,你能够定位到引起CPU运用率高的SQL语句,并进一步分析和优化它们以降低资源消耗。

下面运用方法二来演示定位SQL

1:top查看

2:top -Hp 42977

3: 带入下面的脚本

SELECT

FROM

performance_schema.events_statements_current

WHERE

thread_id = (

SELECT

thread_id

FROM

performance_schema.threads

WHERE

thread_os_id = 10593

) ;

SELECT

a. USER,

a. HOST,

a.db,

b.thread_os_id,

b.thread_id,

a.id processlist_id,

a.command,

a.time,

a.state,

a.info

FROM

information_schema.PROCESSLIST a,

performance_schema.threads b

WHERE

a.id = b.processlist_id

AND b.thread_os_id = 10593;

返回外链论坛:www.fok120.com,查看更加多

责任编辑:网友投稿





上一篇:为么 SQL 语句不要太多的 join?
下一篇:运用Python提取SQL语句中WHERE子句的值
回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-8-28 18:46:44 | 显示全部楼层
我深受你的启发,你的话语是我前进的动力。
回复

使用道具 举报

2991

主题

3万

回帖

9956万

积分

论坛元老

Rank: 8Rank: 8

积分
99569152
发表于 2024-11-11 04:34:30 | 显示全部楼层
回顾历史,我们感慨万千;放眼未来,我们信心百倍。
回复

使用道具 举报

3093

主题

3万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098758
发表于 前天 09:33 | 显示全部楼层
真情实感,其含义为认真了、走心了的意思,是如今的饭圈常用语。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-24 16:58 , Processed in 0.104960 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.