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

PolarDB:リソースコントロールのユースケース

最終更新日:Feb 19, 2025

このトピックでは、リソースコントロールを使用して、データベースアカウント、データベース、単一クエリ、およびデータベース接続のリソース使用量を管理する方法について説明します。

サポートされているバージョン

  • クラスターのDatabase EditionはEnterprise Editionです。

  • クラスターのエディションがcluster Editionの場合、クラスターは次のいずれかのデータベースエンジンバージョンを実行する必要があります。

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

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

  • クラスターのエディションがマルチマスタークラスター (無制限) の場合、クラスターは次のデータベースエンジンバージョンを実行する必要があります。

    • リビジョンバージョンが8.0.1.0.33以降のPolarDB for MySQL 8.0.1

使用上の注意

重要

リソース制御機能は、申請後にのみ使用できます。 この機能を使用するには、チケットを起票してください。 テクニカルサポートを取得するには、DingTalkグループ59535005981に参加してください。

  • PolarDBのリソース制御機能は、MySQLのリソースグループ機能とは異なります。 2つの機能は、異なるメカニズムを使用してリソース使用を管理します。

    • PolarDBのリソース制御機能を使用すると、データベース、ユーザー、および接続のリソース使用量を制御できます。 この機能は、クラウドネイティブのデータベースに対してより効果的です。

    • MySQLのリソースグループ機能を使用すると、さまざまなリソースグループのCPUコア数とスレッド優先度を指定できます。 MySQLでリソースグループ機能を使用する方法については、「リソースグループ」をご参照ください。 リソースグループ機能は、PolarDB for MySQLではサポートされていません。

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

  • 読み取り専用ノードは、プライマリノードからのリソース制御情報を非同期に同期します。これにより、レイテンシが発生する可能性があります。

テスト環境

重要

Elastic Compute Service (ECS) インスタンスとPolarDB for MySQLクラスターは、同じリージョンとVPCにある必要があります。

  • ECSインスタンスの仕様:

    ecs.g7.2xlarge (8 vCPU、32 GBのメモリ)

  • PolarDB for MySQLクラスター設定:

    • データベース版: Enterprise edition。

    • エディション: クラスターエディション。

    • 仕様タイプ: 専用。

    • データベースエンジン: PolarDB for MySQL 8.0.1。

    • ノードタイプ: polar.mysql.x4.xlarge (8 vCPU、32 GBのメモリ)

準備

重要

データベースアカウントとデータベースの作成

user_1user_2という名前の2つのデータベースアカウントと、database_1database_2という名前の2つのデータベースを作成します。 データベースに対するすべての権限をデータベースアカウントに付与します。

CREATE USER user_1 IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER user_2 IDENTIFIED WITH mysql_native_password BY 'password';
CREATE DATABASE database_1;
CREATE DATABASE database_2;
GRANT ALL ON database_1.* TO user_1;
GRANT ALL ON database_2.* TO user_1;
GRANT ALL ON database_1.* TO user_2;
GRANT ALL ON database_2.* TO user_2;

テストデータのインポート

Sysbenchを使用して、テストデータをdatabase_1およびdatabase_2にインポートします。

sysbench oltp_read_write --threads=16 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=7200 prepare
sysbench oltp_read_write --threads=16 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_2 --tables=10 --table-size=500000 --report-interval=1 --time=7200 prepare

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

リソースコントロールrc_1、rc_2、rc_3、およびrc_4を作成します。

CREATE polar_resource_control rc_1 max_cpu 20;
CREATE polar_resource_control rc_2 max_cpu 50;
CREATE polar_resource_control rc_3 max_cpu 70;
CREATE polar_resource_control rc_4 max_cpu 100;

作成されたリソースコントロールに関する情報を照会します。

SELECT * FROM mysql.polar_resource_control;

Perform the test

重要
  • sysbenchテスト操作は、ECSインスタンスで実行されます。

  • 特権アカウントは、データベースへのログインに使用されます。

データベースアカウントのCPU使用率の制限

  1. sysbenchテストを起動して、user_1データベースアカウントからの負荷を処理する際のdatabase_1およびdatabase_2のパフォーマンスを評価します。

    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_2 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
  2. user_1データベースアカウントのリソースコントロールrc_1rc_2rc_3rc_4を順番に適用および削除します。

    SET polar_resource_control rc_1 FOR USER user_1;
    -- Wait for 3 minutes, remove rc_1 from user_1, and then apply rc_2 to user_1.
    RELEASE polar_resource_control rc_1 FOR USER user_1;
    SET polar_resource_control rc_2 FOR USER user_1;
    -- Wait for 3 minutes, remove rc_2 from user_1, and then apply rc_3 to user_1.
    RELEASE polar_resource_control rc_2 FOR USER user_1;
    SET polar_resource_control rc_3 FOR USER user_1;
    -- Wait for 3 minutes, remove rc_3 from user_1, and then apply rc_4 to user_1.
    RELEASE polar_resource_control rc_3 FOR USER user_1;
    SET polar_resource_control rc_4 FOR USER user_1;
  3. PolarDBコンソールのクラスターのパフォーマンスモニタリングページに移動して、データベースアカウントのCPU使用率が制限されている場合のCPU使用率と1秒あたりのクエリ (QPS) の変更をモニタリングします。 詳細については、「パフォーマンスモニタリング」をご参照ください。

    • プライマリノードと読み取り専用ノードのCPU使用率

      image

    • プライマリノードと読み取り専用ノードのQPS

      image

    説明

    上の図は、user_1に適用されたリソースコントロールに基づいてCPU使用率とQPSが変更されることを示しています。 たとえば、最大CPU使用率は、rc_1がuser_1に適用されている場合は20% 、rc_2がuser_1に適用されている場合は50% です。 user_1のCPU使用率を効果的に制御するには、アカウントにさまざまなリソースコントロールを適用します。

データベースのCPU使用率を制限する

  1. sysbenchテストを起動して、user_1およびuser_2からの負荷を処理する際のdatabase _1のパフォーマンスを評価します。

    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_2 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
  2. database_1のリソースコントロールrc_1およびrc_2を順番に適用および削除します。

    SET polar_resource_control rc_1 FOR DATABASE database_1;
    -- Wait for 3 minutes, remove rc_1 from database_1, and then apply rc_2 to database_1.
    RELEASE polar_resource_control rc_1 FOR DATABASE database_1;
    SET polar_resource_control rc_2 FOR  DATABASE database_1;
    -- Wait for 3 minutes and then remove rc_2 from database_1.
    RELEASE polar_resource_control rc_2 FOR DATABASE database_1; 
  3. PolarDBコンソールのクラスターのパフォーマンスモニタリングページに移動して、データベースのCPU使用率が制限されている場合のCPU使用率とQPSの変更を監視します。 詳細については、「パフォーマンスモニタリング」をご参照ください。

    image

    image

    説明

    上記の図は、CPU使用率とQPSがdatabase_1に適用されたリソースコントロールに基づいて変化することを示しています。 たとえば、最大CPU使用率は、rc_1がdatabase_1に適用された場合に20% され、rc_2がdatabase_1に適用された場合に50% されます。 database_1のCPU使用率を効果的に制御するには、データベースに異なるリソース制御を適用します。

実行中のクエリのCPU使用率の制限

説明

リソースコントロールを使用して、接続で実行中のクエリのCPU使用率を制限できます。 クエリが完了すると、制限は自動的に削除されます。 同じ接続に対する後続のクエリは、リソース制御の影響を受けません。

  1. 大きなクエリをシミュレートします。

    CREATE DATABASE rc_test;
    USE rc_test;
    CREATE TABLE t1(id INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(10));
    INSERT INTO t1(name) VALUES('aaaaaaaaaa');
    INSERT INTO t1(name) SELECT name FROM t1; -- Execute the SQL statement 20 times.
    
    -- Simultaneously execute the statement on two clients to simulate two large queries.
    SELECT COUNT(*) FROM t1 a JOIN t1 B ON a.name = B.name;
  2. 2つの大きなクエリの接続IDを取得します。

    SHOW processlist;
  3. rc_5という名前のリソースコントロールを作成し、2つの大きなクエリにrc_5を適用します。

    CREATE polar_resource_control rc_5 max_cpu 5;
    -- Apply rc_5 to the two running queries.
    SET polar_resource_control rc_5 FOR query <connection_id_1>;
    SET polar_resource_control rc_5 FOR query <connection_id_2>;
    -- Wait for 5 minutes and then remove rc_5 from the two queries.
    RELEASE polar_resource_control rc_5 FOR query <connection_id_1>;
    RELEASE polar_resource_control rc_5 FOR query <connection_id_2>;
  4. PolarDBコンソールのクラスターのパフォーマンス監視ページに移動して、実行中のクエリでCPU使用率が制限されている場合のCPU使用率とQPSの変更を監視します。 詳細については、「パフォーマンスモニタリング」をご参照ください。

    image

接続のCPU使用率の制限

説明

リソースコントロールを使用して、実行時間の長いセッションの接続に対するクエリのCPU使用率を制限できます。

  1. 大きなクエリをシミュレートします。

    CREATE database rc_test;
    USE rc_test;
    CREATE TABLE t1(id INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(10));
    INSERT INTO t1(name) VALUES('aaaaaaaaaa');
    INSERT INTO t1(name) SELECT name FROM t1; -- Execute the SQL statement 20 times.
    
    -- Simultaneously execute the statement on two clients to simulate two large queries.
    SELECT COUNT(*) FROM t1 A JOIN t1 B ON a.name = B.name;
  2. 2つの大きなクエリの接続IDを取得します。

    SHOW processlist;
  3. rc_5という名前のリソースコントロールを作成し、2つの大きなクエリの接続にrc_5を適用します。

    CREATE polar_resource_control rc_5 max_cpu 5;
    SET polar_resource_control rc_5 FOR connection <connection_id_1>;
    SET polar_resource_control rc_5 FOR connection <connection_id_2>;
  4. PolarDBコンソールのクラスターのパフォーマンス監視ページに移動して、CPU使用率が接続に対して制限されている場合のCPU使用率とQPSの変更を監視します。 詳細については、「パフォーマンスモニタリング」をご参照ください。

    image

    説明

    上の図は、15:28:25に2つの接続にリソース制御が適用されると、クラスター全体のCPU使用率が大幅に低下することを示しています。 2つの大きなクエリが15:30:35に手動で中断された後、15:31:40に再実行された後、クラスターの全体的なCPU使用率は制限されたままになります。

  5. 2つの接続からリソース制御を削除します。

    -- Remove the resource control from the connections.
    RELEASE polar_resource_control rc_5 FOR connection <connection_id_1>;
    RELEASE polar_resource_control rc_5 FOR connection <connection_id_2>;

    2つの接続からリソース制御が削除されると、クラスターの全体的なCPU使用率は元のレベルに戻ります。

    image