linux下mysql cpu占用过高问题查找思路

本文以 centos 为例查找 mysql 资源暂用过高问题,其他系统思路一样,可能部分命令有所区别

查找进程

mysql 进程

打印 mysql 服务状态,在打印的信息中可以查看到进程 id

service mysqld status

打印信息

Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2022-07-25 21:00:31 CST; 1 day 14h ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 55745 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 55724 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 55747 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─55747 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

725 21:00:24 dzwldbcs systemd[1]: Starting MySQL Server...
725 21:00:31 dzwldbcs systemd[1]: Started MySQL Server.

可以看到进程 id 为 55747

查找线程

在获取到 mysql 进程后利用 top 命令获取 cpu 占用较高的进程,由于习惯了 htop,因此该处我使用 htop

# top命令
top -Hp 55747
# htop命令
htop -p 55747

在输出中找到 cpu 占用较高的进程 id

查找 sql 语句

找到相关进程后,在 mysql 客户端中执行如下命令,以获取该线程执行的 sql 语句

在执行该语句时可能 info 列可能为空,多执行几遍

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 = 55974
		or b.thread_os_id = 55975
		or b.thread_os_id = 55976
		or b.thread_os_id = 55977
		or b.thread_os_id = 55918);

其中info列则为 sql 语句,拿到 sql 语句后,便可以进行后续的分析优化等工作

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值