tencent cloud

云数据库 MySQL

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
产品优势
应用场景
数据库架构
隔离策略
经济型实例
产品功能列表
数据库实例
高可用性(多可用区)
地域和可用区
自研内核
内核概述
内核版本更新动态
功能类特性
性能类特性
安全类特性
稳定类特性
TXRocks 引擎
内核问题检查与修复
购买指南
计费概述
选型指南
购买方式
续费说明
欠费说明
退费说明
按量转包年包月
调整实例费用说明
备份空间收费说明
数据库审计计费说明
数据库代理商业化计费和活动说明
数据库代理计费周期说明
查看费用账单
快速入门
入门概述
创建 MySQL 实例
连接 MySQL 实例
SQL 洞察(原数据库审计)
数据库审计简介
查看审计实例列表
开通审计服务
查看审计日志
日志投递
配置事后告警
修改审计规则
修改审计服务
关闭审计服务
审计规则模板
SQL 审计规则(旧版)
查看审计任务
授权子用户使用数据库审计
MySQL 云盘版
MySQL 云盘版概述
创建 MySQL 云盘版实例
维护管理实例
查看实例监控
调整实例配置
其他功能相关操作
迁移或升级至 MySQL 云盘版
操作指南
使用限制
操作总览
维护管理实例
升级实例
CPU 弹性扩容
只读/灾备实例
数据库代理
数据库管理(DMC)
账号管理
参数配置
备份与回档
数据迁移
网络与安全
监控与告警
日志中心
只读分析引擎
标签
实践教程
腾讯云 MySQL 帮助实现 MySQL 5.7升级至 MySQL 8.0
MySQL 5.6升级到 MySQL 5.7方法和说明
云数据库 MySQL 数据库审计等保实践
构建全场景高可用架构
云数据库 MySQL 使用规范
应用程序配置自动重连功能
MySQL 主实例参数修改的影响
MyISAM 自动转换为 InnoDB 引擎限制
为云数据库 MySQL 创建 VPC
使用云数据库 MySQL 提高业务负载能力
两地三中心灾备建设
读写分离扩展云数据库 MySQL 性能
使用 DTS 将 InnoDB 数据迁移至 RocksDB
构建 LAMP 堆栈 Web 应用程序
构建 Drupal 网站
通过 Python 语言使用 MySQL API
主备实例查询数据不一致
白皮书
性能白皮书
安全白皮书
故障处理
连接相关
性能相关
实例数据同步延迟
设置大小写不敏感失败
通过命令获取 slow_query_log_file 失败
API 文档
History
Introduction
API Category
Instance APIs
调用方式
Data Import APIs
Database Proxy APIs
数据库审计相关接口
Security APIs
Task APIs
Backup APIs
Account APIs
Rollback APIs
Parameter APIs
Database APIs
Monitoring APIs
Log-related API
Data Types
Error Codes
常见问题
选型相关
计费相关
备份相关
回档相关
连接登录
参数修改
升级相关
账号权限
性能内存
运维相关
数据迁移
功能特性
控制台相关
日志相关
事件相关
数据库审计
实例切换影响
API 2.0 切换 3.0 指引
相关协议
服务等级协议
服务条款
通用参考
标准与认证
联系我们
词汇表

CPU 利用率过高

PDF
聚焦模式
字号
最后更新时间: 2024-12-31 16:12:29

现象描述

云数据库 MySQL 出现响应变慢、无法获取连接、超时等现象。当云数据库 MySQL CPU 利用率超过80%时,可能会出现业务响应变慢、超时、无法连接数据库等现象。
云数据库 MySQL CPU 使用情况,可在 MySQL 控制台 的实例监控页面或数据库智能管家 DBbrain 控制台 查看。
说明:
CPU 利用率过高时,建议优先进行 配置调整,提升 CPU 规格以确保业务正常运行,后续可参考本文进行排查和优化。

故障风险

若 MySQL CPU 的利用率长时间处于过高状态,会严重影响数据库的整体性能,极端情况下可能会出现实例 HANG 住的情况。
当 HA 探测到实例 HANG 住后,为了保证用户业务的高可用性,会触发主备切换,在主备切换的过程中,业务会出现短时间的不可用,实例不可用的时长正常情况下不超过60秒。如在业务高峰期发生了主备切换,会严重影响业务的稳定和连续性。
为避免业务因 CPU 资源不足而受影响,建议提前对 CPU 利用率过高的实例进行业务优化或者升级 CPU 资源。实例发生主备切换时会出现秒级的闪断,对于长连接需要应用具备重连的机制。

可能原因

MySQL 主要是两类线程占用 CPU:系统线程和用户线程。因此 MySQL 独占的云服务器上,仅需关注这两类线程的情况,就能解决大部分的故障场景。

用户线程

用户线程繁忙,大部分场景都是由“慢查询”引起的,除“慢查询”因素外,还有“计算量大”和“高 QPS”因素。
慢查询 进行长时间的计算,例如:order by,group by,临时表,join 等。这一类问题是查询效率不高,导致单个 SQL 语句长时间占用 CPU 时间。
计算量大 单纯的数据量比较多,导致计算量巨大。
高 QPS(Queries Per Second ) 单纯的 QPS 压力高,所以 CPU 的时间被用满了,如:4 核的服务器用来支撑 20k 到 30k 的点查询,每个 SQL 占用的 CPU 时间并不多,但是因为整体的 QPS 很高,所以 CPU 的时间被占满了。

系统线程

在实际的环境中,系统线程遇到问题的情况会比较少,一般来说,多个系统线程很少会同时跑满,只要云服务器的可用核心数大于等于 4 ,一般也不会遇到 CPU 利用率过高,当然有一些 bug 可能会有影响,如下图所示:


解决思路

大部分故障场景,基本是用户线程繁忙导致,因此本文主要介绍用户线程导致的 CPU 利用率过高问题,提供对应的解决方案。
慢查询:建议使用 DBbrain 来排查和优化,详情请参见 慢查询
计算量大:因处理数据量大,导致 CPU 利用率过高,处理措施详情请参见 计算量大
高 QPS:因访问量过大,导致 CPU 利用率过高,处理措施详情参见 高 QPS

处理步骤

慢查询

导致 CPU 利用率过高的异常 SQL 语句,可以使用数据库智能管家 DBbrain 来排查和优化:
异常诊断(推荐):7 * 24小时异常发现诊断,提供实时优化建议。操作详情请参见 使用“异常诊断”功能排查数据库异常情况
慢 SQL 分析:针对当前实例出现的慢 SQL 进行分析,并给出慢 SQL 的优化建议。操作详情请参见 使用“慢 SQL 分析”功能排查导致 CPU 利用率过高的 SQL
审计日志分析:利用云数据库审计数据(全量 SQL),多维度深入分析 SQL 语句并给出优化建议。操作详情请参见 使用“审计日志分析”功能排查导致 CPU 利用率过高的 SQL
MySQL 慢查询时间(long_query_time)的默认值是10s,在遇到性能问题时,若发现没有慢查询,建议将其参数调成1s ,再观察业务周期内的慢查询,进而对其慢查询进行优化。若参数调整后,在其业务周期内依然未发现慢查询,而 CPU 利用率依然偏高,建议升级 CPU 的配置,进而提高数据库的整体性能。

计算量大

若数据量比较大,即使索引和执行计划没什么问题,也会导致 CPU 利用率过高,而且结合 MySQL one-thread-per-connection 的特性,并不需要太多的并发就能把 CPU 使用率跑满。
一般来讲,这类问题有如下两种比较常规的解决方案:
读写分离,把这一类查询放到平时业务不怎么用的只读从库去。
在程序段拆分 SQL,把单个大查询拆分成多个小查询。

高 QPS

升级 CPU 的配置,进而提高数据库的整体性能。
挂载只读实例,分担主实例压力。
优化查询语句,提升执行效率。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈