このトピックでは、リソースコントロールを使用して、データベースアカウント、データベース、単一クエリ、およびデータベース接続のリソース使用量を管理する方法について説明します。
サポートされているバージョン
クラスターの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のメモリ)
準備
sysbenchテスト操作は、ECSインスタンスで実行されます。 sysbenchの詳細については、「sysbenchをテストに使用する」をご参照ください。
特権アカウントは、データベースへのログインに使用されます。 詳細については、「データベース接続」および「アカウント管理」をご参照ください。
データベースアカウントとデータベースの作成
user_1とuser_2という名前の2つのデータベースアカウントと、database_1とdatabase_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使用率の制限
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 runuser_1データベースアカウントのリソースコントロールrc_1、rc_2、rc_3、rc_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;PolarDBコンソールのクラスターのパフォーマンスモニタリングページに移動して、データベースアカウントのCPU使用率が制限されている場合のCPU使用率と1秒あたりのクエリ (QPS) の変更をモニタリングします。 詳細については、「パフォーマンスモニタリング」をご参照ください。
プライマリノードと読み取り専用ノードのCPU使用率

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

説明上の図は、
user_1に適用されたリソースコントロールに基づいてCPU使用率とQPSが変更されることを示しています。 たとえば、最大CPU使用率は、rc_1がuser_1に適用されている場合は20% 、rc_2がuser_1に適用されている場合は50% です。user_1のCPU使用率を効果的に制御するには、アカウントにさまざまなリソースコントロールを適用します。
データベースのCPU使用率を制限する
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 rundatabase_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;PolarDBコンソールのクラスターのパフォーマンスモニタリングページに移動して、データベースのCPU使用率が制限されている場合のCPU使用率とQPSの変更を監視します。 詳細については、「パフォーマンスモニタリング」をご参照ください。

説明上記の図は、CPU使用率とQPSが
database_1に適用されたリソースコントロールに基づいて変化することを示しています。 たとえば、最大CPU使用率は、rc_1がdatabase_1に適用された場合に20% され、rc_2がdatabase_1に適用された場合に50% されます。database_1のCPU使用率を効果的に制御するには、データベースに異なるリソース制御を適用します。
実行中のクエリのCPU使用率の制限
リソースコントロールを使用して、接続で実行中のクエリのCPU使用率を制限できます。 クエリが完了すると、制限は自動的に削除されます。 同じ接続に対する後続のクエリは、リソース制御の影響を受けません。
大きなクエリをシミュレートします。
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つの大きなクエリの接続IDを取得します。
SHOW processlist;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>;PolarDBコンソールのクラスターのパフォーマンス監視ページに移動して、実行中のクエリでCPU使用率が制限されている場合のCPU使用率とQPSの変更を監視します。 詳細については、「パフォーマンスモニタリング」をご参照ください。

接続のCPU使用率の制限
リソースコントロールを使用して、実行時間の長いセッションの接続に対するクエリのCPU使用率を制限できます。
大きなクエリをシミュレートします。
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つの大きなクエリの接続IDを取得します。
SHOW processlist;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>;PolarDBコンソールのクラスターのパフォーマンス監視ページに移動して、CPU使用率が接続に対して制限されている場合のCPU使用率とQPSの変更を監視します。 詳細については、「パフォーマンスモニタリング」をご参照ください。
説明上の図は、15:28:25に2つの接続にリソース制御が適用されると、クラスター全体のCPU使用率が大幅に低下することを示しています。 2つの大きなクエリが15:30:35に手動で中断された後、15:31:40に再実行された後、クラスターの全体的なCPU使用率は制限されたままになります。
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使用率は元のレベルに戻ります。
