STL_SCAN - Amazon Redshift

STL_SCAN

分析查询的表扫描步骤。此表中行的步骤数始终为 0,因为扫描是分段中的第一步。

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

注意

STL_SCAN 仅包含在主集群上运行的查询。它不包含在并发扩展集群上运行的查询。要访问在主集群和并发扩展集群上运行的查询,我们建议您使用 SYS 监控视图 SYS_QUERY_DETAIL。SYS 监控视图中的数据经过格式化处理,便于使用和理解。

表列

列名称 数据类型 描述
userid integer 生成该条目的用户 ID。
query integer 查询 ID。查询列可用于连接其他系统表和视图。
slice integer 标识运行查询所在切片的标识符。
segment integer 标识查询区段的数字。
step integer 运行的查询步骤。
starttime 时间戳 查询开始的时间(采用 UTC 表示)。总时间包括排队和执行时间。秒的小数部分以 6 位精度表示。例如:2009-06-12 11:29:19.131358
endtime 时间戳 查询完成的时间(采用 UTC 表示)。总时间包括排队和执行时间。秒的小数部分以 6 位精度表示。例如:2009-06-12 11:29:19.131358
tasknum 整数 分配用于运行步骤的查询任务进程的数量。
rows bigint 处理的总行数。
bytes bigint 该步骤中所有输出行的大小(以字节为单位)。
fetches bigint 此信息仅供内部使用。
type integer 扫描类型的 ID。有关有效值的列表,请参阅下表。
tbl integer 表 ID。
is_rrscan character(1) 如果为 true (t),则表示对步骤使用了限制范围的扫描。
is_delayed_scan character(1) 此信息仅供内部使用。
rows_pre_filter bigint 对于永久表的扫描,这是在筛选标记为删除的行(虚影行)之前和应用用户定义的查询筛选条件之前发出的行的总数。
rows_pre_user_filter bigint 对于永久表的扫描,这是在筛选标记为删除的行(虚影行)之后但在应用用户定义的查询筛选条件之前处理的行的数量。
perm_table_name character(136) 对于永久表的扫描,这是扫描的表的名称。
is_rlf_scan character(1) 如果为 true (t),则表示对步骤使用了行级别筛选。
is_rlf_scan_reason integer 此信息仅供内部使用。
num_em_blocks integer 此信息仅供内部使用。
checksum bigint 此信息仅供内部使用。
runtime_filtering character(1) 如果为 true (t),则表示应用了运行时筛选器。
scan_region 整数 此信息仅供内部使用。
num_sortkey_as_predicate 整数 此信息仅供内部使用。
row_fetcher_state 整数 此信息仅供内部使用。
consumed_scan_ranges bigint 此信息仅供内部使用。
work_stealing_reason bigint 此信息仅供内部使用。
is_vectorized_scan character(1) 此信息仅供内部使用。
is_vectorized_scan_reason 整数 此信息仅供内部使用。
row_fetcher_reason bigint 此信息仅供内部使用。
topology_signature bigint 此信息仅供内部使用。
use_tpm_partition character(1) 此信息仅供内部使用。
is_rrscan_expr character(1) 此信息仅供内部使用。
scanned_mega_value character(1) 此信息仅供内部使用。此信息显示给定的扫描步骤是否扫描了大值。大值将存储在多个块中。原定设置情况下,块大小为 1 MB,大值大于原定设置中的 1 MB。

扫描类型

类型 ID 描述
1 网络中的数据。
2 压缩共享内存中的永久用户表。
3 临时行式表。
21 从 Amazon S3 加载文件。
22 从 Amazon DynamoDB 中加载表。
23 从远程 SSH 连接中加载数据。
24 从远程集群(已排序区域)中加载数据。这可用于调整大小。
25 从远程集群(未排序区域)中加载数据。这可用于调整大小。
28 在多个表上使用 UNION ALL 从时间序列视图读取数据。
29 从 Amazon S3 外部表中读取数据。
30 读取 Amazon S3 外部表的分区信息。
33 从远程 Postgres 表中读取数据。
36 从远程 MySQL 表中读取数据。
37 从远程 Kinesis 流中读取数据。

使用说明

理想情况下,rows 应相对接近于 rows_pre_filterrowsrows_pre_filter 之间的一个很大的区别是,它意味着执行引擎将要扫描稍后将被丢弃的行(这样做的效率较低)。rows_pre_filterrows_pre_user_filter 之间的区别是扫描中虚影行的数量。运行 VACUUM 可移除标记为删除的行。rowsrows_pre_user_filter 之间的区别是查询筛选的行的数量。如果用户筛选器丢弃了大量行,则查看您选择的排序列,或者,如果这是由于大量未排序的区域造成的,请运行 vacuum。

示例查询

以下示例显示 rows_pre_filter 大于 rows_pre_user_filter,因为该表已删除尚未真空化的行(虚影行)。

SELECT query, slice, segment,step,rows, rows_pre_filter, rows_pre_user_filter from stl_scan where query = pg_last_query_id(); query | slice | segment | step | rows | rows_pre_filter | rows_pre_user_filter -------+--------+---------+------+-------+-----------------+---------------------- 42915 | 0 | 0 | 0 | 43159 | 86318 | 43159 42915 | 0 | 1 | 0 | 1 | 0 | 0 42915 | 1 | 0 | 0 | 43091 | 86182 | 43091 42915 | 1 | 1 | 0 | 1 | 0 | 0 42915 | 2 | 0 | 0 | 42778 | 85556 | 42778 42915 | 2 | 1 | 0 | 1 | 0 | 0 42915 | 3 | 0 | 0 | 43428 | 86856 | 43428 42915 | 3 | 1 | 0 | 1 | 0 | 0 42915 | 10000 | 2 | 0 | 4 | 0 | 0 (9 rows)