AnalyticDB MySQL版的SQL诊断功能可以对SQL查询的Query、Stage和算子(Operator)级别的信息分别进行统计,再在统计信息的基础上进行诊断并提供调优建议。本文介绍如何查看和分析Query级别诊断结果。
诊断结果类型
说明 查看Query级别诊断结果的方法,请参见查看诊断结果。
查询返回客户端的数据量较大
- 问题大量数据返回到客户端会导致慢查询,还会占用部分网络前端资源。
- 建议
- 减少直接返回到客户端的数据量。例如您可以在查询时增加LIMIT关键字或增加查询的过滤条件。
- 通过外表将数据导出至其他系统(例如OSS。详细操作步骤,请参见通过外表将数据导出到OSS)来减少返回到客户端的数据量。
查询消耗的内存资源较大
- 问题查询消耗了大量内存,可能导致其他查询无法执行、执行变慢甚至影响到AnalyticDB MySQL版集群整体的稳定性。
- 建议
先定位查询消耗较大内存的原因,再通过AnalyticDB MySQL版SQL诊断中的执行计划找到消耗内存较多的Stage或者算子,更多详情,请参见消耗内存的慢查询和使用执行计划分析查询。
查询生成的Stage个数较多
查询读取的数据量较大
- 问题查询读取的数据量较大,会占用较多的磁盘IO资源,影响其他查询或者数据的写入过程。
- 建议
先找到读取数据量较大的Stage以及相关的表扫描算子(TableScan)。您可以在AnalyticDB MySQL版SQL诊断的Stage层或算子层执行计划中的统计信息区域查看对应Stage扫描行数、扫描量,或TableScan算子的输入行数和输入大小来判断Stage和TableScan算子的扫描数据量。更多详情,请参见Stage统计信息和算子统计信息。
找到扫描数据量较大的表扫描算子后,您可以考虑如下方式进行调优:- 在查询中增加AND过滤条件。
- 调整已有的过滤条件,减少过滤后的数据量。
- 检查是否存在没有下推的过滤条件。若存在,请参见过滤条件没有下推中的建议进行优化。