ablog

不器用で落着きのない技術者のメモ

Amazon Redshift のクエリモニタリングルールで長時間実行クエリーを中止する

Amazon Redshift の WLM クエリモニタリングルールで、一定時間以上実行されているクエリを中止してみた。
以下の例では 10 秒以上要したクエリを中止している。

実行結果

[ec2-user@ip-172-31-0-222 ~]$ export LC_ALL=C
[ec2-user@ip-172-31-0-222 ~]$ cat lineorder.sql
select count(a.*) from lineorder a, lineorder b, lineorder c;
[ec2-user@ip-172-31-0-222 ~]$ psql "host=redshift-cluster-4.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439"
psql (13.4, server 8.0.2)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

dev=# \timing
Timing is on.
dev=# \i lineorder.sql
psql:lineorder.sql:1: ERROR:  Query (5591) cancelled by WLM abort action of Query Monitoring Rule "cancel_slow_query".
DETAIL:
  -----------------------------------------------
  error:  Query (5591) cancelled by WLM abort action of Query Monitoring Rule "cancel_slow_query".
  code:      1078
  context:   Query (5591) cancelled by WLM abort action of Query Monitoring Rule "cancel_slow_query".
  query:     0
  location:  wlm_query_action.cpp:156
  process:   wlm [pid=3920]
  -----------------------------------------------

Time: 12192.098 ms (00:12.192)

f:id:yohei-a:20211019140351p:plain

設定手順

ワークロード管理でパラメータグループを作成
  • マネジメントコンソールから [Amazon Redshift]-[設定]-[ワークロード管理]を選択
  • [パラメータグループ]-[作成] をクリックして、パラメータグループを作成
    • パラメータ名: qmr-cancel-slow-query
    • 説明: Cancel slow query
  • [ワークロード管理]-[ワークロードキューを編集]をクリック
  • [クエリモニタリングルール]-[カスタムルールを追加]をクリック
    • ルール名: cancel_slow_query
    • 述語: クエリ実行時間(秒) > 10
    • アクション: 中止

f:id:yohei-a:20211019133729p:plain

作成したパラメータグループを Redshift クラスターにアタッチする
  • マネジメントコンソールから [Amazon Redshift]-[任意のクラスター]-[プロパティ]-[データベース設定]-[編集]-[パラメータグループを編集]で、作成したパラメータグループ "qmr-cancel-slow-query" を選択する

f:id:yohei-a:20211019133559p:plain

  • [設定]-[ワークロード管理]-[任意のパラメータグループ]-[パラメータ]-[アタッチされたクラスター] で再起動しないと反映されないパラメータを確認することができる

f:id:yohei-a:20211019134240p:plain

  • クラスターを再起動する(QMRは再起動しなくても反映される)

環境