本文将介绍如何使用数据库自治服务DAS(Database Autonomy Service)(原CloudDBA)来定位系统中的慢SQL和其它异常SQL语句,您可通过自治服务提供的建议优化这些SQL语句,降低实例的CPU使用率以提升系统效率。
问题描述
在使用云数据库RDS MySQL的过程中,经常会因CPU使用率过高而导致的系统异常,例如响应变慢、无法获取连接和出现报错等。
问题原因
在CPU使用率过高的场景中,有95%以上的问题都是由异常SQL所致。当业务提交的SQL语句不够优化时,就会对数据库的性能产生如下影响。另外,大量行锁冲突、行锁等待或后台任务也有可能导致实例CPU使用率过高,但这些状况出现的概率非常低,本文不做讨论。
使数据库产生大量的逻辑读,从而导致CPU使用率过高。
使数据库产生大量的物理读,从而导致IOPS和I/O延时过高。
关于逻辑读和物理读的相关介绍,请参见更多信息。
解决方案
阿里云提醒您:
如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
使用SQL诊断功能排查异常SQL语句
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏中,选择
。选择要查询的时间,单击确定。
说明目前只支持显示最近1个月内的慢SQL数据。
若实例中有慢SQL,图示中会以图的方式显示慢SQL产生的时间点和个数。单击图中的时间点,下方的列表就会显示其对应的所有慢SQL信息。
如何分析慢SQL。
重点关注慢日志明细中的返回行和扫描行的值。每条SQL语句都有很多扫描行数但返回行数都为0,说明系统产生了大量的逻辑读和物理读。产生物理读是因为内存大小有限,不可能缓存所有数据,当有大量数据请求时必然会产生大量物理I/O请求。大量的逻辑读会占用大量的CPU资源,导致CPU使用率上涨。
单击SQL栏中的SQL语句,查看该SQL语句的详情。
单击SQL优化建议,即可查看CloudDBA给该SQL语句提出的优化建议。
从下图的分析结果可以看出,该SQL语句执行时缺少对应的索引,导致执行该语句时要全表扫描。另外,根据MySQL的数据更新机制,每次执行该语句时整个表格都会被锁,进而使问题更加严重。凡是执行该语句的session都会出现排队等待的状况,单次执行成本又极高,所以就很容易导致CPU使用率较高甚至达到100%的状况。
根据优化建议优化异常SQL语句,CPU使用率过高的问题就会随之而解。
使用SQL统计功能排查异常SQL语句
若使用SQL统计功能排查异常SQL语句,请参见使用说明。
SQL审计需另外计费,为节约成本,您可以在查看数据库SQL语句前开通SQL审计,然后待问题排查完毕后再关闭该功能。
更多信息
数据库中的数据是以数据块为基本操作单位,一个MySQL数据块是8 KB,一次逻辑读或物理读对应一个数据块的读取操作。当数据库执行业务查询语句(包括数据修改操作)时,CPU会先从内存中请求数据块。如果内存中有对应的数据,CPU执行计算任务后,将结果返回给用户。如果内存中没有对应的数据,系统会触发从磁盘读取数据的操作。这两个数据获取过程分别是逻辑读和物理读,如下图所示。
相关文档
适用于
云数据库RDS MySQL