STL_UNIQUE
分析在 SELECT 列表中使用 DISTINCT 函数时或者在 UNION 或 INTERSECT 查询中删除重复项时发生的执行步骤。
STL_UNIQUE 对所有用户可见。超级用户可以查看所有行;普通用户只能查看其自己的数据。有关更多信息,请参阅 系统表和视图中的数据可见性。
注意
STL_UNIQUE 仅包含在主预置集群上运行的查询。它不包含在并发扩展集群或无服务器命名空间上运行的查询。要访问在主集群、并发扩展集群和无服务器命名空间上运行的查询的解释计划,我们建议您使用 SYS 监控视图 SYS_QUERY_DETAIL。SYS 监控视图中的数据经过格式化处理,便于使用和理解。
表列
列名称 | 数据类型 | 描述 |
---|---|---|
userid | integer | 生成该条目的用户 ID。 |
query | integer | 查询 ID。查询列可用于连接其他系统表和视图。 |
slice | integer | 标识运行查询所在切片的标识符。 |
segment | integer | 标识查询区段的数字。 |
step | integer | 运行的查询步骤。 |
starttime | timestamp | 查询开始的时间(采用 UTC 表示)。总时间包括排队和执行时间。秒的小数部分以 6 位精度表示。例如:2009-06-12 11:29:19.131358 。 |
endtime | timestamp | 查询完成的时间(采用 UTC 表示)。总时间包括排队和执行时间。秒的小数部分以 6 位精度表示。例如:2009-06-12 11:29:19.131358 。 |
tasknum | 整数 | 分配用于运行步骤的查询任务进程的数量。 |
rows | bigint | 处理的总行数。 |
type |
character(6) | 步骤的类型。有效值为:
|
is_diskbased | character(1) | 如果为 true (t),则查询是作为基于磁盘的操作执行的。如果为 false (f),则查询是在内存中执行。 |
slots | integer | 哈希桶的总数。 |
workmem | bigint | 已分配给步骤的工作内存中的字节总数。 |
max_buffers_used | bigint | 转到磁盘之前在哈希表中使用的缓冲区的最大数量。 |
resizes | integer | 此信息仅供内部使用。 |
occupied | 整数 | 此信息仅供内部使用。 |
flushable | integer | 此信息仅供内部使用。 |
used_unique_prefetching | character(1) | 此信息仅供内部使用。 |
bytes | biginit | 该步骤中所有输出行的字节数。 |
示例查询
假设您运行以下查询:
select distinct eventname from event order by 1;
假定上个查询的 ID 是 6313,以下示例显示由分段 0 和 1 中每个切片的唯一步骤生成的行的数量。
select query, slice, segment, step, datediff(msec, starttime, endtime) as msec, tasknum, rows from stl_unique where query = 6313 order by query desc, slice, segment, step;
query | slice | segment | step | msec | tasknum | rows -------+-------+---------+------+------+---------+------ 6313 | 0 | 0 | 2 | 0 | 22 | 550 6313 | 0 | 1 | 1 | 256 | 20 | 145 6313 | 1 | 0 | 2 | 1 | 23 | 540 6313 | 1 | 1 | 1 | 42 | 21 | 127 6313 | 2 | 0 | 2 | 1 | 22 | 540 6313 | 2 | 1 | 1 | 255 | 20 | 158 6313 | 3 | 0 | 2 | 1 | 23 | 542 6313 | 3 | 1 | 1 | 38 | 21 | 146 (8 rows)