

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# WLM クエリモニタリングルール
<a name="cm-c-wlm-query-monitoring-rules"></a>

Amazon Redshift ワークロード管理では、クエリモニタリングルールは、WLM キューのメトリクスベースのパフォーマンスの境界を定義し、クエリがこれらの境界を超えた場合のアクションを指定します。例えば、実行時間の短いクエリ専用のキューには、60 秒以上実行されるクエリをキャンセルするルールを作成できます。デザインの不十分なクエリを追跡する目的で、ネステッドループを含むクエリを記録する別のルールを設定することができます。

ワークロード管理 (WLM) 構成の一部としてクエリモニタリングルールを定義します。1 つのキューに対して最大 25 個のルールを定義できます。ルールの総数はキュー全体で最大 25 個に制限されています。各ルールには最大 3 つの条件または述語と 1 つのアクションが含まれます。*述語*は、メトリクス、比較条件 (=, <, or > )、および値で構成されています。いずれかのルールのすべての述語が満たされると、ルールのアクションがトリガーされます。ルールアクションは、前述のようにログ、ホップ、中止を指定できます。

指定のキューのルールは、そのキューで実行中のクエリにのみ適用されます。ルールは他のルールに依存しません。

WLM は 10 秒ごとにメトリクスを評価します。Amazon Redshift では、クエリが自動的に書き換えられた時点で、子クエリレベルでクエリモニタリングルールが適用されます。同じ期間に複数のルールがトリガーされると、WLM は最も重大なアクションのルールを選択します。2 つのルールのアクションの重要度が同じ場合、WLM はルール名に基づいてアルファベット順にルールを実行します。アクションがホップまたは中止の場合、アクションは記録され、クエリはキューから削除されます。アクションがログ場合、キューはキューで実行されます。WLM はルールごとにクエリあたり 1 つのログアクションを開始します。キューに他のルールが含まれている場合、これらのルールは引き続き有効です。アクションがホップで、クエリが別のキューにルーティングされる場合、新しいキューのルールが適用されます。特定のクエリに対して実行されるクエリのモニタリングと追跡アクションの詳細については、[ショートクエリアクセラレーション](wlm-short-query-acceleration.md) にあるサンプルコレクションを参照してください。

ルールの述語がすべて満たされると、WLM は [STL\$1WLM\$1RULE\$1ACTION](r_STL_WLM_RULE_ACTION.md) システムテーブルに行を書き込みます。さらに、Amazon Redshift は、現在実行されているクエリのクエリメトリクスを [STV\$1QUERY\$1METRICS](r_STV_QUERY_METRICS.md) に記録します。完了したクエリのメトリクスは [STL\$1QUERY\$1METRICS](r_STL_QUERY_METRICS.md) に保存されます。

**注記**  
Amazon Redshift Serverless の場合、`wlm_json_configuration` パラメータを使用してクエリキューとモニタリングルールを設定できます。これにより、異なるユーザーロール、クエリグループ、モニタリングルールを使用して複数のキューを作成できます。サーバーレスクエリキューの設定の詳細については、「*Amazon Redshift 管理ガイド*」の「[クエリキューの設定](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-query-queues.html)」を参照してください。

## クエリモニタリングルールの定義
<a name="cm-c-wlm-defining-query-monitoring-rules"></a>

WLM 構成の一部としてクエリモニタリングルールを作成します。このルールは、クラスターのパラメータグループ定義の一部として定義します。

ルールは AWS マネジメントコンソールを使用して作成するか、JSON でプログラム的に作成できます。

**注記**  
プログラム的にルールを作成することを選択した場合は、コンソールを使用して、パラメータグループ定義に含める JSON を生成することを強くおすすめします。詳細については、「*Amazon Redshift 管理ガイド*」の「[クエリモニタリングルールを作成する](https://docs.aws.amazon.com/redshift/latest/mgmt/parameter-group-modify-qmr-console.html)」および「[AWS CLI によるパラメータ値を設定する](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html#configure-parameters-using-the-cli)」を参照してください。

クエリモニタリングルールを定義するには、次の要素を指定します。
+ ルール名 – ルール名は WLM 設定内で一意である必要があります。ルール名には最大で 32 文字の英数字または下線を使用できます。スペースまたは疑問符を含めることはできません。キューごとの 25 個までルールを指定できます。すべてのキューでのルールは合計 25 個までです。
+ 1 つ以上の述語 – ルールごとに最大 3 つのルールを定義できます。いずれかのルールのすべての述語が満たされると、関連付けられたアクションがトリガーされます。述語はメトリクス名、演算子 (=、<、または >)、および値で定義されます。例: 「`query_cpu_time > 100000`」。メトリクスのリストと各メトリクスの値については、このセクションの [Amazon Redshift のクエリモニタリングメトリクスのプロビジョニング](#cm-c-wlm-query-monitoring-metrics) を参照してください。
+ アクション – 複数のルールがトリガーされると、WLM は最も重大なアクションのルールを選択します。想定されるアクションの重大度は昇順で次のようになります。
  + ログ – STL\$1WLM\$1RULE\$1ACTION システムテーブルにクエリに関する情報を記録します。ログレコードを書き込むだけの場合はログアクションを使用します。WLM は最大でクエリごと、ルールごとにログを 1 つ作成します。ログアクションの後、他のルールは有効な状態を維持し、WLM はひき続きクエリをモニタリングします。
  + ホップ (手動 WLM でのみ利用可能) – アクションを記録して、次に一致するキューにクエリをホップします。一致するキューがない場合、クエリはキャンセルされます。QMR は、[CREATE TABLE AS](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_AS.html) (CTAS) ステートメントと読み取り専用クエリ (SELECT ステートメントなど) のみホップします。詳細については、「[WLM クエリキューのホッピング](wlm-queue-hopping.md)」を参照してください。
  + 中断 – アクションをログに記録してクエリをキャンセルします。QMR は、COPY ステートメントやメンテナンスオペレーション (ALTER、ANALYZE、VACUUM など) を停止しません。
  + 優先度の変更 (自動 WLM でのみ使用可能) – クエリの優先度を変更します。

クエリのランタイムを制限するには、WLM タイムアウトを使用する代わりにクエリモニタリングルールを作成することをお勧めします。例えば、次の JSON スニペットに示すように、`max_execution_time` を 50,000 ミリ秒に設定できます。

```
"max_execution_time": 50000
```

代わりに同等のクエリモニタリングルールを定義することをお勧めします。次の例は、`query_execution_time` を 50 秒に設定するクエリモニタリングルールを示しています。

```
"rules": 
[
    {
        "rule_name": "rule_query_execution",
        "predicate": [
            {
                "metric_name": "query_execution_time",
                "operator": ">",
                "value": 50
            }
        ],
        "action": "abort"
    }            
]
```

クエリモニタリングルールを作成または変更するステップについては、「*Amazon Redshift 管理ガイド*」の「[クエリモニタリングルールを作成する](https://docs.aws.amazon.com/redshift/latest/mgmt/parameter-group-modify-qmr-console.html)」および「[wlm\$1json\$1configuration パラメータのプロパティ](https://docs.aws.amazon.com/redshift/latest/mgmt/workload-mgmt-config.html#wlm-json-config-properties)」を参照してください。

クエリモニタリングルールの詳細は次のトピックで確認できます。
+  [Amazon Redshift のクエリモニタリングメトリクスのプロビジョニング](#cm-c-wlm-query-monitoring-metrics) 
+  [クエリモニタリングルールテンプレート](#cm-c-wlm-query-monitoring-templates) 
+  [クエリモニタリングルールを作成する](https://docs.aws.amazon.com/redshift/latest/mgmt/parameter-group-modify-qmr-console.html) 
+  [ワークロード管理の設定](https://docs.aws.amazon.com/redshift/latest/mgmt/workload-mgmt-config.html) 
+  [クエリのモニタリングルールのシステムテーブルとビュー](#cm-c-wlm-qmr-tables-and-views) 

## Amazon Redshift のクエリモニタリングメトリクスのプロビジョニング
<a name="cm-c-wlm-query-monitoring-metrics"></a>

次のテーブルに、クエリモニタリングルールで使用されるメトリクスを説明します (これらのメトリクスは、[STV\$1QUERY\$1METRICS](r_STV_QUERY_METRICS.md) および [STL\$1QUERY\$1METRICS](r_STL_QUERY_METRICS.md) システムのテーブルに保存されるメトリクスとは異なります)。

指定のメトリクスについて、パフォーマンスしきい値はクエリレベルまたはセグメントレベルのいずれかで追跡されます。セグメントとステップの詳細については、「[クエリプランと実行ワークフロー](c-query-planning.md)」を参照してください。

**注記**  
[WLM タイムアウト](cm-c-defining-query-queues.md#wlm-timeout) パラメータは、クエリモニタリングルールとは異なります。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html)

**注記**  
ホップアクションは、`query_queue_time` 述語ではサポートされていません。つまり、`query_queue_time` 述語が満たされたときにホップするように定義されたルールは無視されます。
短いセグメントの実行時間は、一部のメトリクスで `io_skew` や `query_cpu_usage_percent` などのサンプリングエラーとなる場合があります。サンプリングエラーを回避または減少するには、セグメントの実行時間をルールに含めます。最良な開始ポイントは、`segment_execution_time > 10` です。

[SVL\$1QUERY\$1METRICS](r_SVL_QUERY_METRICS.md) ビューは、完了したクエリのメトリクスを示します。[SVL\$1QUERY\$1METRICS\$1SUMMARY](r_SVL_QUERY_METRICS_SUMMARY.md) ビューは、完了したクエリのメトリクスの最大値を示します。このビューの値は、クエリのモニタリングルールを定義するしきい値を決定する際に役立ちます。

## Amazon Redshift Serverless のクエリモニタリングメトリクス
<a name="cm-c-wlm-query-monitoring-metrics-serverless"></a>

次のテーブルでは、Amazon Redshift Serverless のクエリモニタリングルールで使用されるメトリクスについて説明します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html)

**注記**  
ホップアクションは、`max_query_queue_time` 述語ではサポートされていません。つまり、`max_query_queue_time` 述語が満たされたときにホップするように定義されたルールは無視されます。
短いセグメントの実行時間は、一部のメトリクスで `max_io_skew` や `max_query_cpu_usage_percent` などのサンプリングエラーとなる場合があります。

Amazon Redshift Serverless の場合、`wlm_json_configuration` パラメータを使用してクエリキューとモニタリングルールを設定できます。これにより、上記一覧表示されているメトリクスを使用する異なるユーザーロール、クエリグループ、モニタリングルールを使用して複数のキューを作成できます。サーバーレスクエリキューの設定の詳細については、「*Amazon Redshift 管理ガイド*」の「[WLM JSON 設定の構造](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-query-queues.html#serverless-wlm-json-configuration)」を参照してください。

## クエリモニタリングルールテンプレート
<a name="cm-c-wlm-query-monitoring-templates"></a>

Amazon Redshift コンソールを使用してルールを追加すると、事前定義されたテンプレートからルールを作成することを選択できます。Amazon Redshift は、述語のセットを含む新しいルールを作成し、述語にデフォルト値で入力します。デフォルトのアクションはログです。述語とアクションはユースケースに合わせて変更できます。

次の表に利用可能なテンプレートの一覧を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html)

## クエリのモニタリングルールのシステムテーブルとビュー
<a name="cm-c-wlm-qmr-tables-and-views"></a>

ルールの述語がすべて満たされると、WLM は [STL\$1WLM\$1RULE\$1ACTION](r_STL_WLM_RULE_ACTION.md) システムテーブルに行を書き込みます。この行には、ルールをトリガーしたクエリとその結果のアクションに関する詳細が含まれます。

さらに、Amazon Redshift では、次のシステムテーブルとビューにクエリメトリクスが記録されます。
+ [STV\$1QUERY\$1METRICS](r_STV_QUERY_METRICS.md) テーブルは、現在実行中のクエリのメトリクスを表示します。
+ [STL\$1QUERY\$1METRICS](r_STL_QUERY_METRICS.md) テーブルは完了したクエリのメトリクスを記録します。
+ [SVL\$1QUERY\$1METRICS](r_SVL_QUERY_METRICS.md) ビューは、完了したクエリのメトリクスを示します。
+ [SVL\$1QUERY\$1METRICS\$1SUMMARY](r_SVL_QUERY_METRICS_SUMMARY.md) ビューは、完了したクエリのメトリクスの最大値を示します。