专栏首页johnnyxsu技术交流分享云数据库MySQL CPU飙升排查流程
原创

云数据库MySQL CPU飙升排查流程

在日常使用MySQL的过程中,会遇到 CPU 使用率过高甚至达到 100% 的情况。CPU飙升会导致数据库无法连接,事务无法提交等一系列问题。本文基于日常问题处理介绍造成CPU飙升的原因以及解决方法。

排查流程及解决方案

业务突增

客户业务突增导致CPU负载飙升,定位方法可以查看监控指标:每秒执行操作数、每秒执行事务数。如果这两个指标的变化与CPU的变化趋势能对应上,说明客户业务有突增。

例如:客户反馈数据库一点CPU出现飙升,通过查询监控中的每秒执行操作数以及每秒执行事务数发现在对应的时间点有突增,由此分析CPU的上升是由于客户本身的业务导致。

每秒执行操作数和事务数统计

解决方案

实例的 QPS高,需要结合慢查询进行分析,看下SQL是否有优化的空间,如果SQL较为简单,执行效率也比较高,此时,SQL执行优化的效果也不会很好,需要从应用架构以及实力规格等因素来解决问题:

1.升级实例规格,增加 CPU 资源。

2.增加只读实例,将对数据一致性不敏感的查询(比如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力。

3.定期归档历史数据、采用分库分表或者分区的方式减小查询访问的数据量。

4.尽量优化查询,减少查询的执行成本(逻辑 IO,执行需要访问的表数据行数),提高应用可扩展性。

慢查询

查看监控运行线程,运行线程数如果运行线程数的变化趋势与CPU的变化趋势能够对应上,可以说明数据库吞吐已经出现问题,可能存在有慢查询(运行线程数一般大于20就有问题),可以通过监控中可以看到慢查询的数量。

运行线程数和慢查询数监控

执行效率低的SQL一般会被记录在慢查询中。如果想要确定具体是那些SQL查询效率低,可以在控制台下载慢查询日志。如果慢查询日志为空,可以将慢查询阈值调低(long_query_time这个参数在控制台调整,一般调整到0.5s就可以),这样慢SQL就会记录到慢日志里面,然后在下载慢查询日志就可以分析具体是那些SQL执行效率较低。

解决方案

实例出现CPU飙升,但 QPS(每秒执行的查询次数)不高;查询执行效率低、执行时需要扫描大量表中数据。此时可能是由于存在慢查询导致,查询执行效率低,为了获取预期的结果就需要访问大量的数据,导致平均逻辑IO增高,此时就会是CPU利用率过高。

此时需要DBA,定位效率低的查询、优化查询的执行效率、降低查询执行的成本。

具体定位的过程可以参考:

1.通过在控制台下载慢查询日志,定位效率低的SQL并进行优化 2.也可以通过 show processlist; 或 show full processlist; 命令查看当前执行的查询,反复执行,找到慢查询的process ID ,运行kill 慢查询的id 命名杀掉慢查询进程。

总结

MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然会使CPU占用过高。CPU过高,可以做如下方案进行优化:

1.打开慢查询日志,查询是否是某个SQL语句占用过多资源,如果是的话,可以对SQL语句进行优化,比如优化 insert 语句、优化 group by 语句、优化 order by 语句、优化 join 语句等等;

2.考虑索引问题;

3.定期分析表,使用optimize table;

4.优化数据库对象;

5.考虑是否是锁问题;

6.调整一些MySQL Server参数,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;

7.如果数据量过大,可以考虑使用MySQL集群或者搭建高可用环境。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL 案例:Threads_running 与慢查询

    年前本应该是回顾一年工作和收尾的阶段,奈何各种促销,活动都等着春节,因此也遇到了不少的问题,回顾了一下最近遇到的问题,发现有好几个问题比较类似,正好整理一下,作...

    王文安@DBA
  • 记一次redis cpu 100%的紧急bug

    前段时间遇到一个棘手问题,mq消费速度突然从30/s变成1/s,而且还持续了很长的一段时间,吓得我赶紧动手排查问题。但是mq消费速度慢的原因,可能有很多种(例如...

    林老师带你学编程
  • 记一次腾讯云数据库表死锁的经历

    禹都一只猫olei
  • 数据库流行度6月排行榜:Oracle飙升MySQL止跌回升

    六一儿童节,虽然是大家快乐的假期,但是也宣告了2018年进入中场。在DB-Engines的6月排行榜上,不同的数据库产品竞争也进入中场。先预祝大家中场收获满满!...

    数据和云
  • TiDB 海量 region 集群调优实践

    在 TUG 网易线上企业行活动中,来自网易游戏的资深数据库工程师田维繁老师分享了 TiDB 海量 region 集群调优主题,以下内容整理自当天活动分享实录。 ...

    PingCAP
  • 618数据洪峰来了 一键下单背后都有哪些技术支撑?

    618大促来临,在零点的时候,你打开购物车、点点点、清空,整个过程一气呵成。但背后,成千上万的数据在马不停蹄、加速流转,以保障消费体验流畅有序。 腾讯云和数...

    腾讯云数据库 TencentDB
  • 一个线上MySQL表查询引发的报警

    今天遇见了一个线上的MySQL问题,问题的内容是某个阿里云ECS频繁报警,报警的内容是:CPU使用率超过阈值。下面是具体的Grafana报警中负载、CPU...

    AsiaYe
  • 分布式系统如何定位压力问题监控监控什么呢实际的压力问题怎么发生的我用的工具

    大宽宽
  • 校招被问过的31道MySQL面试题(附答案)

    无论是秋招还是社招,在面试中 MySQL 被问到频率基本是 100%,被问到最多的当属索引和一些性能优化,例如慢查询的排查啊, sql 执行的很慢的原因啊,等等...

    帅地
  • MySQL主从复制断开的一个奇怪问题

    今天下午,线上阿里云RDS的本地只读从库宕机了,还好,这个个服务器上的数据库实例只是提供了一部分的读需求,很快就复原了,但是上面所有的数据库实例都down掉...

    AsiaYe
  • linux服务器负载问题排查思路以及常用指令总结

    最近在维护公司线上的服务器,排查了一些问题,所以做一个总结。有一段时间,线上环境变得很卡,客户端请求很多都报超时,因为线上没有良好的apm监控,所以只能通过流量...

    lyb-geek
  • 这六种原因,真能让 Java 应用 CPU 使用率飙升至 100% 吗?

    1、无限循环的while会导致CPU使用率飙升吗? 2、经常使用Young GC会导致CPU占用率飙升吗? 3、具有大量线程的应用程序的CPU使用率是否较高? ...

    Bug开发工程师
  • Elasticsearch长文本查询拒绝问题分析及性能优化

    腾讯云ES客户-某头部在线教育公司在微信群中反馈连续两天在晚上19:30左右业务侧查询ES集群时出现较大面积查询拒绝现象,且查询耗时从原先的100ms以下上涨到...

    吴容
  • 数据库流行度5月排行榜:Oracle企稳PostgreSQL飙升

    五一假期,宣告2018年的1/3已然飘过,在匆匆流逝的时光里,有些变化潜移默化,有些变化轰轰烈烈,然而有紧迫感的人,必然计日以待、计日以行。

    数据和云
  • 迎接重生,微盟数据库全面上云纪实

    在经历了惨痛的黑天鹅事件以及激烈的数据恢复过程后,作为微盟DBA的我们进行了深刻的反省和自查,作为公司的核心资产,数据库也得到了前所未有的重视。如何保证数据安全...

    腾讯云数据库 TencentDB
  • 我的Mysql查询SQL优化总结

    当我们遇到一个慢查询语句时,首先要做的是检查所编写的 SQL 语句是否合理,优化 SQL 语句从而提升查询效率。所以对 SQL 有一个整体的认识是有必要的。

    程序员小明
  • 商业网站你是这样优化的吗?

    服务器配置,2台负载网站,一台分发网站,一台数据库。配置32核,32G,50M带宽。看着配置完全可以满足网站需求,但是巧的事情发生了,网站一台服务器时候还不是很...

    思梦php
  • 第三方接口超大数据获取方案(下载-解析-入库模式)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    林老师带你学编程
  • golang面试

    Michel_Rolle

扫码关注云+社区

领取腾讯云代金券