🧚 お知らせ!Beekeeper Studio は高速でモダンなオープンソースのデータベース GUI です ダウンロード
2024年7月15日 著者: Matthew Rathbone

クエリを強制終了する

クエリを強制終了する前に、問題の原因となっているクエリを特定する必要があります。次の 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のLinux版は100%フル機能。手抜きも機能の妥協も一切ありません。

Beekeeper Studio 利用者の声

★★★★★
「Beekeeper Studio で以前の SQL ワークフローを完全に置き換えました。高速で直感的で、データベース作業がまた楽しくなりました。」
— Alex K.、データベース開発者
★★★★★
「多くのデータベース GUI を試してきましたが、Beekeeper は機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」
— Sarah M.、フルスタックエンジニア