SVL_QUERY_SUMMARY - Amazon Redshift

SVL_QUERY_SUMMARY

使用 SVL_QUERY_SUMMARY 视图查找有关查询执行的一般信息。

SVL_QUERY_SUMMARY 视图包含 SVL_QUERY_REPORT 视图的数据子集。注意,SVL_QUERY_SUMMARY 中的信息来自对所有节点的汇总。

注意

SVL_QUERY_SUMMARY 视图只包含有关 Amazon Redshift 执行的查询的信息,不包含其它实用工具和 DDL 命令执行的查询的相关信息。有关 Amazon Redshift(包括 DDL 和实用工具命令)执行的所有语句的完整列表和信息,请查询 SVL_STATEMENTTEXT 视图。

SVL_QUERY_SUMMARY 对所有用户可见。超级用户可以查看所有行;普通用户只能查看其自己的数据。有关更多信息,请参阅 系统表和视图中的数据可见性

此表中的部分或全部数据也可以在 SYS 监控视图 SYS_QUERY_DETAIL 中找到。SYS 监控视图中的数据经过格式化处理,便于使用和理解。我们建议您使用 SYS 监控视图进行查询。

有关 SVCS_QUERY_SUMMARY 的信息,请参阅 SVCS_QUERY_SUMMARY

表列

列名称 数据类型 描述
userid integer 生成条目的用户的 ID。
query integer 查询 ID。可用于联接各种其他系统表和视图。
stm integer 流:查询中的一组并发段。查询拥有一个或多个流。
seg integer 段编号。一个查询包含多个区段,而且每个区段包含一个或多个步骤。查询段可并行运行。每个段在一个进程中运行。
step integer 运行的查询步骤。
maxtime bigint 供步骤运行的最大时长(单位为微秒)。
avgtime bigint 供步骤运行的平均时长(单位为微秒)。
rows bigint 查询步骤涉及的数据行数。
bytes bigint 查询步骤涉及的数据字节数。
rate_row double precision 每行的查询执行率。
rate_byte double precision 每字节的查询执行率。
label text 由查询步骤名称及(如适用)表 ID、表名称组成的步骤标签(例如 scan tbl=100448 name =user)。三位表 ID 通常是指临时表的扫描。如果显示 tbl=0,则通常是指常量值的扫描。
is_diskbased character(1) 此查询步骤是否作为基于磁盘的操作在集群中的任意节点上执行:true(t)或 false(f)。只有哈希、排序和聚合等特定步骤才能转到磁盘。许多类型的步骤始终在内存中执行。
workmem bigint 分配到查询步骤的工作内存量(单位为字节)。
is_rrscan character(1) 如果为 true (t),则表示对步骤使用了限制范围的扫描。默认为 false (f)。
is_delayed_scan character(1) 如果为 true (t),则表示对步骤使用了延迟扫描。默认为 false (f)。
rows_pre_filter bigint 对于永久表的扫描,这是在筛选标记为删除的行(虚影行)之前发出的行的总数。

示例查询

查看查询步骤的处理信息

下面的查询显示查询 87 的每个步骤的基本处理信息:

select query, stm, seg, step, rows, bytes from svl_query_summary where query = 87 order by query, seg, step;

此查询检索有关查询 87 的处理信息,如下面的示例输出所示:

query | stm | seg | step | rows | bytes -------+-----+-----+------+--------+--------- 87 | 0 | 0 | 0 | 90 | 1890 87 | 0 | 0 | 2 | 90 | 360 87 | 0 | 1 | 0 | 90 | 360 87 | 0 | 1 | 2 | 90 | 1440 87 | 1 | 2 | 0 | 210494 | 4209880 87 | 1 | 2 | 3 | 89500 | 0 87 | 1 | 2 | 6 | 4 | 96 87 | 2 | 3 | 0 | 4 | 96 87 | 2 | 3 | 1 | 4 | 96 87 | 2 | 4 | 0 | 4 | 96 87 | 2 | 4 | 1 | 1 | 24 87 | 3 | 5 | 0 | 1 | 24 87 | 3 | 5 | 4 | 0 | 0 (13 rows)

确定查询步骤是否溢出到磁盘

下面的查询显示查询 ID 为 1025 的查询是否有任何步骤(有关如何获取查询 ID 的信息,请参阅 SVL_QLOG 视图)溢出到磁盘,还是查询完全在内存中运行:

select query, step, rows, workmem, label, is_diskbased from svl_query_summary where query = 1025 order by workmem desc;

此查询返回以下示例输出:

query| step| rows | workmem | label | is_diskbased -----+-----+--------+-----------+---------------+-------------- 1025 | 0 |16000000| 141557760 |scan tbl=9 | f 1025 | 2 |16000000| 135266304 |hash tbl=142 | t 1025 | 0 |16000000| 128974848 |scan tbl=116536| f 1025 | 2 |16000000| 122683392 |dist | f (4 rows)

通过扫描 IS_DISKBASED 的值,您能够了解哪些查询步骤溢出到磁盘。对于查询 1025,哈希步骤在磁盘上运行。可能在磁盘上执行的步骤包括哈希、聚合和排序步骤。要仅查看基于磁盘的查询步骤,请在上面的示例中向 SQL 语句添加 and is_diskbased = 't' 子句。