MySQL数据库CPU使用率过高,怎么办
背景
在使用MySQL过程,想必都有遇到过CPU突然过高,或者达到100%的情况。
数据库执行查询或数据修改操作时,系统需要执行大量的逻辑读操作,其中逻辑IO包含执行查询所需访问表的数据行数。所以系统需要消耗大量的CPU资源以维护从存储系统读取到内存中的数据一致性。
原因
应用负载(QPS)高:
特征:数据库QPS高,查询比较简单,执行效率高,优化余地小。
表现:没有出现慢查询,或者慢查询不是主要原因,且QPS和CPU使用率曲线变化吻合。
常见场景:该状况常见于应用优化过的在线事务交易系统(例如订单系统)、高读取率的热门Web网站应用、第三方压力工具测试(例如Sysbench)等。
慢SQL导致查询成本高(查询访问表数据行数多):
特征:实例的QPS不高,查询执行效率低、执行时需要扫描大量表数据、优化余地大。 表现:存在慢查询,QPS和CPU使用率曲线变化不吻合。
原因分析:由于查询执行效率低,为获得预期的结果需要访问大量的数据导致平均逻辑IO高,因此在QPS并不高的情况下(例如网站访问量不大),也会导致实例的CPU使用率偏高。
大量行锁冲突、行锁等待
解决
应用负载(QPS)高
对数据库CPU进行升级
数据库查询语句较多可考虑增加读库
可使用缓存查询的尽量使用缓存处理如使用Redis
对于查询数据比较静态、查询重复度高、查询结果集小于1MB的应用,考虑开启查询缓存(Query Cache)。
定期归档历史数据、采用分库分表或者分区的方式减小查询访问的数据量
尽量优化查询,减少查询的执行成本,提高应用可扩展性。
慢SQL导致查询成本高
定位效率低的查询、优化查询的执行效率、降低查询执行的成本。
通过以下方式定位效率低的查询:
执行以下SQL语句,查看当前执行的查询语句。
mysql> SHOW FULL PROCESSLIST\G
*************************** 1. row ***************************Id: 1User: system userHost:db: NULL
Command: ConnectTime: 1030455State: Waiting for master to send eventInfo: NULL
*************************** 2. row ***************************Id: 2User: system userHost:db: NULL
Command: ConnectTime: 1004State: Has read all relay log; waiting for the slaveI/O thread to update itInfo: NULL
如果没有FULL关键字, 则仅显示字段 SHOW PROCESSLIST中每个语句的前 100 个字符 。
查询时间长、运行状态为
Sending data(该线程正在读取和处理 SELECT语句的行,并将数据发送到客户端。由于在此状态期间发生的操作往往会执行大量磁盘访问(读取),因此它通常是给定查询生命周期内运行时间最长的状态)、
Copying to tmp table(服务器正在复制到内存中的临时表)、
Copying to tmp table on disk(服务器正在复制到磁盘上的临时表。临时结果集变得太大。因此,线程将临时表从内存中更改为基于磁盘的格式以节省内存)、
Sorting result(对于SELECT语句,这类似于Creating sort index,但对于非临时表)
的查询会话可能均包含性能问题。
通过explain 查看执行计划优化语句解决。
大量行锁冲突、行锁等待
解决方案参考链接:
Lock wait timeout exceeded; try restarting transaction解决
参考连接:
https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html
https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html
往者不可谏,来者犹可追
MySQL数据库CPU使用率过高,怎么办相关推荐
- mysql数据库占用太多的CPU_mysql数据库CPU使用率过高解决方案
压测时,经常会出现mysql数据库CPU使用率过高,下面介绍一下简单的问题定位方法: 1.确定是否有慢sql语句: 1)登录数据库服务器,连接数据库:执行命令:mysql -uroot -p 密码 2 ...
- mysql数据库cpu占用特别高
(1)多实例的服务器,先top查看是那一个进程占用CPU多: (2)show processeslist 查看线程是否有锁住: (3)查看慢查询,找出执行时间长的sql:explain分析sql是否走 ...
- mysql的cpu使用率突然增高_mysql cpu使用率过高解决方法
mysql cpu使用率过高解决方法 1 mysql查看正在运行的语句 并且查看运行最多的mysql语句 MySQL 打开 general log 后,所有的查询语句都会记录在 general log ...
- mysql查询cpu使用率100%_数据库CPU使用率100% 排查记
1.背景: 在监控线上数据库的运行是否安全.正常的过程中,cpu 使用率是一个重要的指标,一旦cpu使用率飙升至90%+甚至达到100%,必然会对数据库的正常工作产生影响. 在排查数据库的cpu 飙升 ...
- 接口压测时MySql对CPU占用过高
记录MySql过多占用CPU资源的排查过程及解决方案 场景: 1.需要对项目的接口进行压力测试 2.大部分接口压测是正常的 3.只有部分接口压测时MySql对CPU的占用达到90% 压测: 压测线 ...
- linux服务器 cpu使用率过高,服务器CPU使用率过高排查与解决思路
发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...
- linux tomcat cpu占用高,排查tomcat服务器CPU使用率过高
tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是由于部署的web程序的问题. 一.征象形貌 在一次线上环境,前台接见页面的速率越来越慢,从浏览器F12中看到发出的请求都是 ...
- CPU使用率过高问题排查及Linux之top命令用法详解
文章目录 问题 解决方案 top命令用法 top各输出参数含义 一.top前5行统计信息 二.进程信息 Top 1的用法 %CPU和us%的区别 问题 公司连续2天服务器告警CPU使用率过高问题,查看 ...
- 解决 SQL Server 中 CPU 使用率过高的问题
本文提供了诊断和修复运行 Microsoft SQL Server 的计算机上 CPU 使用率过高导致的问题的过程. 尽管在 SQL Server 中出现 CPU 使用率过高有许多可能原因,但以下原因 ...
- CPU 使用率过高报警,我要原地爆炸了
最近一直在忙着招人,发现那些来面试的候选者,代码能力虽然不错,但很多都卡在性能优化问题上. 其实,不论你是高级工程师,还是架构师,性能优化的问题都少不了.想彻底解决,就要全面了解程序设计.算法分析.编 ...
最新文章
- (C++)1027 打印沙漏
- 企业数据中心和互联网数据中心有何不同?
- Oracle数据类型简介【转贴】
- UVALive 6257 Chemist's vows --一道题的三种解法(模拟,DFS,DP)
- 从xml中返回的对象,和new 返回的对象时不同的。
- python爬取正确但不出文件_使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...
- 计算机北大核心期刊排名2020,2017年版北京大学核心期刊目录4(第八版,2018~2020适用)...
- ubuntu中网易云音乐图标打不开应用的问题
- 计算机换色带技巧,平乐园电脑维修店教你爱普生针式打印机更换色带基本办法...
- 语音房间实现的一种方式
- PLSQL--表空间管理
- 【分治算法】大整数乘法
- OpenCV 图像分块 分块图像合并
- UDT协议解析及C/C++代码实现
- 故事篇:终于给老婆讲明白什么是logback了
- Mac最佳视频编辑器推荐
- 把计算边界层高度的公式放入模式
- Android手机通讯录备份和恢复项目
- 破解工具SoftICE与TRW2000操作入门
- ArcGIS Pro教程 | 2#用户界面和交互
热门文章
- wordpress安装教程_如何安装WordPress –完整的WordPress安装教程
- background复合属性顺序_background(css复合写法)
- FTP响应码与应答码
- C++ 中调用 Jscript 的函数
- Gradient Descent
- BIOS调整服务器性能模式,BIOS优化性能提升明显 菜鸟必看的BIOS优化设置教程
- TP-LINK三层网管交换机通过console接口完成复位操作
- idou老师教你学Istio12 : Istio 实现流量镜像
- 一个屌丝程序猿的人生(四十二)
- 计算机安装xp蓝屏怎么办,xp蓝屏,详细教您教你怎么修复xp蓝屏问题