Redshift - 如何识别查询中的低性能区域?
Posted
技术标签:
【中文标题】Redshift - 如何识别查询中的低性能区域?【英文标题】:Redshift - How to identify low performing areas in Query? 【发布时间】:2018-07-27 13:15:59 【问题描述】:背景:我是 Redshift 和 PostgreSQL 的新手,想知道如何提高我的查询性能。我需要关于执行时间、使用的内存量或我运行的查询的其他相关指标方面的反馈。
问题:是否有一个简单的 SQL 命令/方法(?)来了解(至少是一个粗略的想法)查询中的哪些区域执行时间最长?
附加信息:我经常使用这样的公用表表达式:
WITH level1 as (SELECT Customerid
FROM customer_tbl
WHERE year > 2000),
level2 as (SELECT level1.Customerid,
purchasing_tbl.item,
purchasing_tbl.price
FROM level1
LEFT JOIN purchasing_tbl
ON purchasing_tbl.id = level1.Customerid
通常这种类型的结构可能有 10 多个级别,通常包括要麻烦得多(就更多的连接而言,where、case、具有不同聚合的窗口函数)。
在尝试提高性能时,了解例如与 level2 相比,level10 的执行时间。
客户:我使用 DBeaver 5.1.1。
【问题讨论】:
在 Postgres 中你可以使用explain (analyze) ...
但我认为 Redshift 中不可用
是的,说明 STL_QUERY 是 Redshift 中的一个系统视图,其中包含查询时间: https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERY.html
select starttime, enddtime, * from stl_query where querytxt = '' 按开始时间顺序排列 限制 100 ;
【讨论】:
【参考方案2】:有很多方法可以了解次优查询。
以下链接提供了不同的检查步骤。
https://docs.aws.amazon.com/redshift/latest/dg/query-performance-improvement-opportunities.html#suboptimal-data-distribution
AWS 提供了一些实用程序 - 在 GIT Hub 中可用。
https://github.com/awslabs/amazon-redshift-utils
这两种材料在调优查询方面都非常有用。
问候, 罗摩
【讨论】:
以上是关于Redshift - 如何识别查询中的低性能区域?的主要内容,如果未能解决你的问题,请参考以下文章
Redshift:连接到由表中的 SELECT * 组成的子查询/CTE 相当于连接表本身,还是性能下降?
Redshift - 重新设计表以使用 DIST 和 SORT 键(性能问题)