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

这篇具有很好参考价值的文章主要介绍了数据库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过高的原因。示例如下:
数据库CPU飙高问题定位及解决,数据库系统概念,数据库,mysql,cpu,cpu飙高
数据库CPU飙高问题定位及解决,数据库系统概念,数据库,mysql,cpu,cpu飙高
接下来就是确认是哪些SQL的QPS过高。对于MySQL数据库,可以通过root用户登录数据库,然后执行’SHOW PROCESSLIST’命令查看。
数据库CPU飙高问题定位及解决,数据库系统概念,数据库,mysql,cpu,cpu飙高
确定了高频SQL,接下来就是对业务进行分析,确认下为什么会执行如此频繁的调用并给出优化方案。
(1) 使用批量操作,将多个操作合并为一次请求,但此种方式需要考虑是否可以一次批量的数据有多大,避免造成慢SQL。
(2) 尽量从缓存中获取常用的查询结果,减轻数据库的读写压力。
(3) 尽量优化查询,减少查询的执行成本(逻辑 IO,执行需要访问的表数据行数),提高应用可扩展性。
(4) 定期归档历史数据、采用分库分表或者分区的方式减小查询访问的数据量。
(5) 增加只读实例,将对数据一致性不敏感的查询(比如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力。(读写分离)
(6) 升级实例规格,增加 CPU 资源。(首先确认是资源不足,然后才考虑扩资源)。

慢SQL问题定位及解决

一般情况下,数据库都会提供慢查询日志,所以只需根据慢查询日志来确定慢SQL接口。以MySQL为例,可以通过root用户登录数据库,执行SHOW VARIABLES LIKE 'SLOW_QUERY_LOG%'命令来查看慢日志的路径
数据库CPU飙高问题定位及解决,数据库系统概念,数据库,mysql,cpu,cpu飙高
在指定路径下获取到慢查询日志后,接下来就是分析慢日志,确认慢SQL。
数据库CPU飙高问题定位及解决,数据库系统概念,数据库,mysql,cpu,cpu飙高
分析慢查询日志,发现有一条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 使用率高的原因和解决方法文章来源地址https://www.toymoban.com/news/detail-684203.html

到了这里,关于数据库CPU飙高问题定位及解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【性能优化】CPU利用率飙高与内存飙高问题

    📫作者简介: 小明java问道之路 , 2022年度博客之星全国TOP3 ,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。          📫 热衷分享,喜欢原

    2024年02月05日
    浏览(42)
  • 生产问题(十四)K8S抢占CPU导致数据库链接池打爆

            线上一天出现了两次数据库连接失败的大量报错,一开始以为是数据库的问题,但是想了想如果是数据库的问题,应该会有大量的应用问题         具体分析之后,发现其实是容器cpu出现了Throttled,导致大量线程阻塞         既然出现了报错,又没有发布,先

    2024年01月25日
    浏览(79)
  • 大数据之LibrA数据库系统告警处理(ALM-12016 CPU使用率超过阈值)

    告警解释 系统每30秒周期性检测CPU使用率,并把实际CPU使用率和阈值相比较。CPU使用率默认提供一个阈值范围。当检测到CPU使用率连续多次(可配置,默认值为10)超出阈值范围时产生该告警。 平滑次数为1,CPU使用率小于或等于阈值时,告警恢复;平滑次数大于1,CPU使用率

    2024年02月06日
    浏览(39)
  • openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话

    196.1 强制结束指定的问题会话 196.1.1 问题现象 有些情况下,为了使系统继续提供服务,管理员需要强制结束有问题的会话。 196.1.2 处理办法 以操作系统用户omm登录主机。 使用如下命令连接数据库。 postgres为需要连接的数据库名称,8000为端口号。 从当前活动会话视图查找问

    2024年01月18日
    浏览(41)
  • openGauss学习笔记-198 openGauss 数据库运维-常见故障定位案例-分析查询效率异常降低的问题

    198.1 分析查询效率异常降低的问题 198.1.1 问题现象 通常在几十毫秒内完成的查询,有时会突然需要几秒的时间完成;而通常需要几秒完成的查询,有时需要半小时才能完成。 198.1.2 处理办法 通过下列的操作步骤,分析查询效率异常降低的原因。 使用analyze命令分析数据库。

    2024年01月16日
    浏览(51)
  • 解析线上HBase集群CPU飙高的原因与解决方案

    在日常的运维工作中,CPU负载高是一种常见的故障状况,它可能对系统的正常运行和性能产生不利影响。为了准确地定位具体的异常原因,掌握一些专业的工具和方法是至关重要的。本文将通过一个实际的案例,详细介绍如何排查在线上HBASE集群CPU飙高问题,并分享相关工具

    2024年02月19日
    浏览(33)
  • 如何解决缓存和数据库的数据不一致问题

    数据不一致问题是操作数据库和操作缓存值的过程中,其中一个操作失败的情况。实际上,即使这两个操作第一次执行时都没有失败,当有大量并发请求时,应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步,更新缓存和更新数据库。但是这两步会引

    2024年02月21日
    浏览(31)
  • 解决常见的数据库1045密码错误问题

    注:可视化工具 Navicat 15 for MySQL 当我们某天忘记我们的root用户密码,登录不到数据库时,只需要修改root用户的密码即可。 1.首先看一下报错信息1045 2.看到这个问题,我们可以找到我们MySQL安装路径下的my.ini文件,使用记事本或者edit打开它。 如果不能打开放到桌面进行打开修

    2024年02月08日
    浏览(51)
  • 向量数据库如何解决大语言模型的“幻觉”问题

    向量数据库在解决大语言模型的“幻觉”问题方面可以发挥一定的作用。这个问题通常指的是大型语言模型在生成文本时过度依赖于训练数据,导致生成的内容过于特定,缺乏广泛的泛化性。以下是向量数据库可能采取的一些方法: 多样性的文本表示 : 向量数据库存储了大

    2024年01月17日
    浏览(40)
  • 解决使用php将excel数据导入数据库报错问题

    今天在用 phpexcel 将数据xlxs数据导入到数据库发现一直报错 Array and string offset access syntax with curly braces is no longer supported 百度下发现PHP7.4后面版本,不再能够使用花括号来访问数组或者字符串的偏移,而我当前php版本是8.1 没办法根据他这个报错 一步一步找到对应的文件将{} 修改

    2024年04月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包