OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

実行されたSQLをシステムテーブルで確認する方法

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

実行されたSQLを確認する方法

Verticaで、実行されたSQLを確認するには、以下の2種類の方法があります。

・vertica.log を参照する
・システムテーブルを参照する

本記事では、システムテーブルを参照する方法をご紹介します。
システムテーブルから実行されたSQLを確認することにより、実行時間が長いSQLのランキング表示や、監査に利用することができます。

システムテーブルの参照SQL例

以下の例では、過去1分間に実行されたSQLを参照します。

SELECT
  us.session_start_timestamp,      /* セッション開始時刻 */
  us.session_end_timestamp,        /* セッション終了時刻 */
  qr.start_timestamp,              /* SQL実行開始時刻 */
  qr.end_timestamp,                /* SQL実行終了時刻 */
  qr.request_duration_ms,          /* SQL実行経過時間(ミリ秒) */
  qr.success,                      /* SQL実行成否 */
  us.user_name,                    /* DBユーザー名 */
  us.client_hostname,              /* クライアントホスト名 */
  us.client_os_user_name,          /* クライアントOSユーザ名 */
  us.client_type,                  /* クライアントタイプ */
  us.client_label,                 /* クライアントのラベル */
  qr.request,                      /* SQL文 */
  qp.processed_row_count           /* SQL処理件数 */
FROM
  user_sessions us
  INNER JOIN query_requests qr
    ON us.session_id = qr.session_id
  INNER JOIN query_profiles qp
    ON  (qr.session_id = qp.session_id 
    AND qr.statement_id = qp.statement_id
    AND qr.transaction_id = qp.transaction_id)
WHERE
  qr.start_timestamp >= (sysdate-1/1440)  /* 過去1分間を参照する場合の検索条件例 */
ORDER BY
  us.session_start_timestamp,
  qr.start_timestamp,
  us.user_name;

SQL実行経過時間(ミリ秒)の列でソートすることにより長時間実行されたSQLを参照したり、
SQL実行開始時刻、DBユーザー名、クライアントホスト名、SQL文の列から「いつ」「誰が」「どこから」「何を」といった情報を参照できます。

システムテーブル参照の実行例

上述のSQLでシステムテーブルを参照した場合の例をご紹介します。

dbadmin=> SELECT
dbadmin->   us.session_start_timestamp,
dbadmin->   us.session_end_timestamp,
dbadmin->   qr.start_timestamp,
dbadmin->   qr.end_timestamp,
dbadmin->   qr.request_duration_ms,
dbadmin->   qr.success,
dbadmin->   us.user_name,
dbadmin->   us.client_hostname,
dbadmin->   us.client_os_user_name,
dbadmin->   us.client_type,
dbadmin->   us.client_label,
dbadmin->   qr.request,
dbadmin->   qp.processed_row_count
dbadmin-> FROM
dbadmin->   user_sessions us
dbadmin->   INNER JOIN query_requests qr
dbadmin->     ON us.session_id = qr.session_id
dbadmin->   INNER JOIN query_profiles qp
dbadmin->     ON (qr.session_id = qp.session_id
dbadmin(>     AND qr.statement_id = qp.statement_id
dbadmin(>     AND qr.transaction_id = qp.transaction_id)
dbadmin-> WHERE
dbadmin->   qr.start_timestamp >= (sysdate-1/1440)
dbadmin-> ORDER BY
dbadmin->   us.session_start_timestamp,
dbadmin->   qr.start_timestamp,
dbadmin->   us.user_name;

  session_start_timestamp   |   session_end_timestamp   |    start_timestamp      |     end_timestamp       | request_duration_ms | success | user_name |  client_hostname  | client_os_user_name | client_type  |    client_label    |           request                      | processed_row_count
-------------------------------+-------------------------------+-------------------------------+-------------------------------+---------------------+---------+-----------+---------------------+--------------------+---------------+------------------------+--------------------------------------------------------+---------------------
 2019-07-17 17:25:36.201323+09 | 2019-07-17 17:25:36.471432+09 | 2019-07-17 17:25:36.250442+09 | 2019-07-17 17:25:36.409929+09 |           159 | t    | dbadmin  | 192.168.16.168:50774 | yusakamoto      | ODBC Driver  | Windows ODBCラベルテスト | SELECT * FROM "test"."public"."t1"              |          1
 2019-07-17 17:26:10.95041+09 | 2019-07-17 17:26:11.120153+09 | 2019-07-17 17:26:11.035179+09 | 2019-07-17 17:26:11.041109+09 |            6 | t    | dbadmin   | 192.168.16.168:50779 | yusakamoto      | JDBC Driver  | Windows JDBCラベルテスト | SELECT node_name FROM v_monitor.current_session;    |           1
 2019-07-17 18:15:49.225963+09 | 2019-07-17 18:15:49.416906+09 | 2019-07-17 18:15:49.309066+09 | 2019-07-17 18:15:49.315203+09 |            6 | t    | dbadmin  | 192.168.213.55:58426 | dbadmin         | JDBC Driver  | Linux JDBCラベルテスト  | SELECT node_name FROM v_monitor.current_session;    |           1
 2019-07-17 19:16:40.5626+09  |                   | 2019-07-17 19:16:57.468899+09 | 2019-07-17 19:16:57.47671+09  |            8 | t    | dbadmin  | 172.16.60.25:39774  | dbadmin         | vsql      |              | select 'Linux リモート vsql', sysdate from dual;     |           1
 2019-07-17 19:23:04.111737+09 |                   | 2019-07-17 19:23:18.052298+09 | 2019-07-17 19:23:18.058445+09 |            6 | t    | dbadmin  | 192.168.16.168:64590 | yusakamoto       | vsql      |              | select 'Windows remote vsql test',sysdate from dual; |           1
 2019-07-17 18:08:51.515756+09 |                   | 2019-07-17 19:28:45.485399+09 | 2019-07-17 19:28:45.498517+09 |           13 | t    | dbadmin  | [::1]:49344      | dbadmin         | vsql      |              | select 'Linux ローカル vsql' from dual;            |          1
  :
  :

参照結果をCSV出力する場合は、下記記事をご参照ください。

・SELECT結果をCSV出力する方法
https://www.ashisuto.co.jp/cm/analytics-database/csv-output.html

検証バージョンについて

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

更新履歴

2019/08/01 検証バージョンを9.2に変更
2016/03/09 本記事を公開