OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

SQL処理の詳細情報(RESOURCE_ACQUISITIONS)

公開日:
更新日:
基本操作
#システムテーブル

はじめに

パフォーマンス問題に直面した時、以下のような情報を確認したい場合があります。
・その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処理が行われたかが表示されています。

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のサイズが上限です。
タイムベースの期間は無効化されています。

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

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システムテーブルの他にも参照しています。そのため、上述のリテンションポリシーの変更だけでは反映されません。

検証バージョンについて

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

更新履歴

2019/05/23 本記事を公開