1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SnowflakeAdvent Calendar 2022

Day 10

【Snowflake】時間がかかっている実行中クエリを特定してCANCEL文を生成するSQLを作ってみた

Last updated at Posted at 2022-12-30

はじめに

トラブルシューティングでSQLを特定して、処理は止めたい場合等はよくあると思います。
こういう時に事前にSQLを事前に準備しておくと便利です。
SQLを作成したので共有します。
そのままでも使えると思いますがお好みにカスタマイズしてご利用ください。

特定&処理停止方法

結論から書きますと、ACCOUNTADMINなどを持つ管理者ユーザで以下のSQLを実行して実行中のSQLを確認し、結果の最後の列「CANCEL_QUERY_TEXT」に表示されるSQLを実行すれば停止できます。

select SESSION_ID,
       EXECUTION_STATUS,
       USER_NAME,
       ROLE_NAME,
       WAREHOUSE_NAME, 
       WAREHOUSE_SIZE, 
       START_TIME, -- 処理開始時間
       to_char(datediff(hour, START_TIME,current_timestamp)) || ':' ||
           to_char(datediff(minute, START_TIME,current_timestamp) % 60, '00') || ':' ||
           to_char(datediff(second, START_TIME,current_timestamp) % 60, '00')
         as elapsed_time, -- 実行されてからの経過時間
       BYTES_SCANNED,
       DATABASE_NAME AS usage_database,
       SCHEMA_NAME AS usage_schema,
       QUERY_TEXT, -- 実行中のクエリ
       'SELECT SYSTEM$CANCEL_QUERY(''' || QUERY_ID || ''');' as cancel_query_text
from table(INFORMATION_SCHEMA.QUERY_HISTORY()) t
where END_TIME < START_TIME 
      -- 完了前のSESSIONはEND_TIMESTAMPにはUNIX エポックタイムスタンプ
      -- (1970-01-01 00:00:00)が入るためこれで識別する
  and session_id <> current_session() -- 自sessionを除く
order by t.start_time;

上記のSQLを実行すると以下のように実行中のクエリ情報が表示されます。
image.png
まずは実行ユーザや実行時間、SQLなどを確認し、停止対象であることを確認しまず。
上の例ではFUKA_USERさんのSQLがMサイズのウェアハウスを18分以上ぶん回していることが確認できます。

最後の列「CANCEL_QUERY_TEXT」に処理停止用のQueryを出力しています。
image.png

上記で出力されたキャンセル用クエリをコピペして実行することで処理が停止されます。
image.png

少しだけ解説

実行中のクエリの特定はINFORMATION_SCHEMA.QUERY_HISTORY()を使用します。
ソート順は処理開始時間の昇順にしていますので止めるべきものは一番上に出てきます。
SELECT句で表示する項目を絞ってますが、必要に応じてカスタマイズしてください。

参考:
https://docs.snowflake.com/ja/sql-reference/functions/query_history.html

実行中のSQLをCANCELするのは以下です。これを確認用SQLの中で一緒に生成しています。

SELECT SYSTEM$CANCEL_QUERY('<クエリID>');

参考:
https://docs.snowflake.com/ja/sql-reference/functions/system_cancel_query.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?