本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
STL_SCAN
分析查詢的資料表掃描步驟。此資料表中資料列的步驟號碼一律為 0,因為掃描是區段中的第一個步驟。
STL所有使用者都可看見 _SCAN。超級使用者可以看見所有資料列;一般使用者只能看見自己的資料。如需詳細資訊,請參閱系統資料表和檢視中資料的可見性。
注意
STL_SCAN 僅包含主叢集上執行的查詢。但不包含在並行擴縮叢集上執行的查詢。若要存取在主要和並行擴展叢集上執行的查詢,建議您使用SYS監控檢視 SYS_QUERY_DETAIL 。SYS 監控檢視中的資料已格式化,以便於使用和理解。
資料表欄
欄名稱 | 資料類型 | 描述 |
---|---|---|
userid | integer | 產生項目的使用者之 ID。 |
query | integer | 查詢 ID。查詢欄可用於加入其他系統表格與檢視。 |
分割 | 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 | integer | 指派執行步驟的查詢任務程序編號。 |
rows | bigint | 已處理的列總數。 |
位元組 | 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 | integer | 此資訊僅供內部使用。 |
num_sortkey_as_predicate | integer | 此資訊僅供內部使用。 |
row_fetcher_state | integer | 此資訊僅供內部使用。 |
consumed_scan_ranges | bigint | 此資訊僅供內部使用。 |
work_stealing_reason | bigint | 此資訊僅供內部使用。 |
is_vectorized_scan | character(1) | 此資訊僅供內部使用。 |
is_vectorized_scan_reason | integer | 此資訊僅供內部使用。 |
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 | 在多個資料表UNIONALL上使用 從時間序列檢視讀取資料。 |
29 | 從 Amazon S3 外部資料表讀取資料。 |
30 | 讀取 Amazon S3 外部資料表的分割區資訊。 |
33 | 從遠端 Postgres 資料表讀取資料。 |
36 | 從遠端我的SQL資料表讀取資料。 |
37 | 從遠端 Kinesis 串流讀取資料。 |
使用須知
在理想情況下,rows
應該相當接近 rows_pre_filter
。rows
與 rows_pre_filter
之間的差異若很大,表示執行引擎正在掃描稍後將捨棄的資料列,這樣做缺乏效率。rows_pre_filter
與 rows_pre_user_filter
之間的差異是掃描中幽靈資料列的數目。執行 VACUUM以移除標記為刪除的資料列。rows
與 rows_pre_user_filter
之間的差異是查詢所篩選的資料列數目。若有許多資料列已遭使用者篩選條件捨棄,請檢閱您選擇的排序資料欄,或若這是由於大型未排序區域所致,請執行清空。
範例查詢
下列範例顯示 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)