admin管理员组文章数量:1487745
MySQL CPU高如何找到相关的会话
可以使用下面的这个shell脚本:
代码语言:bash复制#!/bin/bash
# 获取 TOP CPU使用率的会话详情
# (适用于单机单实例的MySQL)
top_cpu_pid=$(top -b -n 1 -H -p $(pidof mysqld) -o '%CPU'| head -10 | grep PID -A 1 | tail -1 | awk '{print $1}')
echo "CPU占用最高的线程ID: " $top_cpu_pid
echo "----------------------------------------------------------"
# 获取对应PID的SQL明细
mysql -uroot -p'xxxx -e "SELECT
a.thd_id,
a.user,
a.conn_id,
a.source,
a.program_name,
b.*
FROM
sys.processlist a,
performance_schema.threads b
WHERE b.thread_id = a.thd_id and b.THREAD_OS_ID= ${top_cpu_pid} \G"
抓取到的内容类似如下:
代码语言:txt复制 CPU占用最高的线程ID: 17779
----------------------------------------------------------
mysql: [Warning] Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
thd_id: 246677239
user: dts@192.168.31.181
conn_id: 242711474
source: NULL
program_name: NULL
THREAD_ID: 246677239
NAME: thread/sql/one_connection
TYPE: FOREGROUND
PROCESSLIST_ID: 242711474
PROCESSLIST_USER: dts
PROCESSLIST_HOST: 192.168.31.181
PROCESSLIST_DB: NULL
PROCESSLIST_COMMAND: Query
PROCESSLIST_TIME: 2
PROCESSLIST_STATE: executing
PROCESSLIST_INFO: select aaa_no, aaa_status,count(0) from sbtest.aaa_info where aaa_code = 'abcd' group by aaa_no, aaa_status limit 300
PARENT_THREAD_ID: NULL
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: TCP/IP
THREAD_OS_ID: 17779
RESOURCE_GROUP: USR_default
TIPS:可以使用python或golang封装下上面的这个脚本,集成到db-agent中,便于在数据库运维平台中调用和结果展示。
本文标签: MySQL CPU高如何找到相关的会话
版权声明:本文标题:MySQL CPU高如何找到相关的会话 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754922651a3181302.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论