如何快速定位到影响mysql cpu飙升的原因——筑梦之路

  通常我们只需要执行show processlist 进行查看,一般执行时间最长的SQL八九不离十就是罪魁祸首,但当show processlist的输出有近千条,那么很难第一眼就发现有问题的SQL,那么如何快速找到呢?其实也非常简单。我们知道mysqld是单进程多线程。那么我们可以使用top获取mysqld进程的各个线程的cpu使用情况。

top -H -p mysqld_pid

测试sql:

select * from cpu_h order by rand() limit 1;

可以看到是线程22682占用cpu比较高,接着通过查看performance_schema.threads表,找到相关SQL

select * from performance_schema.threads where thread_os_id=22682

再通过show processlist看

 找到processlist id以后,就可以直接使用命令kill。

python脚本:

(统计活跃线程SQL执行的次数)

#!/usr/bin/python# -*- coding:utf-8 -*-import argparseimport MySQLdbimport argparseimport commandsimport sysimport MySQLdb.cursorsfrom warnings import filterwarningsfrom warnings import resetwarningsfilterwarnings('ignore', category = MySQLdb.Warning)reload(sys)sys.setdefaultencoding('utf8')def init_parse():parser = argparse.ArgumentParser(epilog='by yayun @2022',)parser.add_argument('-n','--num',required=False,default=1,help='获取多少条最耗费cpu的记录,默认1条')parser.add_argument('-a','--active',action='store_true',default=False,help='统计活跃线程各类SQL的条目数')return parserdef mysql_exec(sql):try:   conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='xx',port=3306,connect_timeout=15,charset='utf8')curs = conn.cursor()curs.execute(sql)conn.commit()curs.close()conn.close()except Exception,e:print "mysql execute: " + str(e)def mysql_query(sql):conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='xx',port=3306,connect_timeout=15,charset='utf8',cursorclass = MySQLdb.cursors.DictCursor)cursor = conn.cursor()count=cursor.execute(sql)if count == 0 :result=0else:result=cursor.fetchall()return resultcursor.close()conn.close()if __name__ == '__main__':parser = init_parse()args = parser.parse_args()slow_sql_numbers=args.numactive_thread_status=args.activemysqld_pid = commands.getoutput("cat /data/mysql/3306/pid_mysql.pid")get_mysql_thead_cmd="top -H -p %s  -n 1 | grep mysqld | head -n %s | awk '{print $1,$2}' | sed 's/mysql//g'" % (mysqld_pid,slow_sql_numbers)tmp_mysqld_thread=commands.getoutput(get_mysql_thead_cmd).split()mysqld_thread=[]for i in tmp_mysqld_thread:try:a=i.replace('\x1b[0;10m\x1b[0;10m','')a=i.replace('\x1b[0;10m','')mysqld_thread.append(int(a))except Exception,e:passactive_thread_sql="select  * from ( select max(user) as user,max(db) as db , max(info) as runningsql,count(*) as rungingsql_cnt from information_schema.processlist where db is not null  and info is not null and info like '%SELECT%' group by user, db, md5(info)   union all     select max(user) as user,max(db) as db ,max(info) as runningsql,count(*) as rungingsql_cnt from information_schema.processlist where db is not null  and info is not null and info like 'UPDATE%' group by user, db,md5(info)  ) a order by 4 desc limit 10"if active_thread_status:resut=mysql_query(active_thread_sql)if resut:for i in resut:print "运行条目统计: %s | 运行SQL: %s  | 运行用户:%s " % (i['rungingsql_cnt'],i['runningsql'],i['user'])print "============================================="    processlist_id=[]if len(mysqld_thread) >= 2:new_mysqld_thread=tuple(mysqld_thread)get_slow_sql="select PROCESSLIST_ID,PROCESSLIST_USER,PROCESSLIST_HOST,\PROCESSLIST_DB,PROCESSLIST_TIME,PROCESSLIST_INFO from performance_schema.threads where thread_os_id in %s" % (new_mysqld_thread,)else:new_mysqld_thread=mysqld_threadget_slow_sql="select PROCESSLIST_ID,PROCESSLIST_USER,PROCESSLIST_HOST,\PROCESSLIST_DB,PROCESSLIST_TIME,PROCESSLIST_INFO from performance_schema.threads where thread_os_id=%s" % (new_mysqld_thread[0])new_resut=mysql_query(get_slow_sql)for b in new_resut:if b['PROCESSLIST_ID']:processlist_id.append(b['PROCESSLIST_ID'])if b['PROCESSLIST_INFO'] != None:print "SQL已运行时间: %s秒|执行SQL用户: %s |执行SQL来源ip: %s |操作的库: %s |SQL详情: %s |PROCESSLIST ID: %s" % (b['PROCESSLIST_TIME'],b['PROCESSLIST_USER'],b['PROCESSLIST_HOST'],b['PROCESSLIST_DB'],b['PROCESSLIST_INFO'],b['PROCESSLIST_ID'])if processlist_id:print "============================================="print "以上耗费CPU资源的SQL是否需要杀掉? 请输入Y/N"while True:in_content = raw_input("请输入:")if in_content == "Y":for p in processlist_id:sql="kill %s" % (p) mysql_exec(sql)exit(0)elif in_content == "N":print("退出程序!")exit(0)else:print("输入有误,请重输入!")

搜集来自:如何快速找到影响MySQL CPU升高的原因

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS面试题:什么是原型和原型链

一、原型 函数都有prototype属性,称之为原型,也称为原型对象原型 1.可以放一些属性和方法,共享给实例对象使用 2.原型可以做继承 二、原型链: 对象都有proto 属性,这个属性指向它的原型对象,原型对象也是对也有 proto 属性,指向原型对象的原型对象,这样一…

drand- 随机数获取和验证

文章目录 一、drand- 随机数获取和验证1. 什么是drand2. drand组织3. 获取公开随机性(Randomness)4. 获取私有随机性(Randomness)5. 通过http端点 获取6. 随机数验证 二、部署安装1. 通过源码安装2. 使用3. 创建Drand部署 三、其他…

论文摘要一般要写些什么内容?

论文摘要通常需要包含以下几个关键内容: 研究背景与目的:简要介绍研究的背景信息,包括研究领域的重要性、当前的研究现状以及存在的问题。然后,清晰地阐述研究的目的、研究问题或研究假设,让读者明白研究的出发点和意图…

推荐一个图片识别的llama3微调版本 清华面壁项目

水一篇: MiniCPM-V是面向图文理解的端侧多模态大模型系列。该系列模型接受图像和文本输入,并提供高质量的文本输出。自2024年2月以来,我们共发布了4个版本模型,旨在实现领先的性能和高效的部署,目前该系列最值得关注的…

工业4.0利器:MES系统

工业4.0利器:MES系统 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,…

2024/6/3随笔

上周二又出差了,出差三天,跟公司里的一个年轻小哥一起去合肥,他教我怎么操作BI机器,就是ATE测试里面的老化测试,输入命令运行机器那种,说实话,他们写的这个脚本命令没有我自己写的uoskit写的好&…

Java如何实现pdf转base64以及怎么反转?

问题需求 今天在做发送邮件功能的时候,发现邮件的附件部分,比如pdf文档,要求先把pdf转为base64,邮件才会发送。那接下来就先看看Java 如何把 pdf文档转为base64。 两种方式,一种是通过插件 jar 包的方式引入&#xf…

英语学习笔记31——Where‘s Sally?

Where’s Sally? Sally在哪? 词汇 Vocabulary garden /ˈɡɑːrdn/ n. 花园,院子(属于私人) 区别:park n. 公园(公共的) 例句:我的花园非常大。    My garden is very big. 搭…

【linux-imx6ull-设备树点灯】

目录 1. 设备树简介1.1 编译-引用1.2 设备树文件结构1.3 设备树节点介绍1.3.1 特殊节点chosen 1.4 节点内容追加 2. 设备树常用OF操作函数2.1 节点寻找类2.2 属性提取类2.3 其它常用类 4. 设备树下LED实验4.1 实验简介4.2 添加LED设备节点4.3 获取设备节点并提取属性4.3.1 获取…

深度学习-05-反向传播理论知识

深度学习-05-反向传播理论知识 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

关系数据库设计规范化

文章目录 基础知识规范化1NF(第一范式)2NF(第二范式)3NF(第三范式)BCNF(Boyce Codd Normal Form,巴克斯范式)4NF(第四范式) 模式分解总结 基础知识…

java面试题及答案2024,java2024最新面试题及答案(之一)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Ja…

03_03_初识SpringAOP和应用

一、SpringAOP的初识与原理 1、概述 AOP:面向切面编程OOP:面向对象编程面相切面编程:是基于OOP基础之上的新编程思想,OOP面向的主要是对象是类,而AOP面向的主要对象是切面,它在处理日志、安全管理、事务管…

D365 Project Operations

目录 D365包含哪些模块? D365 Project Operations是什么? D365 Project Operations优势 D365 Project Operations部署方案 总结 D365包含哪些模块? 微软的D365是一套功能强大的企业管理解决方案,其中包含了多种模块&#xff…

结账和反结账

结账与反结账功能在财务软件和会计系统中扮演着重要的角色,以下是关于这两个功能的详细解释: 一、结账功能 结账功能是计算和结转各个会计科目本期发生额和期末余额的过程,同时标志着一定时期内财务活动的结束和财务数据的固化。结账功能的…

深入React Hoooks:从基础到自定义 Hooks

使用 useContext useContext 是另一个常用的 Hook,它可让我们在函数组件中轻松访问 React 的 context。如果你的应用程序依赖于一些全局状态,或者你希望避免将 props 一层一层地传递到子组件,context 很有用。你可以在父组件设置一个值&…

C语言 链表经典OJ题

链表经典OJ题 移除链表元素链表的中间节点反转链表合并两个有序链表分割链表 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head […

mysql5.7血泪史

因为工作需要,需要将mysql8.0.33版本切换为mysql5.7系列。 在这个过程当中,首先我将mysql8卸载干净。 mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手_卸载mysql-CSDN博客 然后发现mysql5.7在官网上下载很…

python小练习03

1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…

lua vm 二: 查看字节码、看懂字节码

本文讲一讲如何查看 lua 的字节码&#xff08;bytecode&#xff09;&#xff0c;以及如何看懂字节码。 以下分析基于 lua-5.4.6&#xff0c;下载地址&#xff1a;https://lua.org/ftp/ 。 1. 查看字节码 1.1 方法一&#xff1a;使用 luac luac 是 lua 自带的编译程序&#x…