スキップしてコンテンツを表示

Amazon Redshift の複数システムテーブル間でクエリ ID を照合できない原因を教えてください。

所要時間1分
0

Amazon Redshift の複数システムテーブルとビューにわたり、クエリ ID を照合したいと考えています。

簡単な説明

query_id 列は、SYS_QUERY_HISTORY を含む SYS ビュー のクエリ 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年前