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

在业务服务提供能力的时候,常常会遇到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.hqwc.cn/news/93559.html

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

相关文章

动态规划之连续乘积最大子数组 连续和最大子数组

一. 连续和最大子数组 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,…

YOLOv5算法改进(8)— 替换主干网络之MobileNetV3

前言:Hello大家好,我是小哥谈。MobileNetV3是由Google团队在2019年提出的一种卷积神经网络结构,其目标是在保持高性能的同时减少计算延时。MobileNetV3相比于前一版本(MobileNetV2)在性能上有明显的提升。根据原论文&a…

jvm-堆

1.堆的核心概念 一个jvm实例只存在一个堆内存,堆也是java内存管理核心区域 java堆区在jvm启动的时候即被创建,其空间大小就确定了,是jvm管理最大的一块内存空间; 堆可以处于物理上不连续的内存空间,但在逻辑上它应该被…

使用Python对数据的操作转换

1、列表加值转字典 在Python中,将列表的值转换为字典的键可以使用以下代码: myList ["name", "age", "location"] myDict {k: None for k in myList} print(myDict) 输出: {name: None, age: None, loca…

vue中html引入使用<%= BASE_URL %>变量

首先使用src相对路径引入 注意: js 文件放在public文件下 不要放在assets静态资源文件下 否则 可能会报错 GET http://192.168.0.113:8080/src/assets/js/websockets.js net::ERR_ABORTED 500 (Internal Server Error) 正确使用如下:eg // html中引…

百亿级访问量,如何做缓存架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中,最近有小伙伴拿到了一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格,遇到一几个很重要的面试题:: 分布式缓存系统,如何架构?百亿级访…

达梦8 在CentOS 系统下静默安装

确认系统参数 [rootlocalhost ~]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited【1048576(即 1GB)以上或 unlimited】 scheduling priority (-e) 0 file size (blocks, -f) unlimite…

微软用 18 万行 Rust 重写了 Windows 内核

微软正在使用 Rust 编程语言重写其核心 Windows 库。 5 月 11 日——Azure 首席技术官 Mark Russinovich 表示,最新的 Windows 11 Insider Preview 版本是第一个包含内存安全编程语言 Rust 的版本。 “如果你参加了 Win11 Insider 环,你将在 Windows 内…

Linux 调试技术 Kprobe

目录 用途:一、技术背景1.1 kprobes的特点与使用限制1.2 kprobe原理 二、 基于kprobe探测模块的探测方式2.1、struct kprobe结构体2.2 kprobe API函数2.3 示例代码参考资料: 用途: 判断内核函数是否被调用,获取调用上下文、入参以…

【css】z-index与层叠上下文

z-index属性用来设置元素的堆叠顺序,使用z-index有一个大的前提:z-index所作用元素的样式列表中必须有position属性并且属性值为absolute、relative或fixed中的一个,否则z-index无效。 层叠上下文 MDN讲解 我们给元素设置的z-index都是有一…

E5071C是德科技网络分析仪

描述 E5071C网络分析仪提供同类产品中最高的RF性能和最快的速度,具有宽频率范围和多功能。E5071C是制造和R&D工程师评估频率范围高达20 GHz的RF元件和电路的理想解决方案。特点: 宽动态范围:测试端口的动态范围> 123 dB(典型值)快速测量速度:41毫秒全2端口…

【原创】H3C三层交换机的路由模式

网络拓扑图 将三层交换机当路由器使用 交换机配置 <H3C>dis stp briefMST ID Port Role STP State Protection0 GigabitEthernet1/0/1 DESI LEARNING NONE0 GigabitEthernet1/0/2 …