数据库CPU飙高问题定位及解决

news2025/1/16 19:07:33

在业务服务提供能力的时候,常常会遇到CPU飙高的问题,遇到这类问题,大多不是数据库自身问题,都是因为使用不当导致,这里记录下业务服务如何定位数据库CPU飙高问题并给出常见的解决方案。

CPU 使用率飙升根因分析

在分析CPU使用率飙升根因前,先介绍下CPU使用率公式:

单位时间 CPU 资源 = 查询执行的平均成本 x 单位时间执行的查询数量  

可见,CPU使用率与【查询执行的平均成本】和【单位时间执行的查询数量】线性相关,而这两项就是我们常说的慢SQL以及数据库QPS。
所以,CPU使用率飙升可归纳为以下两点:
(1) 大量的慢SQL占用了cpu资源,拖垮了数据库,这类的慢sql常常表现为:查询的数据量过大,全表扫描、锁抢占甚至死锁、复杂查询等。
(2) QPS过高,本质上是数据库的承载的流量过大。

QPS过高问题定位及解决

如果想判断是否是因为QPS过高,导致CPU飙升,最好的方式是查看QPS曲线和CPU曲线是否保持一致,如果QPS曲线基本和CPU曲线保持一致,此时可断定CPU飙升必然存在QPS过高的原因。示例如下:
请添加图片描述
请添加图片描述
接下来就是确认是哪些SQL的QPS过高。对于MySQL数据库,可以通过root用户登录数据库,然后执行’SHOW PROCESSLIST’命令查看。
请添加图片描述
确定了高频SQL,接下来就是对业务进行分析,确认下为什么会执行如此频繁的调用并给出优化方案。
(1) 使用批量操作,将多个操作合并为一次请求,但此种方式需要考虑是否可以一次批量的数据有多大,避免造成慢SQL。
(2) 尽量从缓存中获取常用的查询结果,减轻数据库的读写压力。
(3) 尽量优化查询,减少查询的执行成本(逻辑 IO,执行需要访问的表数据行数),提高应用可扩展性。
(4) 定期归档历史数据、采用分库分表或者分区的方式减小查询访问的数据量。
(5) 增加只读实例,将对数据一致性不敏感的查询(比如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力。(读写分离)
(6) 升级实例规格,增加 CPU 资源。(首先确认是资源不足,然后才考虑扩资源)。

慢SQL问题定位及解决

一般情况下,数据库都会提供慢查询日志,所以只需根据慢查询日志来确定慢SQL接口。以MySQL为例,可以通过root用户登录数据库,执行SHOW VARIABLES LIKE 'SLOW_QUERY_LOG%'命令来查看慢日志的路径
请添加图片描述
在指定路径下获取到慢查询日志后,接下来就是分析慢日志,确认慢SQL。
请添加图片描述
分析慢查询日志,发现有一条SQL的执行时间超过2S。进一步使用explain查看执行计划,发现执行时间的确很长。
确定了慢SQL后,接下来就是对SQL进行分析,确定下优化方案。关于数据库访问性能的优化可以参考笔者之前的文章,这里列举下常用处理方式:
(1) 减少数据访问。确认下是否使用索引,如果没有,看看是否可以补充索引。如果已使用索引,确认下索引是否生效或失效。
(2) 减少返回的数据。如果没有使用分页,确认是否可以使用分页。如果返回字段包含大字段或字段,确认下是否可以分表或仅返回需要使用的字段。
(3) 减少交互次数。确认下是否可以引入批量操作,或提高单次fetch数据的size。
(4) 减少数据库CPU开销。针对大量的计算,确认下是否可以转移到客户端执行。针对排序场景,确认下是否有优化空间。
(5) 针对读多写少场景,考虑使用读写分离的设计。
(6) 升级下机器的资源配置。考虑是否机器的本身性能较低,不符合业务需求。

总结

本文介绍了数据库CPU飙高问题定位及解决,重点介绍了如何判断慢SQL和QPS过高。需要说明的是,以上内容是笔者基于网上的知识整理的内容,笔者并没有太多这方面的实践经验。但是,上述定位问题的思路和解决方案是有参考价值的。比如使用缓存减少数据库读写次数、批量操作、机器资源配置升级等方案,笔者在实际的产品维护中,都有使用。

参考

https://www.cnblogs.com/jyc123/p/16498247.html 数据库CPU使用率100% 排查记
https://blog.csdn.net/yw804909465/article/details/106445902 Mysql数据库高CPU问题定位和优化
https://www.cnblogs.com/wyy123/p/9258513.html MySQL CPU 使用率高的原因和解决方法
https://www.modb.pro/db/31741 mysql QPS 过高问题处理
https://www.cnblogs.com/wyy123/p/9258513.html MySQL CPU 使用率高的原因和解决方法

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

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

相关文章

云计算——虚拟化中的网络架构与虚拟网络(文末送书)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 前期回顾 前言 一.网卡虚拟化 1.网卡虚拟化方法&…

FAQ专题 | smardaten园区能源集控场景8大问题解答,建议收藏!

睿友们进来看,面对smardaten的IoT数据能力,你一定问过这些问题! 本期针对智慧园区、能源等集控场景下的数据接入常见问题,答案大放送啦~~(文末有福利👇!) Q1:如何在智慧…

虚拟机的使用

首先需要安装VMware软件,这是虚拟机,在里面可以实现在windows的笔记本上运行包括,windows11和linux系统的开发和研究。 VMware是一种虚拟化技术,可以让你在一台物理计算机上运行多个操作系统和应用程序,而不需要重启或…

Redis——如何解决redis穿透、雪崩、击穿问题

目录 一、查询商品信息的常规代码示例二、缓存击穿2.1、缓存击穿的理解2.2、缓存击穿的解决方案2.3、解决缓存击穿的代码示例 三、缓存雪崩3.1、缓存雪崩的理解3.2、缓存雪崩的解决方案3.2.1、缓存集中过期的情况3.2.2、缓存服务器宕机的情况3.2.3、缓存服务器断电的情况 3.3、…

lib61850 学习笔记一 (概念)

IEC61850 定义60多种服务满足变电站通信需求。支持在线获取数据模型,也支持IED水平通信(GOOSE报文) 术语定义 间隔 bay: 变电站由据应公共功能紧密连接的子部分组成。 例如 介于进线或者 出线 和母线之间的断路器;二条母线之间…

克隆 Windows 硬盘的 5 个理由

您什么时候需要克隆 Windows 硬盘? ​根据用户研究,以下是您的五个常见原因: 备份:克隆 Windows 硬盘是创建所有数据备份的推荐方法。如果发生任何硬盘故障,您可以快速将所有数据恢复到新硬盘。 升级:如…

【C51基础实验 点亮一颗LED】

51单片机项目基础篇 点亮一颗LED1、认识头文件1.1、头文件的书写格式分类1.2、头文件存放的内容 2、硬件电路设计3、软件设计4、编译结果5、结束语 点亮一颗LED 前言: 了解了前面篇章的内容,工程模板就不多赘述了,这篇就开始写51 单片机的第…

Compose眼珠跟随手势移动的笑脸

眼珠跟随手势移动的笑脸😁 前言一、Canvas画图笑脸微笑眼睛和眼珠子 二、跟随手势移动transformableanimateFloatAsState 总结 前言 阅读本文需要一定compose基础,如果没有请移步Jetpack Compose入门详解(实时更新) 在网上看到有…

MySql DATE_ADD()实践

DATE_ADD() 函数使用 定义和用法 DATE_ADD() 函数向日期添加指定的时间间隔。 DATE_ADD(date,INTERVAL expr type) -- 获取当前时间2天后的时间 SELECT DATE_ADD(NOW(),INTERVAL 2 day) -- 获取当前时间2天前的时间 SELECT DATE_ADD(NOW(),INTERVAL -2 day)

2023最新MathType7.4中文版数学公式编辑器

MathType是一款专业的数学公式编辑器,理科生专用的必备工具,可应用于教育教学、科研机构、工程学、论文写作、期刊排版、编辑理科试卷等领域。可视化公式编辑器轻松创建数学方程式和化学公式。兼容Office Word、PowerPoint、Pages、Keynote、Numbers 等7…

容器和宿主机之间的存储问题

简介 作用:方便备份恢复数据,实现数据共享 一、单台机器中 用数据卷挂载 二、多台机器中 ssh 建立免密通道将数据scp过去,然后再用卷挂载到容器内 nfs 网络文件系统 搭建nfs服务器客户端挂载 过程如下 一.安装软件包yum install -…

tp5使用redis及redis7.2安装到window系统上面

redis安装教程 redis7.2安装到window系统上面 https://download.csdn.net/download/qq_39161501/88269037 解决方案:修改配置php.ini文件 打开Apache目录下的php.ini文件,搜索extension,在空白处加上下列代码: 注:e…

Cloudpods 私有云平台有哪些优势?

作为一套完整的私有云管理软件,我们经常会被问到 Cloudpods 和其他的同类产品相比,有哪些优势?我总结了 2 个方面,供大家参考。 功能方面 产品化,开箱即用,易用性较高,基本上都可以傻瓜式的操…

网络直播源码UDP协议搭建:为平台注入一份力量

网络直播源码中的UDP协议的定义: UDP协议又名用户数据报协议,是一种轻量级、无连接的协议。在网络直播源码平台中,UDP协议有着高速传输与实时性的能力,尤其是在网络直播源码实时性要求较高的场景,UDP协议的应用有着重要…

GDB 源码分析 -- 断点源码解析

文章目录 一、断点简介1.1 硬件断点1.2 软件断点 二、断点源码分析2.1 断点相关结构体2.1.1 struct breakpoint2.1.2 struct bp_location 2.2 断点源码简介2.3 break设置断点2.4 enable break2.5 disable breakpoint2.6 delete breakpoint2.7 info break 命令源码解析 三、Linu…

我想开通期权?如何开通期权账户?

场内期权的合约由交易所统一标准化定制,大家面对的同一个合约对应的价格都是一致的,比较公开透明,期权开户当天不能交易的,期权开户需要满足20日日均50万及半年交易经验即可操作,下文科普我想开通期权?如何…

软件测试的CMA和CNAS分别是什么?有什么用途和区别?

各行各业都有不同的证书,第三方软件检测机构也需要经过考核检验以获取认可。今天我们将围绕软件测试的CMA和CNAS展开讨论,以帮助您更好地了解它们的定义、区别和用途。 一、CMA软件测试: 1、定义:CMA软件测试是指基于中国计量认…

maven部署

一、下载Maven 地址:Maven – Download Apache Maven 二、解压缩,设置环境变量 tar -xvf apache-maven-3.8.8-bin.tar.gz export MAVEN_HOME/opt/apache-maven-3.8.8 export PATH$MAVEN_HOME/bin:$PATH echo $MAVEN_HOME echo $PATH mvn -v

从零开始的Hadoop学习(四)| SSH无密登录配置、集群配置

1. SSH 无密登录配置 1.1 配置 ssh (1)基本语法 ssh 另一台电脑的IP地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 [atguiguhadoop102 ~]$ ssh hadoop103(3)回退到 hadoop102 [at…

linux离线安装rdbtools,需先安装python

离线安装python3 下载python包,下载地址:https://www.python.org/ftp/python/ 我选的是https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz 将文件上传至linux服务器,解压 tar -xf Python-3.9.0.tgz cd Python-3.9.0 mkdir /usr/l…