我想比對 Amazon Redshift 中的系統資料表和檢視之間的查詢 ID。
簡短描述
您可以使用 query_id 欄作為 SYS 檢視 (包含 SYS_QUERY_HISTORY) 的查詢 ID。對於包括 STL_QUERY 在內的 STL/SVL 資料表和檢視,您可以使用 query 資料列作為查詢 ID。query 欄用來識別 Amazon Redshift 在處理原始查詢時所產生的重寫子查詢。如需詳細資訊,請參閱使用 SYS 監控檢視改進查詢識別碼追蹤。
解決方法
授予對系統資料表的存取權
若要在 Amazon Redshift 的系統資料表中比對查詢 ID,使用者必須是超級使用者或擁有必要的權限。如需如何向特定使用者授予存取權的資訊,請參閱系統資料表和檢視中的資料可見性。
若要授予特定使用者存取權並指派系統定義的角色,請執行下列命令:
GRANT ROLE sys:monitor TO database_user;
**注意:**將 database_user 替換為您的資料庫使用者。
關聯查詢 ID
Amazon Redshift 可能無法提供 query_id 欄和 query 欄之間的完全相符關係。但是,您可以搜尋 SYS 和 STL/SVL 資料表之間可能的相符項目。
在下列查詢中,使用 SYS 中的 query_id 來取得 STL/SVL 中的查詢 ID:
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE a.query_id = <query_id>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
注意:只在領導節點上執行的查詢會出現在 SYS_QUERY_HISTORY 中,但 STL_QUERY 排除了這些查詢。
使用 STL/SVL 中的查詢在下列查詢中取得 SYS 中的查詢 ID:
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE b.query = <query>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
尋找相同 SQL 陳述式的查詢歷史記錄
這些查詢的輸出結果能幫助您比較不同次的查詢執行狀況。若要在 SYS_QUERY_HISTORY 中尋找在不同時間執行過的相同查詢,請使用下列查詢擷取 user_query_hash 值及其對應項目:
SELECT user_query_hash FROM sys_query_history
WHERE query_id = <query_id>;
SELECT *
FROM sys_query_history
WHERE user_query_hash = '<user_query_hash>';
相關資訊
查詢規劃與執行工作流程