目次
はじめに
パフォーマンス問題に直面した時、以下のような情報を確認したい場合があります。・そのSQLが実行中なのかどうか
・SQLがキューに入った時刻はいつか
・実行したSQLがどれくらいのメモリを使用したか
・処理の実行時間はどれくらいだったか
このような場合に、システムテーブルのRESOURCE_ACQUISITIONSが役立ちます。
以下に紹介します。
RESOURCE_ACQUISITIONSシステムテーブル
カラム名 | データ型 | 説明 |
---|---|---|
NODE_NAME | VARCHAR | 情報がリストされているノード名。 |
TRANSACTION_ID | INTEGER | リクエストのトランザクション識別子 |
STATEMENT_ID | INTEGER | トランザクション内の各SQL文の一意のID(数値)。 NULLは、現在SQL文が処理されていないことを示します。 |
REQUEST_TYPE | VARCHAR | リソースプールに発行したリクエストの種類。 |
POOL_ID/POOL_NAME | INTEGER/VARCHAR | リクエストをハンドリングする際に関連した各リソースプール ・POOL_ID: Verticaカタログによって割り当てられ、リソースプールを一意に識別する一意の数値ID。 ・POOL_NAME: リソースプールの名前。 |
THREAD_COUNT | INTEGER | このリクエストで使われたスレッド数 |
OPEN_FILE_HANDLE_COUNT | INTEGER | このリクエストで使われたオープンファイル数 |
MEMORY_INUSE_KB | INTEGER | このクエリによって獲得されたメモリの総量(キロバイト)。 |
QUEUE_ENTRY_TIMESTAMP | TIMESTAMPTZ | このリソースプールでリクエストがキューに入れられたときのタイムスタンプ。 |
ACQUISITION_TIMESTAMP | TIMESTAMPTZ | このリソースプールでリクエストが受け入れられたときのタイムスタンプ。 |
RELEASE_TIMESTAMP | TIMESTAMPTZ | Verticaがこのリソースの取得をリリースした時刻。 |
DURATION_MS | INTEGER | リクエストの実行時間(ミリ秒)。 リクエストが複数のリソースプールにまたがってカスケードされた場合、DURATION_MSはこのリソースプールにのみ適用されます。 |
IS_EXECUTING | BOOLEAN | リクエストが実行中の場合はTRUE、FALSEの場合は以下の場合に表示されます。 ・リクエストが完了したか拒否された。 ・リクエストが別のリソースプールにカスケードされた。 |
使用例1(vsql)
以下の例は、3ノードで構成されたVerticaクラスタで、トランザクションID(45035996273733290)のSQLの情報をRESOURCE_ACQUISITIONSシステムテーブルで確認する例です。3ノードで分散された処理が、各ノードでどのようにSQL処理が行われたかが表示されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
dbadmin=> SELECT * FROM resource_acquisitions where transaction_id='45035996273733290' ORDER BY 1; -[ RECORD 1 ]----------+------------------------------ node_name | v_ssbm_node0001 transaction_id | 45035996273733290 statement_id | 1 request_type | Reserve pool_id | 45035996273704996 pool_name | general thread_count | 10 open_file_handle_count | 21 memory_inuse_kb | 30619 queue_entry_timestamp | 2019-05-20 19:07:38.306681+09 acquisition_timestamp | 2019-05-20 19:07:38.306693+09 release_timestamp | 2019-05-20 19:07:38.327938+09 duration_ms | 21 is_executing | f -[ RECORD 2 ]----------+------------------------------ node_name | v_ssbm_node0002 transaction_id | 45035996273733290 statement_id | 1 request_type | Reserve pool_id | 45035996273704996 pool_name | general thread_count | 7 open_file_handle_count | 18 memory_inuse_kb | 25523 queue_entry_timestamp | 2019-05-20 19:07:38.30852+09 acquisition_timestamp | 2019-05-20 19:07:38.308539+09 release_timestamp | 2019-05-20 19:07:38.330082+09 duration_ms | 22 is_executing | f -[ RECORD 3 ]----------+------------------------------ node_name | v_ssbm_node0003 transaction_id | 45035996273733290 statement_id | 1 request_type | Reserve pool_id | 45035996273704996 pool_name | general thread_count | 7 open_file_handle_count | 18 memory_inuse_kb | 25523 queue_entry_timestamp | 2019-05-20 19:07:38.307722+09 acquisition_timestamp | 2019-05-20 19:07:38.307741+09 release_timestamp | 2019-05-20 19:07:38.329228+09 duration_ms | 22 is_executing | f |
使用例2(Management Console)
Management Consoleでも同様の情報を確認することができます。画面下部のActivity→画面上部のプルダウンから、Query Monitoringを選択すると、
以下のような画面が表示されます。
情報の保存期間
当システムテーブルの保存期間は、デフォルトでは期間ではなく情報量のサイズです。メモリに1000KB、ディスク上に10000KBのサイズが上限です。
タイムベースの期間は無効化されています。
当システムテーブルのリテンションポリシーを確認する方法を以下に記載します。
1 2 3 4 5 |
dbadmin=> SELECT get_data_collector_policy('ResourceAcquisitions'); get_data_collector_policy ----------------------------------------------------------------------------- 1000KB kept in memory, 10000KB kept on disk. Time based retention disabled. (1 row) |
※Management Consoleで参照できる情報は、RESOURCE_ACQUISITIONSシステムテーブルの他にも参照しています。そのため、上述のリテンションポリシーの変更だけでは反映されません。