本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
STV_QUERY_METRICS
包含正在使用者定義的查詢佇列 (服務類別) 中執行之查詢的指標資訊,例如已處理的資料列數目、CPU 用量、輸入/輸出和磁碟使用情形。若要檢視已完成之查詢的指標,請參閱 STL_QUERY_METRICS 系統資料表。
查詢指標每間隔一秒鐘取樣一次。因此,相同查詢的不同執行可能會傳回稍微不同的時間。另外,可能不會記錄執行時間不到一秒的查詢區段。
STV_QUERY_METRICS 會追蹤並彙總查詢、區段和步驟層級的指標。如需查詢區段和步驟的相關資訊,請參閱查詢計劃和執行工作流程。許多指標 (例如 max_rows
、cpu_time
等等) 是跨節點配量加總的。如需節點配量的相關資訊,請參閱資料倉儲系統架構。
若要判斷資料列報告指標的層級,請檢查 segment
和 step_type
資料欄:
-
如果
segment
和step_type
皆為-1
,則資料列報告查詢層級的指標。 -
如果
segment
不是-1
,且step_type
是-1
,則資料列報告區段層級的指標。 -
如果
segment
和step_type
皆不是-1
,則資料列報告步驟層級的指標。
所有使用者都可看見 STV_QUERY_METRICS。超級使用者可以看見所有資料列;一般使用者只能看見自己的資料。如需詳細資訊,請參閱系統資料表和檢視中資料的可見性。
此資料表中的部份或所有資料也會在 SYS 監控檢視 SYS_QUERY_DETAIL 中找到。SYS 監視檢視中的資料會格式化為更易於使用和理解。我們建議您使用 SYS 監控檢視進行查詢。
資料表欄
欄名稱 | 資料類型 | 描述 |
---|---|---|
userid | integer | 執行產生此項目之查詢的使用者 ID。 |
service_class | integer | WLM 查詢佇列 ID (服務類別)。查詢佇列定義於 WLM 組態。只會回報使用者定義之佇列的指標。 |
query | integer | 查詢 ID。查詢欄可用於加入其他系統表格與檢視。 |
starttime | timestamp | 查詢開始執行的 UTC 時間,精確度為 6 位數的小數秒。例如:2009-06-12 11:29:19.131358 。 |
slices | integer | 叢集的分割數量。 |
segment | integer | 區段號碼。查詢包含多個區段,每個區段包含一或多個步驟。查詢區段可平行執行。每個區段皆在單一程序中執行。如果區段值為 -1,指標區段值將累計至查詢層級。 |
step_type | integer | 執行的步驟類型。如需步驟類型的說明,請參閱步驟類型。 |
rows | bigint | 步驟處理的資料列數。 |
max_rows | bigint | 為步驟匯出的最大資料列數 (彙總所有分割)。 |
cpu_time | bigint | 已使用的 CPU 時間,以微秒為單位。在區段層級,所有分割的區段所使用的 CPU 總時間。在查詢層級,所有分割與區段的查詢 CPU 時間總和。 |
max_cpu_time | bigint | 已使用的最大 CPU 時間,以微秒為單位。在區段層級,區段中所有分割已使用的最大 CPU 時間。在查詢層級,任何查詢區段已使用的最大 CPU 時間。 |
blocks_read | bigint | 查詢或區段所讀取的 1 MB 區塊數。 |
max_blocks_read | bigint | 區段讀取的 1 MB 區塊最大數量 (彙總所有分割)。在區段層級,所有分割的區段所讀取的 1 MB 區塊最大數量。在查詢層級,任何查詢區段所讀取的 1 MB 區塊最大數量。 |
run_time | bigint |
所有分割合計的總執行時間。執行時間不包含等待時間。 在區段層級,所有分割合計的區段執行時間。在查詢層級,所有分割與區段的查詢執行時間總和。因為此值為總和,因此執行時間與查詢執行時間無關。 |
max_run_time | bigint | 區段的最大經過時間 (以微秒為單位)。在區段層級,所有分割之區段的最大執行時間。在查詢層級,任何查詢區段的最大執行時間。 |
max_blocks_to_disk | bigint | 用於寫入中繼結果的磁碟空間最大數量,以 1 MB 區塊為單位。在區段層級,所有分割之區段已使用的最大磁碟空間量。在查詢層級,任何查詢區段已使用的最大磁碟空間量。 |
blocks_to_disk | bigint | 查詢或區段用於寫入中繼結果的最大磁碟空間量,以 1 MB 區塊為單位。 |
step | integer | 執行的查詢步驟。 |
max_query_scan_size | bigint | 查詢所掃描的最大資料大小,以 MB 為單位。在區段層級,所有分割之區段所掃描的最大資料大小。在查詢層級,任何查詢區段所掃描的最大資料大小。 |
query_scan_size | bigint | 查詢所掃描的資料大小,以 MB 為單位。 |
query_priority | integer | 查詢的優先順序。可能的值為 -1 、0 、1 、2 、3 和 4 ,其中 -1 表示不支援查詢優先順序。 |
query_queue_time | bigint | 查詢排入佇列的時間 (毫秒)。 |
步驟類型
下表列出與資料庫使用者相關的步驟類型。此表未列出僅供內部使用的步驟類型。如果步驟類型為 -1,則該步驟層級不會回報該指標。
Step type (步驟類型) | 描述 |
---|---|
1 | 掃描資料表 |
2 | 插入資料列 |
3 | 彙總資料列 |
6 | 排序步驟 |
7 | 合併步驟 |
8 | 分佈步驟 |
9 | 廣播分佈步驟 |
10 | 雜湊聯結 |
11 | 合併聯結 |
12 | 儲存步驟 |
14 | Hash |
15 | 巢狀迴路聯結 |
16 | 投射欄位與表達式 |
17 | 限制傳回的資料列數 |
18 | 唯一 |
20 | 刪除資料列 |
26 | 限制傳回的排序資料列數 |
29 | 運算視窗函式 |
32 | UDF |
33 | 唯一 |
37 | 從領導者節點將資料列傳回至用戶端 |
38 | 從運算節點將資料列傳回至領導節點 |
40 | Spectrum 掃描。 |
範例查詢
若要找出具有高 CPU 時間 (超過 1,000 秒) 的使用中查詢,請執行下列查詢。
select query, cpu_time / 1000000 as cpu_seconds from stv_query_metrics where segment = -1 and cpu_time > 1000000000 order by cpu_time; query | cpu_seconds ------+------------ 25775 | 9540
若要找出具有傳回超過一百萬個資料列之巢狀迴圈聯結的使用中查詢,請執行下列查詢。
select query, rows from stv_query_metrics where step_type = 15 and rows > 1000000 order by rows; query | rows ------+----------- 25775 | 1580225854
若要找出已執行超過 60 秒,但已使用 CPU 時間少於 10 秒的使用中查詢,請執行下列查詢。
select query, run_time/1000000 as run_time_seconds from stv_query_metrics where segment = -1 and run_time > 60000000 and cpu_time < 10000000; query | run_time_seconds ------+----------------- 25775 | 114