クエリを強制終了する
クエリを強制終了する前に、問題の原因となっているクエリを特定する必要があります。次の SQL を使うと、実行中のすべてのクエリとその実行時間を一覧表示できます。
SELECT
pid,
user_name,
starttime,
query,
elapsed
FROM
stv_recents
WHERE
state = 'Running'
ORDER BY
elapsed DESC;
出力例:
| pid | user_name | starttime | query | elapsed |
|---|---|---|---|---|
| 123 | admin | 2023-10-01 10:00:00 | SELECT * FROM ? | 01:20:15 |
| 456 | analyst | 2023-10-01 10:45:00 | UPDATE table ? | 00:35:10 |
| … | … | … | … | … |
elapsed 列は、クエリが実行されている時間を示します。
問題のあるクエリを特定したら(上の一覧の pid を使用)、そのクエリを終了できます。次のコマンドを使用します。
CANCEL pid;
例:
CANCEL 123;
クエリの終了を確認する
クエリが終了したことを確認するには、最初のクエリを再実行します。
SELECT
pid,
user_name,
starttime,
query,
elapsed
FROM
stv_recents
WHERE
state = 'Running'
ORDER BY
elapsed DESC;
終了したクエリは結果に表示されなくなっているはずです。
ブロックされたクエリへの対処
クエリがブロックされ、リソースを解放するために強制終了が必要になることがあります。ブロックされたクエリは STV_BLOCKED テーブルで特定できます。
SELECT
b.pid,
b.user_name,
b.db,
b.query,
l.pid AS blocked_by_pid,
l.user_name AS blocked_by_user
FROM
stv_blocked b
JOIN
stv_locks l
ON
b.lock_owner_pid = l.pid;
出力例:
| pid | user_name | db | query | blocked_by_pid | blocked_by_user |
|---|---|---|---|---|---|
| 5678 | analytics | reporting | SELECT count(*) FROM ?; | 9101 | Admin |
ブロックされたクエリを強制終了するには、前述のとおり CANCEL コマンドを使用します。
CANCEL 5678;
クエリ終了の自動化
厳しいパフォーマンス要件があるデータベースでは、長時間実行されるクエリの検出と終了を自動化すると効果的です。以下は、指定したしきい値より長く実行されているクエリを終了するプロシージャの例です。
DO $$
DECLARE
long_running_query RECORD;
BEGIN
FOR long_running_query IN
SELECT pid
FROM stv_recents
WHERE state = 'Running'
AND elapsed > interval '00:30:00' -- Replace with desired threshold
LOOP
EXECUTE 'CANCEL ' || long_running_query.pid;
END LOOP;
END;
$$;
重要な注意点
- 権限: クエリをキャンセルできるのは、適切な権限を持つユーザーのみです。
- 影響: クエリの終了は、誤って行うとアプリケーションのパフォーマンスに影響したり、データの不整合を引き起こしたりする可能性があります。
- 監視: クエリのパフォーマンスを定期的に監視することで、問題を早期に発見できます。
まとめ
長時間実行されるクエリを適切に管理することで、Amazon Redshift クラスターのパフォーマンスを最適に保てます。ここで紹介した手順に従えば、問題のあるクエリをすばやく特定して終了できます。定期的な監視とクエリ終了を自動化する仕組みを導入すれば、さらにパフォーマンスを維持しやすくなります。
意図しない障害を避けるため、すべてのコマンドとスクリプトは本番環境に適用する前に、本番以外の環境で必ずテストしてください。
こちらの記事もおすすめです:
Beekeeper Studioは無料のオープンソースのデータベースGUIです
これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。
Beekeeper Studio 利用者の声
「Beekeeper Studio で以前の SQL ワークフローを完全に置き換えました。高速で直感的で、データベース作業がまた楽しくなりました。」
「多くのデータベース GUI を試してきましたが、Beekeeper は機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」