MySql CPU激增原因分析

QPS激增会导致CPU占用升高

分析

        可以使用监控工具,查看CPU利用率曲线图和QPS曲线图进行对比。如果CPU曲线图波动情况跟QPS曲线图波动情况基本保持一致,可以明确明确CPU升高时QPS上升导致。反之,CPU曲线图对比QPS曲线图有不同步的峰值抖动,则说明在QPS未明显激增的情况下,CPU占用过高,则大概率跟慢SQL相关,可进行后续慢SQL的排查。

备注:如果没有监控工具协助分析的情况下,可以使用show global status like ‘Questions’ 和show global status like 'Uptime’查询,将两者相除得到就是QPS值。

show global status like 'Questions';
show global status like 'Uptime';

解决QPS激增:

  • 判断是否为实际业务激增导致,如果是实际业务激增导致,则可以通过资源扩充,满足业务激增的业务需求;
  • 找到具体激增的查询所对应的应用系统的接口,进行限流控制,以保护数据库并发访问量;
  • 应用采用读写分离,降低单点访问压力;
  • 查看sql是否存在循环插入或者更新的情况,改为批量操作,减少执行次数。

慢SQL会导致CPU升高

分析

    通过show processlist查看当前MySQL线程运行情况,主要通过 Time 连接时间和State当前SQL所处的状态来分析慢SQL,一般情况下如果存在Sending data说明该查询较慢,可以将info中的SQL复制出来通过explain查看详细的执行计划进行分析。

show processlist;

可通过MySql自带的慢SQL日志功能分析:

通过root登录数据库开启慢SQL查询日志,set global slow_query_log = ‘ON’,并设置慢SQL过滤时间set global long_query_time = 1(超过1秒视为慢SQL),指定慢SQL日志文件存放路径set global slow_query_log_file = ‘/var/lib/mysql/test_1116.log’。通过持续观察该慢SQL记录日志文件,查找出具体的慢SQL复制出来通过explain查看详细的执行计划进行分析。

解决慢SQL:

  • 紧急处理可以先通过杀死对应线程(kill process id),缓解问题;
  • 无索引或者索引失效情况下,新建有效索引或者优化SQL语句;
  • SQL中有大量聚合操作:简化SQL,将逻辑提炼到业务代码中;聚合操作异步或者预处理;
  • SQL返回的数据过多,改为分页查询;
  • 读写较多锁竞争激烈,分库分表或读写分离。

大量空闲连接会导致CPU升高

 show full processlist;

分析        

        通过 show full processlist 查看Comand 有大量的Sleep,再根据Time查看装填时间是否很长,如果存在大量长时间睡眠线程占用数据库连接,会导致数据库的吞吐量下降,进而导致阻塞也会引发CPU飘高的现象。

解决:

  • 修改MySql配置文件中的 wait_timeout 空闲等待时间,值越小则相对空闲线程就会越少,不过需要重启MySql才会生效;
  • 通过 set global wait_timeout = XX 方式热修改该参数。

MySql 问题排查常用命令

Sql执行计划,进行sql执行分析

explain + sql;

explain select * from user;

查看数据库当前执行线程状态

show full processlist;

其中重点字段包括Comand 、Time 、State、Info,可以查看当前所有连接线程中命令、持续时间、状态、对应的SQL信息。

查询当前运行的所有事物

select * from information_schema.INNODB_TRX ;

在执行结果中可以看到是否有表锁等待或者死锁,如果有死锁发生,可以通过下面的命令来杀掉当前运行的事务:KILL trx_mysql_thread_id 。

查看当前出现的锁

select * from information_schema.INNODB_LOCKS;

在改结果中可以看到锁的类型、所属事务ID、锁级别、锁模式等信息。

查看死锁

SELECT
	b.trx_state,
	e.state,
	e.time,
	d.state AS block_state,
	d.time AS block_time,
	a.requesting_trx_id,
	a.requested_lock_id,
	b.trx_query,
	b.trx_mysql_thread_id,
	a.blocking_trx_id,
	a.blocking_lock_id,
	c.trx_query AS block_trx_query,
	c.trx_mysql_thread_id AS block_trx_mysql_tread_id 
FROM
	information_schema.INNODB_LOCK_WAITS a
	LEFT JOIN information_schema.INNODB_TRX b ON a.requesting_trx_id = b.trx_id
	LEFT JOIN information_schema.INNODB_TRX c ON a.blocking_trx_id = c.trx_id
	LEFT JOIN information_schema.PROCESSLIST d ON c.trx_mysql_thread_id = d.id
	LEFT JOIN information_schema.PROCESSLIST e ON b.trx_mysql_thread_id = e.id 
ORDER BY
	a.requesting_trx_id;

查看InnoDB状态

SHOW ENGINE INNODB STATUS;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习】​CSMM和CMMI的关系你了解吗

CMMI和CSMM都是评估和提升软件组织能力成熟度的模型,但它们在起源、应用范围、模型结构和实施目的等方面存在一些区别。在当今竞争激烈的软件市场中,提升软件能力成为了多数组织追求成功的关键因素。而选择适合的体系标准能够助力企业发展得更加迅速。作…

企业实施定制鞋厂ERP软件需要注意哪些问题?

企业实施定制鞋厂ERP软件是个复杂的管理系统工程,为了成功地为企业定制实施ERP软件,需要注意和解决几个关键的问题: . 确立ERP系统实施和定制的决策者;. 做好前期咨询与调研工作;. 做好系统产品或项目迭代规划&#x…

【MySQL 数据宝典】【内存结构】- 003 Change Buffer 详解

一、 Change Buffer基本概念 Change Buffer:写缓冲区,是针对二级索引(辅助索引) 页的更新优化措施。 作用: 在进行DML操作时,如果请求的是 辅助索引(非唯一键索引)没有在缓冲池 中时,并不会立刻将磁盘页加载到缓冲池…

【Qt】设置QT标准对话框为中文字体

设置QT标准对话框为中文字体 一、问题二、解决方法1、找到Qt内置的翻译文件 qt_zh_CN.qm2、在代码中加载该文件 一、问题 在Qt中我们使用的标准对话框都是英文,例如下面的 字体选择对话框,但是实际中我们需要构建的是中文对话框。 所以我们需要使用Qt官…

T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件

大家好,我叫秋意零。 最近对公司进行日常运维工作时,出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时,业务也停了一个多小时。 起因是:我的部门直系领导,叫我**删除一个 …

LeetCode 2739. 总行驶距离

题目链接https://leetcode.cn/problems/total-distance-traveled/?envTypedaily-question&envId2024-04-25 简单题,看代码思考一下即可理解 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int res 0;while (mainTank >…

OmniPlan Pro for Mac v4.8.0中文激活版 项目流程管理工具

OmniPlan Pro for Mac是一款功能强大的项目管理软件,它以其直观的用户界面和丰富的功能,帮助用户轻松管理各种复杂的项目。 OmniPlan Pro for Mac v4.8.0中文激活版 通过OmniPlan Pro,用户可以轻松创建任务,设置任务的开始和结束时…

苹果开发者 D-U-N-S 编号申请 经历 记录

首先查询需要注册的公司是否有D-U-N-S码 (如果之前该公司上架了苹果的app,那一定有的,直接查询就可以使用) 查询地址:Sign In - Apple 输入公司的相关信息后并没有找到。。 滑动到最下面之后,可以根据当前填写的内容进行提交申请…

iframe实现pdf预览,并使用pdf.js修改内嵌标题,解决乱码问题

项目中遇到文件预览功能,并且需要可以打印文件.下插件对于内网来说有点麻烦,正好iframe预览比较简单,且自带下载打印等功能按钮. 问题在于左上方的文件名乱码,网上找了一圈没有看到解决的,要么就是要收费要会员(ztmgs),要么直接说这东西改不了. 使用: 1.引入 PDF.js 库&…

Day51:动态规划 LeedCode 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

300. 最长递增子序列 中等 相关标签 相关企业 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] …

《动手学深度学习(Pytorch版)》Task02:预备知识——4.25打卡

《动手学深度学习(Pytorch版)》Task02:预备知识——4.25打卡 数据操作N维数组——张量创建数组访问元素入门初始化矩阵 运算符广播机制索引和切片节省内存转换为其他Python对象转换为NumPy张量ndarray张量转换为Python标量 数据预处理安装pan…

00后卷王拿下20k的测试岗,原来面试这么简单。。。

先说一下我的情况,某211本计算机,之前在深圳那边做少儿编程老师,之后内部平调回长沙这边,回来之后发现有点难,这边可能是业绩难做,虚假承诺很厉害,要给那些家长虚假承诺去骗人家,技术…

算法学习笔记Day8——回溯算法

本文解决几个问题: 回溯算法是什么?解决回溯算法相关的问题有什么技巧?回溯算法代码是否有规律可循? 一、介绍 1.回溯算法是什么? 回溯算法就是个多叉树的遍历问题,关键在于在前序和后序时间点做一些操作…

操作steam搬砖有哪些风险?你有中招吗?揭秘有没有规避技巧?

一、关于steam账号的地区问题: steam账号地区不要频繁的去更换,这样很容易导致让账号红信不能操作使用。 二、关于steam账号的充值问题: 一定要充值正规的礼品卡图,否则遇到黑卡分分钟让你的账号红锁,从而造成账号里…

Nginx下载安装,什么是nginx,什么是反向代理,Windows下、linux下安装nginx(保姆级教程)

文章目录 一、Nginx简介为什么要使用NginxNginx的特点Nginx的相关概念正向代理反向代理动静分离负载均衡 二、Nginx安装1. Windows安装2. Linux安装 一、Nginx简介 Nginx 是一个高性能的 HTTP(静态资源服务器) 和 反向代理 Web 服务器。 为什么要使用N…

MySQL锁详解

之前的博客给小伙伴们分享了java中的锁,今天我们一起来看看mysql中有什么锁吧 一、图示 二、粒度分类 2.1、全局锁: 什么是全局锁? MySQL的锁定主要分为全局锁、表锁和行锁。现在我们来看看MySQL全局锁。 MySQL全局锁是针对整个数据库的锁…

FreeRTOS之列表

1.FreeRTOS的列表和列表项十分重要。列表类相当于链表,列表项则相当于链表中的节点。列表项的地址是非连续的,列表项的数量可随时修改。在OS中的任务状态和数量会发生改变,因此使用列表可以很好的满足需求。 列表和列表项的相关定义与操作函…

网工交换基础——生成树协议(01)

一、生成树的技术概述 1、技术背景 二层交换机网络的冗余性导致出现二层环路: 人为因素导致的二层环路问题: 二层环路带来的网络问题: 生成树协议的概念: STP(Spanning Tree Protocol)是生成树协议的英文缩写。该协议可应用于在网…

vue3 -- 项目使用自定义字体font-family

在Vue 3项目中使用自定义字体(font-family)的方法与在普通的HTML/CSS项目中类似。可以按照以下步骤进行操作: 引入字体文件: 首先,确保你的字体文件(通常是.woff、.woff2、.ttf等格式)位于项目中的某个目录下,比如src/assets/font/。 在全局样式中定义字体: 在你的全局…

智慧健康旅居养老产业,做智慧旅居养老服务的公司

随着社会的进步和科技的飞速发展,传统的养老模式已经无法满足 现代老年人的多元化 需求。智慧健康旅居养老产业应运而生,成为了一种新型的养老模式,旨在为老年人提供更加舒适、便捷、安全的养老生活。随着社会的进步和人口老龄化趋势的加剧&a…
最新文章