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、锁级别、锁模式等信息。

查看死锁

SELECTb.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 
FROMinformation_schema.INNODB_LOCK_WAITS aLEFT JOIN information_schema.INNODB_TRX b ON a.requesting_trx_id = b.trx_idLEFT JOIN information_schema.INNODB_TRX c ON a.blocking_trx_id = c.trx_idLEFT JOIN information_schema.PROCESSLIST d ON c.trx_mysql_thread_id = d.idLEFT JOIN information_schema.PROCESSLIST e ON b.trx_mysql_thread_id = e.id 
ORDER BYa.requesting_trx_id;

查看InnoDB状态

SHOW ENGINE INNODB STATUS;

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

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

相关文章

socket套接字在tcp客户端与tcp服务器之间的通信,以及socket中常用的高效工具epoll

1.socket(套接字)的概念 Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议,主要利用三元组【ip地址,协议&am…

【芯片科普】运算放大器用作比较器的注意事项

运算放大器和比较器 比较器和运算放大器电气符号非常相像,都是有反相、同相两个输入端和一个输出端的器件,输出端的输出电压范围一般在供电的轨到轨之间;同时比较器和运算放大器都具有低偏置电压、高增益和高共模抑制比的特点。 图1 运算放…

自由场、半自由场、扩散场

按声场性质可以将声场分为三类:自由声场、半自由声场、扩散声场 分别对应着全消声室,半消声室,混响室 自由声场: 声源在均匀、各向同性媒介中传播时,不计边界影响的声场,此时声场中只有直达声没有反射声。…

测试工程师面试准备(软硬件)

您好,我叫XXX。学历XX,XXX专业毕业。X年X月份毕业,但是去年二月份已经找到工作开始实习了,目前工作一年了,这一年的过程中我主要负责软件的开发和测试和软硬件联调测试工作。具体来说就是,在软件开发完成后…

在Linux系统中炫酷的输出命令可以让终端看起来更有趣

在Linux系统中,有许多炫酷的输出命令可以让终端看起来更有趣。 以下是一些流行的命令,以及它们的描述和安装方法: cmatrix:这个命令会在终端中显示一个类似于《黑客帝国》中的绿色代码雨效果。安装命令为`sudo apt-get install cmatrix`.sl:当你错误地输入`ls`为`sl`时,…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套 部分题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正,仅供参考)(共十套)获取(WX:didadidadidida313&#xff0c…

Qwen1.5微调

引子 由于工作上需要,一直在用Qwen做大模型推理,有个再训练的需求,特此琢磨下Qwen的训练。OK,我们开始吧。 一、安装环境 查看显卡驱动版本 根据官网推荐 OK,docker在手,天下我有。 docker pull qwenll…

rancher-rke2 修改--service-cluster-ip-range

一、场景 因为需要部署新版本的ingress-nginx,而部署ingress-nginx的时候需要使用hostnetowrk以及nodeport的端口为80和443,service-node-port-range 默认为30000开始,部署会报错。 二、产生修改的需求 1、api-servier的配置文件位置 默认是没有的&…

LabVIEW学习记录 - 实时显示时间

LabVIEW操作 - 实时显示时间 在程序框图,选择函数->定时->格式化日期/时间字符串 该函数的使用手册说明: 鼠标选择“格式化日期/时间字符串”->创建->输入控件->输入格式 查看时间代码格式: 编程->定时->获取时间日…

Ali-Sentinel-入口控制

​ 归档 GitHub: Ali-Sentinel-入口控制 测试 // 在 demo-spring-webmvc 里新建测试类public class TestMain {public static void main(String[] args) throws InterruptedException {initFlowRules(); // 初始化规则while (true) {// 1.5.0 版本开始可以直接利用 try-with…

Stream流入门

Stream流:操作集合和数组的工具。 Stream的三类方法: 获取Stream流:创建一条流水线,并把数据放上去。中间方法:流水线上的操作,可以进行多次操作。终结方法:一个Stream流只能有一个终结方法,是…

Linux交换空间的创建使用

交换空间: 换出:将内存中不常用(冷数据)的放去硬盘里 换出:内存要使用这部分数据时,将硬盘的这部分数据放入内存 在内存和硬盘上用来交换数据的空间就是交换空间 创建交换空间的步骤 1.去磁盘上创建一个分…

想进大厂,请先想清楚这几个问题

今天被一个小伙伴问:“进大厂难吗?” 我想都不想回答:“简单啊~ 从北京郎家园,坐817或者816,终点站就是大厂。” 小伙伴翻了一个大大的白眼... “我是说工作上的事!” 瞬间懂了,工作场所&…

C语言 | Leetcode C语言题解之第47题全排列II

题目: 题解: int* vis;void backtrack(int* nums, int numSize, int** ans, int* ansSize, int idx, int* perm) {if (idx numSize) {int* tmp malloc(sizeof(int) * numSize);memcpy(tmp, perm, sizeof(int) * numSize);ans[(*ansSize)] tmp;return…

OssUtil工具上传文件

安装、上传、下载 1. 安装ossutil sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash2. 配置ossutil ossutil config3. 验证是否已成功安装ossutil ossutil 如果屏幕中输出ossutil所有支持的命令,表明已成功安装ossutil。# 完整上传 os…

ruoyi-nbcio-plus基于vue3的flowable修正加签与跳转的前端问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

idea 中导入的项目maven不自动下载依赖包

导入之后不会自动引入依赖包,如下图,external libraries 下没有依赖 解决方案:重新更新下maven的Local repository 即可

MMSeg搭建自己的网络

配置结构 首先,我们知道MMSeg矿机的配置文件很多,主要结构如下图所示。 在configs/_base_下是模型配置、数据集配置、以及一些其他的常规配置和运行配置,四类。 configs/all_config目录下存放,即是将四种配置聚合在一起的一个总…

产品推荐 | BittWare基于Altera Agilex“M FPGA的lA-860m加速卡

01 产品概述 BittWare的lA-860m是一款Altera Agilex“M系列FPGA卡,针对吞吐量和内存密集型应用进行了优化。M 系列 FPGA 具有广泛的内存层次结构,包括集成高带宽存储器 (HBM2e) 和硬内存片上网络 (NoC)&am…

自动化测试超详细总结

简介 软件测试是软件开发过程中一个必不可少的环节。传统的软件测试方式通常是手动测试,即由专业的测试人员通过手动操作软件应用程序来验证其功能和性能。然而,这种方式存在许多缺点,例如时间耗费、测试结果不稳定、测试覆盖率不够高等。 为…