说明:本文暂不适用于MySQL 5.7基础版的实例。关于MySQL 5.7基础版实例的CPU使用率过高的解决方案,请参见
MySQL CPU使用率高的原因和解决方法。
在使用MySQL数据库的过程中,经常会因CPU使用率过高而导致系统异常,如响应变慢、无法获取连接、出现报错等。在CPU使用率过高的场景中,有95%以上都是由异常SQL所致。另外,大量行锁冲突、行锁等待或后台任务也有可能导致实例CPU使用率过高,但这些状况出现的概率非常低,本文不做讨论。本文将介绍如何使用RDS的
CloudDBA功能来定位系统中的慢SQL和其它异常SQL语句,然后您可通过CloudDBA提供的建议优化这些SQL语句来降低实例的CPU使用率以提升系统效率。
导致CPU使用率较高的原因
数据库中的数据以数据块为基本操作单位,一个MySQL数据块是8KB,一次逻辑读或物理读对应一个数据块的读取操作。
当数据库执行业务查询语句(包括数据修改操作)时,CPU会先从内存中请求数据块。如果内存中有对应的数据,CPU执行计算任务后会将结果返回给用户。如果内存中没有对应的数据,系统会触发从磁盘读取数据的操作。这两个数据获取过程分别是逻辑读和物理读,如下图所示。
[url=http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/pic/65233/cn_zh/1515673261662/%E9%80%BB%E8%BE%91%E8%AF%BB%E4%B8%8E%E7%89%A9%E7%90%86%E8%AF%BB.png][/url]