はじめに

パフォーマンス問題に直面した時、以下のような情報を確認したい場合があります。
・そのSQLが実行中なのかどうか
・SQLがキューに入った時刻はいつか
・実行したSQLがどれくらいのメモリを使用したか
・処理の実行時間はどれくらいだったか

このような場合に、システムテーブルのRESOURCE_ACQUISITIONSが役立ちます。
以下に紹介します。

RESOURCE_ACQUISITIONSシステムテーブル


カラム名
データ型説明
NODE_NAMEVARCHAR情報がリストされているノード名。
TRANSACTION_ID INTEGERリクエストのトランザクション識別子
STATEMENT_ID INTEGERトランザクション内の各SQL文の一意のID(数値)。
NULLは、現在SQL文が処理されていないことを示します。
REQUEST_TYPEVARCHARリソースプールに発行したリクエストの種類。
POOL_ID/POOL_NAMEINTEGER/VARCHARリクエストをハンドリングする際に関連した各リソースプール
・POOL_ID: Verticaカタログによって割り当てられ、リソースプールを一意に識別する一意の数値ID。
・POOL_NAME: リソースプールの名前。
THREAD_COUNTINTEGERこのリクエストで使われたスレッド数
OPEN_FILE_HANDLE_COUNT INTEGERこのリクエストで使われたオープンファイル数
MEMORY_INUSE_KBINTEGERこのクエリによって獲得されたメモリの総量(キロバイト)。
QUEUE_ENTRY_TIMESTAMP TIMESTAMPTZこのリソースプールでリクエストがキューに入れられたときのタイムスタンプ。
ACQUISITION_TIMESTAMPTIMESTAMPTZこのリソースプールでリクエストが受け入れられたときのタイムスタンプ。
RELEASE_TIMESTAMPTIMESTAMPTZVerticaがこのリソースの取得をリリースした時刻。
DURATION_MSINTEGERリクエストの実行時間(ミリ秒)。
リクエストが複数のリソースプールにまたがってカスケードされた場合、DURATION_MSはこのリソースプールにのみ適用されます。
IS_EXECUTINGBOOLEANリクエストが実行中の場合はTRUE、FALSEの場合は以下の場合に表示されます。
・リクエストが完了したか拒否された。
・リクエストが別のリソースプールにカスケードされた。


使用例1(vsql)

以下の例は、3ノードで構成されたVerticaクラスタで、トランザクションID(45035996273733290)のSQLの情報をRESOURCE_ACQUISITIONSシステムテーブルで確認する例です。
3ノードで分散された処理が、各ノードでどのようにSQL処理が行われたかが表示されています。


使用例2(Management Console)

Management Consoleでも同様の情報を確認することができます。
画面下部のActivity→画面上部のプルダウンから、Query Monitoringを選択すると、
以下のような画面が表示されます。

情報の保存期間

当システムテーブルの保存期間は、デフォルトでは期間ではなく情報量のサイズです。
メモリに1000KB、ディスク上に10000KBのサイズが上限です。
タイムベースの期間は無効化されています。

当システムテーブルのリテンションポリシーを確認する方法を以下に記載します。


※Management Consoleで参照できる情報は、RESOURCE_ACQUISITIONSシステムテーブルの他にも参照しています。そのため、上述のリテンションポリシーの変更だけでは反映されません。

検証バージョンについて

この記事の内容はVertica 9.2で確認しています。

更新履歴

2019/05/23 本記事を公開