查询分析工作流程
如果查询所花费的时间比预期的时间长,请使用以下步骤来确定并纠正可能对查询性能产生负面影响的问题。如果您不确定系统中的哪些查询可能会受益于性能调整,请先运行 确定最适合优化的查询 中的诊断查询。
-
确保您的表格按照最佳实践进行设计。有关更多信息,请参阅 设计表的 Amazon Redshift 最佳实践。
-
查看是否可以删除或归档表中的任何不需要的数据。例如,假设您的查询始终以过去 6 个月的数据为目标,但您的表中有最近 18 个月的数据。在这种情况下,您可以删除或归档较旧的数据,以减少必须扫描和分配的记录数。
-
对查询中的表运行 VACUUM 命令以回收空间并对行进行重新排序。如果未排序的区域很大,并且查询在联接或谓词中使用排序键,则运行 VACUUM 会有所帮助。
-
对查询中的表运行 ANALYZE 命令,以确保统计信息是最新的。如果查询中的任何表最近在大小上发生了很大变化,则运行 ANALYZE 会有所帮助。如果运行完整的 ANALYZE 命令需要过长时间,则对某一列运行 ANALYZE,以减少处理时间。这种方法仍会更新表大小的统计数据;表大小在查询计划中是一个很重要的因素。
-
确保查询在每个类型的客户端(基于客户端使用的连接协议的类型)上都运行一次,以便查询得到编译和缓存。该种方法可加快查询的后续运行速度。有关更多信息,请参阅 影响查询性能的因素。
-
检查 STL_ALERT_EVENT_LOG 表来识别和纠正查询中可能存在的问题。有关更多信息,请参阅 查看查询警报。
-
使用 SVL_QUERY_SUMMARY 和 SVL_QUERY_REPORT 视图来获取摘要信息并使用它来优化查询。有关更多信息,请参阅 分析查询摘要。
有时,应该快速运行的查询要被迫等到另一个运行时间较长的查询完成。在这种情况下,查询本身可能无需改进,但您可以通过为不同类型的查询创建和使用查询队列来提高整体系统性能。要了解查询的队列等待时间,请参阅查看查询的队列等待时间。有关配置查询队列的更多信息,请参阅实施工作负载管理。