跳至內容

為什麼我無法在 Amazon Redshift 中跨系統資料表比對查詢 ID?

1 分的閱讀內容
0

我想比對 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>';

相關資訊

查詢規劃與執行工作流程

AWS 官方已更新 1 年前