すべてのプロダクト
Search
ドキュメントセンター

PolarDB:Resource Management の使用

最終更新日:Dec 06, 2025

PolarDB for MySQL は、特定のユーザー、データベース、または接続 ID の CPU 使用率を制限するルールを作成できるリソースコントロール機能を提供します。この機能は、トラフィックの急増によるビジネスへの影響を軽減し、大規模なクエリに迅速にリソース制限を課すのに役立ちます。

バージョン制限

  • Enterprise Edition クラスターのみがサポートされます。

  • クラスター版クラスターの場合:

    • PolarDB for MySQL 8.0.1 (リビジョンバージョン 8.0.1.1.48 以降)。

    • PolarDB for MySQL 8.0.2 (リビジョンバージョン 8.0.2.2.27 以降)。

  • マルチマスタークラスター (無制限) の場合:

    • PolarDB for MySQL 8.0.1 (リビジョンバージョン 8.0.1.0.33 以降)。

注意事項

  • PolarDB のリソースコントロール機能は、MySQL 公式のリソースグループ機能とは異なります。これらは 2 つの異なるメカニズムを使用して、クラスター内のリソース使用量を制御します:

    • PolarDB のリソースコントロール機能は、データベース、データベースユーザー、およびデータベース接続によってリソースを制限します。この機能は、クラウドネイティブデータベースに適しています。

    • MySQL 公式のリソースグループ機能では、異なるリソースグループに対して CPU コア数とスレッド優先度を設定できます。詳細については、MySQL 公式ドキュメントの「Resource Groups」をご参照ください。この機能は、現在 PolarDB for MySQL ではサポートされていません。

  • リソースコントロール機能を使用するには、スレッドプール機能を有効にする必要があります。

  • 読み取り専用 (RO) ノードは、読み書き (RW) ノードからリソースコントロール情報を非同期で同期します。そのため、遅延が発生する可能性があります。

使用方法

PolarDB データベースクラスターに接続した後、特権アカウントでログインします。

リソースコントロール機能の有効化

PolarDB クラスターパラメーターの変更方法は、コンソールとデータベースセッションで異なります。違いは次のとおりです:

  • PolarDB コンソール

    • 互換性:MySQL 構成ファイルとの互換性を保つため、PolarDB コンソールのいくつかのクラスターパラメーターには loose_ プレフィックスが付いています。

    • 手順loose_ プレフィックスが付いているパラメーターを見つけて変更します。

  • データベースセッション内 (コマンドラインまたはクライアントを使用)

    • 手順:データベースセッションで SET コマンドを使用してパラメーターを変更する場合、loose_ プレフィックスを削除し、元のパラメーター名を使用します。

パラメーター名

レベル

説明

loose_enable_resource_control

グローバル

クラスターのリソースコントロール機能を有効または無効にします。

  • ON:有効

  • OFF (デフォルト):無効

リソースコントロールの作成

CREATE polar_resource_control <rc_name> max_cpu <max_cpu_value>;

パラメーター:

パラメーター

説明

rc_name

作成するリソースコントロールの名前。最大長は 64 文字です。

max_cpu_value

リソースコントロールの最大 CPU。値は、クラスター全体の CPU に対するパーセンテージです。有効値は 1 から 100 です。

リソースコントロールを作成した後、特権アカウントから次の SQL クエリを実行して、すべてのリソースコントロールを表示できます。

SELECT * FROM mysql.polar_resource_control;

特権アカウントから次の SQL クエリを実行して、リソースコントロール下のスレッドグループを取得できます。

SELECT id, resource_control_name FROM information_schema.thread_pool_status;

リソースコントロールの更新

ALTER polar_resource_control <rc_name> max_cpu <max_cpu_value>;

説明:

パラメーター

説明

rc_name

リソースコントロールの名前。名前の長さは最大 64 文字です。

max_cpu_value

リソースコントロールで許可される新しい最大 CPU 使用率。値は、クラスターの総 CPU 容量に対するパーセンテージとして指定します。有効値:1~100。

説明

リソースコントロールで許可される最大 CPU 使用率を更新すると、リソースコントロールに関連付けられているスレッドグループの数が変更される場合があります。

リソースコントロールの削除

DROP polar_resource_control <rc_name>;

説明:

パラメーター

説明

rc_name

削除するリソースコントロールの名前。

説明

リソースコントロールが削除されると、関連付けられているスレッドグループは解放されます。以前リソースコントロールによって制限されていたユーザー、データベース、または接続は、制限されなくなります。

ユーザーまたはデータベースへのリソースコントロールの設定

アタッチ

SET polar_resource_control <rc_name> FOR [database|USER] <db_name/user_name>;

SQL 文は次のとおりです:

パラメーター

説明

rc_name

適用するリソースコントロールの名前。

db_name/user_name

リソースコントロールを適用するデータベースまたはユーザー。

説明

この文を実行すると、指定したデータベースまたはユーザーは、リソースコントロールによって設定された CPU リソース制限の対象となります。この変更は、現在実行中の文には影響しません。リソースコントロールが適用された後に実行される文にのみ適用されます。

解放

RELEASE polar_resource_control <rc_name> FOR [database|USER] db_name/user_name>;

この文を実行すると、指定したデータベースまたはユーザーは、リソースコントロールの CPU リソース制限を受けなくなります。すでに実行中の文は、引き続き制限の対象となります。リソースコントロールが削除された後に開始される文は、制限の対象にはなりません。

クエリまたは接続へのリソースコントロールの設定

アタッチ

SET polar_resource_control <rc_name> FOR [query|connection] <connection_id>;

パラメーター:

パラメーター

説明

rc_name

アタッチするリソースコントロールの名前。

connection_id

制限する接続の ID。

説明
  • クエリにリソースコントロールをアタッチする場合、SHOW PROCESSLIST を実行して対応する接続 ID を表示できます。クエリが完了すると、そのクエリはリソースコントロールによる制限を受けなくなります。

  • 接続にリソースコントロールをアタッチする場合、現在のクエリが完了した後もリソース制限は有効なままです。この制限は、接続が閉じるまで適用されます。

リリース

RELEASE polar_resource_control <rc_name> FOR [query|connection] <connection_id>;

パラメーター:

パラメーター

説明

rc_name

アタッチするリソースコントロールの名前。

connection_id

制限する接続の ID。

説明
  • クエリからリソースコントロールを解放すると、そのクエリはコントロールによる制限を受けなくなります。クエリが完了した後、他に適用されるリソースコントロールがない場合、接続は制限されません。

  • 接続からリソースコントロールを解放すると、その接続は、接続、ユーザー、またはデータベースに設定されている適用可能なリソースコントロールによって制限されます。他に適用されるリソースコントロールがない場合、接続は制限されません。

リソースコントロールの優先度

リソースコントロールは、次の優先順位でクエリ文に適用されます。最初に見つかった一致が使用されます。

  1. 接続 ID によってクエリに明示的にアタッチされたコントロール。これが最も高い優先度を持ちます。

  2. 現在の接続がリソースコントロールにアタッチされているかどうかを判断し、それに応じてリソース制限を適用します。

  3. システムは、接続ユーザーがリソースコントロールにアタッチされているかを確認します。アタッチされている場合、リソース制限が適用されます。

  4. 現在接続されているデータベースがリソースコントロールにアタッチされている場合、システムはリソース制限を適用します。

  5. 上記のどの条件も満たされない場合、リソース制限は適用されません。

マルチマスタークラスターの使用

マルチマスタークラスターはシングルマスタークラスターと同様に動作し、構文は完全に互換性があります。CREATE POLAR_RESOURCE_CONTROLALTER POLAR_RESOURCE_CONTROL、または DROP POLAR_RESOURCE_CONTROL 文を実行すると、クラスター内の読み書きノードにランダムに転送されます。その後、文はすべての読み書きノード間で同期されるため、多少の遅延が発生する可能性があります。クエリまたは接続のリソースを制限するには、HINT 構文を使用してノードを指定できます。

ベストプラクティス

シナリオ

  • 悪意のあるユーザーが過剰なクラスターリソースを消費するのを防ぐ。

  • 突然のスロークエリに対処する。

  • サーバーレスクラスターで悪意のあるユーザーが自動スケーリングをトリガーするのを防ぐ。

  • マルチテナント環境や、異なるサービスがクラスターを共有する場合の CPU 使用率を制限する。

使用例

  • 悪意のあるユーザーが過剰なクラスターリソースを消費するのを防ぐ

    悪意のあるユーザーに対処するために、CPU リソース制限を設定できます。これらの制限は、事前または悪意のあるアクティビティに応じて適用できます。

    CREATE polar_resource_control rc_for_trouble_user max_cpu 10;
    SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;

    ユーザー trouble_user にリソースコントロールを設定すると、そのユーザーのスレッドはクラスター全体の CPU の最大 10% しか使用できなくなります。これにより、悪意のあるユーザーが過剰な CPU リソースを消費し、他のサービスに影響を与えるのを効果的に防ぎます。

  • 突然のスロークエリに対処する

    本番環境では、予期しないスロークエリが発生することがあります。これらは、不正確な SQL の解析や最適化によって引き起こされ、CPU 負荷を増大させる可能性があります。これにより、クエリが長時間実行され、大量の CPU リソースを消費します。kill コマンドでクエリを終了させることはできますが、クエリが実行中の特定のポイントに達するまで待つ必要があり、時間がかかります。さらに、kill プロセス中のトランザクションのロールバックも CPU リソースを消費し、時間がかかります。スロークエリによる CPU 負荷を迅速に軽減したり、CPU が完全に使い果たされるのを防いだりするには、そのクエリに CPU 使用率の制限を適用できます。

    CREATE polar_resource_control rc_for_slow_query max_cpu 10;
    SET polar_resource_control rc_for_slow_query FOR query query_id;
    説明

    スロークエリにリソースコントロールを設定する場合、SHOW PROCESSLIST を実行してその query_id を見つけることができます。

    ID が query_id のスロークエリにリソースコントロールを設定すると、クエリの最大 CPU 使用率はクラスター全体の CPU の 10% に制限されます。これにより、クラスターの CPU 負荷が迅速に軽減され、クエリが他の本番サービスに影響を与えるのを防ぎます。

    PolarDB クラスターには複数の計算ノードがあり、異なるノードで同じ接続 ID を持つクエリが存在する可能性があります。したがって、クエリにリソースコントロールを設定する場合は、HINT 構文を使用して特定ノードに設定を適用します。

    /*force_node='pi-bpxxxxxxxx'*/ SET polar_resource_control rc_for_slow_query FOR query query_id;
  • サーバーレスクラスターで悪意のあるユーザーがクラスターのスケーリングをトリガーするのを防ぐ

    クラスターが サーバーレスモードの場合、ワークロードに基づいて自動的にスケーリングし、突然の高負荷バーストに対応します。ただし、悪意のあるユーザーからのリクエストに応じてクラスターがスケーリングするのを防ぎたい場合があります。この場合、サーバーレスクラスター上のこれらの悪意のあるユーザーにリソース制限を適用できます。

    CREATE polar_resource_control rc_for_trouble_user max_cpu 10;
    SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;
  • マルチテナントまたはマルチサービスクラスターでの CPU 使用率の制限

    SaaS (Software as a Service) シナリオでは、多くの場合、複数のテナントが同じクラスター上で実行されます。また、異なるビジネスサービスがクラスターを共有することも一般的です。このような状況では、単一のテナントまたはサービスが使用できるリソースを制限することが重要です。これにより、1 人のユーザーまたは 1 つのサービスが CPU を過剰に消費し、クラスター全体のパフォーマンスに影響を与えるのを防ぎます。これを行うには、サービスごとに個別の CPU リソース制限を設定できます。たとえば、ユーザーごとまたはデータベースごとに制限を適用してこれを実現できます。

    CREATE polar_resource_control rc_for_business_1 max_cpu 20;
    CREATE polar_resource_control rc_for_business_2 max_cpu 20;
    
    SET polar_resource_control rc_for_business_1 FOR USER user_1;
    SET polar_resource_control rc_for_business_2 FOR USER user_2;

    これらの設定に基づき、user_1user_2 が使用するサービスは、それぞれクラスター全体の CPU の最大 20% に制限されます。したがって、2 人のユーザーは合計で最大 40% の CPU リソースを使用できます。user_1 のワークロードが急増した場合でも、その CPU 使用率は 20% に抑えられ、クラスター上の他のサービスに影響が及ばないようにします。

    単一のサービスが複数のユーザーを使用する場合、それらすべてに同じリソースコントロールを割り当てることができます。

    CREATE polar_resource_control rc_for_business_1 max_cpu 20;
    
    SET polar_resource_control rc_for_business_1 FOR USER user_1;
    SET polar_resource_control rc_for_business_1 FOR USER user_2;

    これらの設定に基づき、user_1user_2 が使用するサービスは、クラスター全体の CPU の最大 20% に制限されます。したがって、2 人のユーザーは合計で最大 20% の CPU リソースを使用できます。これにより、一方のユーザーのワークロードが増加しても、サービスが CPU 制限を超えるのを防ぎます。これにより、公正なリソース割り当てが保証されます。