在 Redshift 中按总运行时间、执行时间、等待/排队时间列出排名靠前的查询?

Posted

技术标签:

【中文标题】在 Redshift 中按总运行时间、执行时间、等待/排队时间列出排名靠前的查询?【英文标题】:List top queries by total runtime, execution time, wait/queue time in Redshift? 【发布时间】:2019-07-05 12:10:38 【问题描述】:

我知道亚马逊为 Redshift 提供了各种管理脚本,比如这个:

https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminScripts/top_queries.sql

它按运行时列出了​​最热门的查询,我也发现了类似的:

https://chartio.com/learn/amazon-redshift/identifying-slow-queries-in-redshift/

但是我想知道是否有与上述查询类似但除了执行时间之外还显示队列/等待时间的查询?

来自这篇文章:

How can I get the total run time of a query in redshift, with a query?

我推测stl_query表包含执行时间+等待时间,但stl_wlm_query包含total_exec_time,也就是执行时间。

更新:我有以下内容,可以满足我的需求,但它似乎只返回最后一个月左右的数据,有什么想法可以获取旧数据吗?

    SELECT
w.userid,
w.query,
w.service_class_start_time AS "Day",
w.total_queue_time / 60000000 AS "Total Queue Time Minutes",
w.total_exec_time / 60000000 AS "Total Exec Time Minutes",
w.total_queue_time / 60000000 + w.total_exec_time / 60000000 AS "Total Time  Minutes"
FROM
stl_wlm_query w
ORDER BY
6 DESC

【问题讨论】:

【参考方案1】:

该查询正在使用stl_wlm_query 表。

来自STL Tables for Logging - Amazon Redshift:

为管理磁盘空间,STL 日志表仅保留大约两到五天的日志历史记录,具体取决于日志使用情况和可用磁盘空间。如果您想保留日志数据,则需要定期将其复制到其他表或将其卸载到 Amazon S3。

【讨论】:

谢谢约翰!我还不能投票,但这很有帮助。【参考方案2】:

以下查询将按执行时间列出排名靠前的查询,但正如 John 上面提到的,只会返回两到五天的日志历史记录。

SELECT
w.userid,
w.query,
w.service_class_start_time AS "Day",
w.total_queue_time / 60000000 AS "Total Queue Time Minutes",
w.total_exec_time / 60000000 AS "Total Exec Time Minutes",
w.total_queue_time / 60000000 + w.total_exec_time / 60000000 AS "Total Time  Minutes"
FROM
stl_wlm_query w
ORDER BY
6 DESC

【讨论】:

以上是关于在 Redshift 中按总运行时间、执行时间、等待/排队时间列出排名靠前的查询?的主要内容,如果未能解决你的问题,请参考以下文章

在 Redshift 中按类别选择 n 个最大计数

Redshift:查询结果缓存与查询编译缓存

Redshift 查询花费太多时间

在 Redshift 中执行表交换的最佳实践

如何以编程方式在 RedShift sql 脚本文件上运行

Redshift/Java:SQL 执行挂起并且永不返回