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'
子句。