OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

SQL実行中のセッションを強制的に終了する方法

公開日:
更新日:
基本操作
#セッション

はじめに

SQL の実行に時間がかかってしまい、処理を強制的に終了したい場合は、CLOSE_SESSION 関数を利用します。本記事は、CLOSE_SESSION 関数で特定セッションを強制的に終了する方法をご紹介します。

CLOSE_SESSION 関数の実行手順

1) QUERY_REQUESTS システムテーブルで、SQL の実行に時間がかかっているセッションを特定します。後述「注意点」を事前にご確認ください。

=> \x
Expanded display is on.
=> select node_name, user_name, session_id, request, memory_acquired_mb, start_timestamp, is_executing
-> from query_requests
-> where is_executing='t' order by start_timestamp desc;
-[ RECORD 1 ]------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
node_name          | v_testdb_node0001
user_name          | dbadmin
session_id         | v_testdb_node0001-1889050:0x157 //★終了したいセッションIDを確認
request            | select node_name, user_name, session_id, request, memory_acquired_mb, start_timestamp, is_executing from query_requests where is_executing='t' order by start_timestamp desc;
memory_acquired_mb | 127.2
start_timestamp    | YYYY-MM-DD HH24:MI:SS.ffffff
is_executing       | t
-[ RECORD 2 ]------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
node_name          | v_testdb_node0001
user_name          | dbadmin
session_id         | v_testdb_node0001-1889050:0x123
request            | copy CUSTOMER  from '/home/dbadmin/copy/customer.tbl' ;
memory_acquired_mb | 284.07
start_timestamp    | YYYY-MM-DD HH24:MI:SS.ffffff //★開始時間を確認
is_executing       | t

[QUERY_REQUESTS]

カラム名

説明

NODE_NAME

SQLが実行されたノード名

USER_NAME

SQLを実行したDBユーザ名

SESSION_ID

セッションID

REQUEST

実行されたSQL

MEMORY_ACQUIRED_MB

SQLによって取得されたメモリサイズ(MB単位)

START_TIMESTAMP

SQLの開始時間

IS_EXECUTING

t: 現在実行中のSQLを対象とする場合
f: 完了したSQLを対象とする場合


2) CLOSE_SESSION 関数で「session_id=v_testdb_node0001-1889050:0x123」を指定し、終了します。

=> select close_session('v_testdb_node0001-1889050:0x123');
-[ RECORD 1 ]-+-------------------------------------------------------------------
close_session | Session close command sent. Check v_monitor.sessions for progress.

3) SQL を実行していたセッション「session_id=v_testdb_node0001-1889050:0x123」は終了し、ユーザには以下のエラーが返されます。

=> copy CUSTOMER  from '/home/dbadmin/copy/customer.tbl' ;

server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.

強制的にセッションを終了できない場合

SQL がハングしてしまい、CLOSE_SESSION 関数の実行では、特定セッションを強制的に終了できない場合があります。その場合は、以下の記事をご参考に対応してください。

SQL実行中のセッションを強制的に終了する方法②
https://www.ashisuto.co.jp/cm/analytics-database/session-close2.html

注意点

DBが稼働中の状態で、強制的にOSシャットダウンをした場合に、QUERY_REQUESTS システムテーブルに記録されるセッションのステータスが更新されず、セッションが残存しているように見える事があります。このような場合は、QUERY_REQUESTS システムテーブルだけでなく、SESSIONS システムテーブルも確認し、セッションが切断されたことをご確認ください。

こちらは、ハングしたセッション(v_test_node0001-3171788:0x4d48a)を切断するために、強制的にOSシャットダウンした後にQUERY_REQUESTS システムテーブルを確認した結果です。

=> \x
Expanded display is on.
=> select node_name, user_name, session_id, request, memory_acquired_mb, start_timestamp, is_executing
-> from query_requests
-> where is_executing='t' order by start_timestamp desc;
-[ RECORD 1 ]------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
node_name          | v_test_node0001
user_name          | dbadmin
session_id         | v_test_node0001-3171788:0x4d48a
request            | copy CUSTOMER  from '/home/dbadmin/copy/customer.tbl' ;
memory_acquired_mb | 283.83
start_timestamp    | YYYY-MM-DD HH24:MI:SS.ffffff
is_executing       | t //★処理は完了済みだが、OSシャットダウンをしたので「t」と表示される

複数ノード構成の場合は、SESSIONS システムテーブルを検索することで、各ノードのログイン・セッション情報を取得可能です。SESSIONS システムテーブルを用いたセッションの確認方法です。

=> \x
Expanded display is on.
=> select  node_name, user_name, session_id, statement_start, to_char(getdate() - statement_start,'HH24:MI:SS') as execution_time, current_statement
-> from sessions
-> order by  execution_time desc ;
-[ RECORD 1 ]-----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
node_name         | v_testdb_node0001
user_name         | dbadmin
session_id        | v_testdb_node0001-1889050:0x27a
statement_start   |
execution_time    |
current_statement |
-[ RECORD 2 ]-----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
node_name         | v_testdb_node0001
user_name         | dbadmin
session_id        | v_testdb_node0001-1889050:0x157
statement_start   | YYYY-MM-DD HH24:MI:SS.ffffff
execution_time    | 00:00:00
current_statement | select node_name, user_name, session_id, statement_start, to_char(getdate() - statement_start,'HH24:MI:SS') as execution_time, current_statement from sessions order by execution_time desc ;

[SESSIONS]

カラム名

説明

NODE_NAME

接続しているノード

USER_NAME

接続したDBユーザ名

SESSION_ID

セッションID

STATEMENT_START

セッションが開始した時刻

EXECUTION_TIME

セッションの接続経過時間
※表の列ではなく計算で求めた値

CURRENT_STATEMENT

現在実行中のSQL
NULLは現在処理がないことを示す

参考情報

CLOSE_SESSION
https://docs.vertica.com/23.3.x/en/sql-reference/functions/management-functions/session-functions/close-session/

QUERY_REQUESTS
https://docs.vertica.com/23.3.x/en/sql-reference/system-tables/v-monitor-schema/query-requests/

SESSIONS
https://docs.vertica.com/23.3.x/en/sql-reference/system-tables/v-monitor-schema/sessions/

Management Consoleから特定のセッションをクローズする方法
https://www.ashisuto.co.jp/cm/analytics-database/mc_close_session.html

セッションを全てクローズする方法
https://www.ashisuto.co.jp/cm/analytics-database/allsession-close.html

検証バージョンについて

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

更新履歴

2023/08/28 バージョン23.3用に改訂、
       「注意点」の項目追加、「参考情報」にマニュアルのリンクを追加
2022/05/27 バージョン11.1用に改訂、
        「はじめに」と「強制的にセッションを終了できない場合」の項目追加、
        「参考情報」にマニュアルとMC操作のリンク追加
2015/04/23 本記事を公開