RDS for SQL Server インスタンスでの Microsoft SQL Server リソースガバナーの使用
リソースガバナーオプションをオプショングループに追加した後も、リソースガバナーはデータベースエンジンレベルでまだアクティブではありません。リソースガバナーを完全に有効にするには、RDS for SQL Server ストアドプロシージャを使用してリソースガバナーオブジェクトを有効にし、必要なリソースガバナーオブジェクトを作成する必要があります。詳細については、「SQL Server DB インスタンスへの接続」を参照してください。
まず、SQL Server データベースに接続し、適切な RDS for SQL Server ストアドプロシージャを呼び出して設定を完了します。データベースに接続する手順については、「SQL Server DB インスタンスへの接続」を参照してください。
各ストアドプロシージャを呼び出す方法については、以下のトピックを参照してください。
トピック
リソースプールの管理
リソースプールの作成
オプショングループでリソースガバナーを有効にすると、rds_create_resource_pool を使用してカスタムリソースプールを作成できます。これらのプールを使用すると、CPU、メモリ、IOPS の特定の割合をさまざまなワークロードに割り当てることができます。
Usage
USE [msdb] EXEC dbo.rds_create_resource_pool @pool_name=value, @MAX_CPU_PERCENT=value, @CAP_CPU_PERCENT=value, @MAX_MEMORY_PERCENT=value, @MAX_IOPS_PER_VOLUME=value
以下のパラメータは必須です。
-
@group_name- 既存のユーザー定義のワークロードグループの名前です。 -
@pool_name- リソースプールのユーザー定義の名前です。pool_nameは英数字で、最大 128 文字で、データベースエンジンインスタンス内で一意である必要があり、データベース識別子のルールに準拠する必要があります。
以下のパラメータはオプションです。
-
@MAX_CPU_PERCENT- CPU 競合がある場合にリソースプール内のすべてのリクエストが受け取る最大平均 CPU 帯域幅を指定します。値は、デフォルト設定の 100 の整数です。値の許容範囲は 1~100 です。 -
@CAP_CPU_PERCENT- リソースプール内のすべてのリクエストが受信する CPU 帯域幅のハードキャップを指定します。最大 CPU 帯域幅レベルを指定された値と同じに制限します。値は、デフォルト設定の 100 の整数です。値の許容範囲は 1~100 です。 -
@MAX_MEMORY_PERCENT- このリソースプールのリクエストで使用できるクエリワークスペースメモリの最大量を指定します。値は、デフォルト設定の 100 の整数です。値の許容範囲は 1~100 です。 -
@MAX_IOPS_PER_VOLUME- リソースプールを許可するディスクボリュームあたりの 1 秒あたりの最大 I/O オペレーション (IOPS) を指定します。値の許容範囲は 0~2^31-1 (2,147,483,647) です。プールの IOPS 制限を削除するには、0 を指定します。デフォルトは 0 です。
例
すべてのデフォルト値を使用してリソースプールを作成する例:
--This creates resource pool 'SalesPool' with all default values USE [msdb] EXEC rds_create_resource_pool @pool_name = 'SalesPool'; --Apply changes USE [msdb] EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_resource_pools
異なるパラメータを指定してリソースプールを作成する例:
--creates resource pool USE [msdb] EXEC dbo.rds_create_resource_pool @pool_name='analytics', @MAX_CPU_PERCENT = 30, @CAP_CPU_PERCENT = 40, @MAX_MEMORY_PERCENT = 20; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_resource_pools
リソースプールの変更
Usage
USE [msdb] EXEC dbo.rds_alter_resource_pool @pool_name=value, @MAX_CPU_PERCENT=value, @CAP_CPU_PERCENT=value, @MAX_MEMORY_PERCENT=value, @MAX_IOPS_PER_VOLUME=value;
以下のパラメータは必須です。
-
@pool_name- 既存のユーザー定義リソースプールの名前です。Amazon RDS SQL Server では、デフォルトのリソースプールの変更は許可されていません。
オプションのパラメータを少なくとも 1 つ指定する必要があります。
-
@MAX_CPU_PERCENT- CPU 競合がある場合にリソースプール内のすべてのリクエストが受け取る最大平均 CPU 帯域幅を指定します。値は、デフォルト設定の 100 の整数です。値の許容範囲は 1~100 です。 -
@CAP_CPU_PERCENT- リソースプール内のすべてのリクエストが受信する CPU 帯域幅のハードキャップを指定します。最大 CPU 帯域幅レベルを指定された値と同じに制限します。値は、デフォルト設定の 100 の整数です。値の許容範囲は 1~100 です。 -
@MAX_MEMORY_PERCENT- このリソースプールのリクエストで使用できるクエリワークスペースメモリの最大量を指定します。値は、デフォルト設定の 100 の整数です。値の許容範囲は 1~100 です。 -
@MAX_IOPS_PER_VOLUME- リソースプールを許可するディスクボリュームあたりの 1 秒あたりの最大 I/O オペレーション (IOPS) を指定します。値の許容範囲は 0~2^31-1 (2,147,483,647) です。プールの IOPS 制限を削除するには、0 を指定します。デフォルトは 0 です。
例
--This alters resource pool USE [msdb] EXEC dbo.rds_alter_resource_pool @pool_name='analytics', @MAX_CPU_PERCENT = 10, @CAP_CPU_PERCENT = 20, @MAX_MEMORY_PERCENT = 50; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration. select * from sys.resource_governor_resource_pools
リソースプールの削除
Usage
USE [msdb] EXEC dbo.rds_drop_resource_pool @pool_name=value;
以下のパラメータは必須です。
-
@pool_name- 既存のユーザー定義リソースプールの名前です。
注記
SQL Server では、内部リソースプールまたはデフォルトリソースプールの削除は許可されていません。
例
--This drops resource pool USE [msdb] EXEC dbo.rds_drop_resource_pool @pool_name='analytics' --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_resource_pools
ワークロードグループの管理
rds_create_workload_group および rds_alter_workload_group で作成および管理されるワークロードグループを使用すると、クエリグループの重要度レベル、メモリ許可、およびその他のパラメータを設定できます。
ワークロードグループを作成する
Usage
USE [msdb] EXEC dbo.rds_create_workload_group @group_name = value, @IMPORTANCE ={ LOW | MEDIUM | HIGH }, @REQUEST_MAX_MEMORY_GRANT_PERCENT =value, @REQUEST_MAX_CPU_TIME_SEC = value , @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, @MAX_DOP = value, @GROUP_MAX_REQUESTS = value, @pool_name = value
以下のパラメータは必須です。
-
@pool_name- 既存のユーザー定義リソースプールの名前です。 -
@group_name- 既存のユーザー定義のワークロードグループの名前です。
以下のパラメータはオプションです。
-
@IMPORTANCE- ワークロードグループ内のリクエストの相対的な重要度を指定します。デフォルト値はMEDIUMです。 -
@REQUEST_MAX_MEMORY_GRANT_PERCENT- 1 つのリクエストがプールから取得できるクエリワークスペースメモリの最大量を指定します。値は、MAX_MEMORY_PERCENTで定義されたリソースプールサイズのパーセンテージです。デフォルト値は 25 です。 -
@REQUEST_MAX_CPU_TIME_SEC- バッチリクエストで使用できる CPU の最大時間を秒単位で指定します。値は 0 または正の整数である必要があります。値のデフォルト設定は 0 です。つまり、無制限です。 -
@REQUEST_MEMORY_GRANT_TIMEOUT_SEC- クエリがクエリワークスペースメモリからのメモリ許可が利用可能になるまで待機できる最大時間を秒単位で指定します。値は 0 または正の整数である必要があります。値のデフォルト設定である 0 では、クエリコストに基づく内部計算を使用して最大時間を決定します。 -
@MAX_DOP- 並列クエリ実行の最大並列度 (MAXDOP) を指定します。値の許容範囲は 0~64 です。値のデフォルト設定である 0 では、グローバル設定が使用されます。 -
@GROUP_MAX_REQUESTS= ワークロードグループで実行できる同時リクエストの最大数を指定します。値は 0 または正の整数である必要があります。値のデフォルト設定は 0 で、無制限のリクエストを許可します。 -
@pool_name= ワークロードグループをpool_nameで識別されるユーザー定義のリソースプール、またはdefaultリソースプールに関連付けます。pool_nameが指定されていない場合、ワークロードグループは組み込みdefaultプールに関連付けられます。
例
--This creates workload group named 'analytics' USE msdb; EXEC dbo.rds_create_workload_group @group_name = 'analytics', @IMPORTANCE = 'HIGH', @REQUEST_MAX_MEMORY_GRANT_PERCENT = 25, @REQUEST_MAX_CPU_TIME_SEC = 0, @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 0, @MAX_DOP = 0, @GROUP_MAX_REQUESTS = 0, @pool_name = 'analytics'; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_workload_groups
ワークロードグループの変更
Usage
EXEC msdb.dbo.rds_alter_workload_group @group_name = value, @IMPORTANCE = 'LOW|MEDIUM|HIGH', @REQUEST_MAX_MEMORY_GRANT_PERCENT = value, @REQUEST_MAX_CPU_TIME_SEC = value, @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, @MAX_DOP = value, @GROUP_MAX_REQUESTS = value, @pool_name = value
以下のパラメータは必須です。
-
@group_name- デフォルトまたは既存のユーザー定義のワークロードグループの名前です。
注記
デフォルトのワークロードグループの REQUEST_MAX_MEMORY_GRANT_PERCENT パラメータのみの変更がサポートされています。デフォルトのワークロードグループの場合、REQUEST_MAX_MEMORY_GRANT_PERCENT は 1~70 である必要があります。デフォルトのワークロードグループでは、他のパラメータを変更することはできません。すべてのパラメータは、ユーザー定義のワークロードグループで変更できます。
以下のパラメータはオプションです。
-
@IMPORTANCE- ワークロードグループ内のリクエストの相対的な重要度を指定します。デフォルト値は MEDIUM です。 -
@REQUEST_MAX_MEMORY_GRANT_PERCENT- 1 つのリクエストがプールから取得できるクエリワークスペースメモリの最大量を指定します。値は、MAX_MEMORY_PERCENTで定義されたリソースプールサイズのパーセンテージです。デフォルト値は 25 です。Amazon RDS では、REQUEST_MAX_MEMORY_GRANT_PERCENTは 1~70 である必要があります。 -
@REQUEST_MAX_CPU_TIME_SEC- バッチリクエストで使用できる CPU の最大時間を秒単位で指定します。値は 0 または正の整数である必要があります。値のデフォルト設定は 0 です。つまり、無制限です。 -
@REQUEST_MEMORY_GRANT_TIMEOUT_SEC- クエリがクエリワークスペースメモリからのメモリ許可が利用可能になるまで待機できる最大時間を秒単位で指定します。値は 0 または正の整数である必要があります。値のデフォルト設定である 0 では、クエリコストに基づく内部計算を使用して最大時間を決定します。 -
@MAX_DOP- 並列クエリ実行の最大並列度 (MAXDOP) を指定します。値の許容範囲は 0~64 です。値のデフォルト設定である 0 では、グローバル設定が使用されます。 -
@GROUP_MAX_REQUESTS- ワークロードグループで実行できる同時リクエストの最大数を指定します。値は 0 または正の整数である必要があります。値のデフォルト設定は 0 で、無制限のリクエストを許可します。 -
@pool_name- ワークロードグループをpool_nameで識別されるユーザー定義のリソースプールに関連付けます。
例
デフォルトのワークロードグループ変更 REQUEST_MAX_MEMORY_GRANT_PERCENT を変更する例:
--Modify default workload group (set memory grant cap to 10%) USE msdb EXEC dbo.rds_alter_workload_group @group_name = 'default', @REQUEST_MAX_MEMORY_GRANT_PERCENT=10; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration SELECT * FROM sys.resource_governor_workload_groups WHERE name='default';
デフォルト以外のワークロードグループを変更する例:
EXEC msdb.dbo.rds_alter_workload_group @group_name = 'analytics', @IMPORTANCE = 'HIGH', @REQUEST_MAX_MEMORY_GRANT_PERCENT = 30, @REQUEST_MAX_CPU_TIME_SEC = 3600, @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 60, @MAX_DOP = 4, @GROUP_MAX_REQUESTS = 100; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration;
デフォルト以外のワークロードグループを別のリソースプールに移動する例:
EXEC msdb.dbo.rds_alter_workload_group @group_name = 'analytics', @pool_name='abc' --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_workload_groups
ワークロードグループの削除
Usage
EXEC msdb.dbo.rds_drop_workload_group @group_name = value
以下のパラメータは必須です。
-
@group_name- 既存のユーザー定義のワークロードグループの名前です。
例
--Drops a Workload Group: EXEC msdb.dbo.rds_drop_workload_group @group_name = 'analytics'; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_workload_groups
分類子関数を作成して登録する
この手順では、指定された条件 (ユーザー名、データベース、ホスト、またはアプリケーション名) に基づいてカスタムワークロードグループへの接続をルーティングするリソースガバナーの分類子関数をマスターデータベースに作成します。リソースガバナーが有効で、分類子関数がリソースガバナー設定で指定されている場合、関数の出力によって新しいセッションに使用されるワークロードグループが決まります。分類子関数がない場合、すべてのセッションが default グループに分類されます。
の機能
-
それぞれのルーティング条件で最大 2 つのワークロードグループをサポートします。
-
各グループ内で基準を
AND条件と組み合わせます。 -
ワークロードグループごとに少なくとも 1 つのルーティング基準が必要です。
-
関数名の先頭には、
rg_classifier_を付ける必要があります。 -
条件が一致しない場合のデフォルトのグループ割り当て。
分類子関数には、次の特性と動作があります。
-
関数はサーバースコープ (マスターデータベース) で定義されます。
-
関数はスキーマバインディングを使用して定義されます。
-
この関数は、接続プーリングが有効になっている場合でも、新しいセッションごとに評価されます。
-
関数は、セッションのワークロードグループコンテキストを返します。セッションは、セッションの存続期間中、分類子によって返されるワークロードグループに割り当てられます。
-
関数が NULL、デフォルト、または存在しないワークロードグループの名前を返す場合、セッションにはデフォルトのワークロードグループコンテキストが与えられます。何らかの理由で関数が失敗した場合も、セッションにはデフォルトのコンテキストが与えられます。
-
複数の分類子関数を作成できます。ただし、SQL Server では、一度に登録できる分類子関数は 1 つだけです。
-
分類子名を NULL に設定する登録解除手順 (
EXEC dbo.msdb.rds_alter_resource_governor_configuration @deregister_function = 1;) を使用して分類子ステータスが削除されるか、(EXEC dbo.msdb.rds_alter_resource_governor_configuration @classifier_function = <function_name>;) を使用して別の分類子関数が登録されない限り、分類子関数を削除することはできません。 -
分類子関数がない場合、すべてのセッションがデフォルトグループに分類されます。
-
分類子関数は、リソースガバナー設定で参照されている間は変更できません。ただし、別の分類子関数を使用するように設定を変更することはできます。分類子を変更する場合は、分類子関数のペアの作成を検討してください。例えば、
rg_classifier_aとrg_classifier_bを作成できます。
Usage
EXEC msdb.dbo.rds_create_classifier_function @function_name = value, @workload_group1 = value, @user_name1 = value, @db_name1 = value, @host_name1 = value, @app_name1 = value, @workload_group2 = value, @user_name2 = value, @db_name2 = value, @host_name2 = value, @app_name2 = value
以下のパラメータは必須です。
@function_name- 分類子関数の名前。rg_classifier_で始まる必要があります@workload_group1- 最初のワークロードグループの名前
以下のパラメータはオプションです。
(グループ 1 には、これらの基準の少なくとも 1 つを指定する必要があります)
@user_name1- グループ 1 のログイン名@db_name1- グループ 1 のデータベース名@host_name1- グループ 1 のホスト名@app_name1- グループ 1 のアプリケーション名
(グループ 2 が指定されている場合、少なくとも 1 つの条件を指定する必要があります)
@workload_group2- 2 番目のワークロードグループの名前@user_name2- グループ 2 のログイン名@db_name2- グループ 2 のデータベース名@host_name2- グループ 2 のホスト名@app_name2- グループ 2 のアプリケーション名
注記
システムアカウント、データベース、アプリケーション、ホストは制限されています。
例
1 つのワークロードグループの基本的な例:
/*Create a classifier to route all requests from 'PowerBI' app to workload group 'reporting_group'*/ EXEC msdb.dbo.rds_create_classifier_function @function_name = 'rg_classifier_a', @workload_group1 = 'reporting_group', @app_name1 = 'PowerBI'; --Register the classifier EXEC msdb.dbo.rds_alter_resource_governor_configuration @classifier_function = 'rg_classifier_a'; -- Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration /*Query sys.resource_governor_configuration to validate that resource governor is enabled and is using the classifier function we created and registered*/ use master go SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name, OBJECT_NAME(classifier_function_id) AS classifier_object_name, is_enabled FROM sys.resource_governor_configuration;
分類子関数の削除
Usage
USE [msdb] EXEC dbo.rds_drop_classifier_function @function_name = value;
以下のパラメータは必須です。
-
@function_name- 既存のユーザー定義分類子関数の名前です。
例
EXEC msdb.dbo.rds_drop_classifier_function @function_name = 'rg_classifier_b';
分類子関数の登録解除
分類子関数の登録を解除するには、この手順を使用します。関数の登録が解除されると、新しいセッションは自動的にデフォルトのワークロードグループに割り当てられます。
Usage
USE [msdb] EXEC dbo.rds_alter_resource_governor_configuration @deregister_function = 1;
登録解除には、次のパラメータが必要です。
-
@deregister_functionは 1 でなければなりません。
例
EXEC msdb.dbo.rds_alter_resource_governor_configuration @deregister_function = 1; GO -- Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration;
統計をリセットする
リソースガバナー統計は、前回のサーバー再起動以降に累積されます。特定の時間から統計を収集する必要がある場合は、次の Amazon RDS ストアドプロシージャを使用して統計をリセットできます。
Usage
USE [msdb] EXEC dbo.rds_alter_resource_governor_configuration @reset_statistics = 1;
統計をリセットするには、次のパラメータが必要です。
-
@reset_statisticsは 1 でなければなりません。
リソースガバナーの設定変更
リソースガバナーが有効になっていない場合、rds_alter_resource_governor_configuration はリソースガバナーを有効にします。リソースガバナーを有効にすると、次の結果が得られます。
-
分類子関数がある場合は、新しいセッションに対して実行され、ワークロードグループに割り当てられます。
-
リソースガバナー設定で指定されたリソース制限が優先され、適用されます。
-
リソースガバナー設定で指定されたリソース制限が優先され、適用されます。
-
リソースガバナーを有効にする前に存在していたリクエストは、リソースガバナーが有効になっているときに行われた設定変更の影響を受ける可能性があります。
-
リソースガバナーを有効にする前からの既存のリクエストは、リソースガバナーが有効になっているときに行われた設定変更の影響を受ける可能性があります。
-
RDS for SQL Server で、リソースガバナー設定の変更を有効にするには、
EXEC msdb.dbo.rds_alter_resource_governor_configurationを実行する必要があります。
Usage
USE [msdb] EXEC dbo.rds_alter_resource_governor_configuration
TempDB をリソースプールにバインドする
Amazon RDS SQL Server バージョン 2019 以降では、rds_bind_tempdb_metadata_to_resource_pool を使用して、tempdb メモリ最適化メタデータを特定のリソースプールにバインドできます。
注記
tempdb メタデータをリソースプールにバインドする前に、メモリ最適化 tempdb メタデータ機能を有効にする必要があります。Amazon RDS でこの機能を有効にするには、静的パラメータ tempdb metadata memory-optimized を使用します。
Amazon RDS で静的パラメータを有効にし、パラメータを有効にするためにフェイルオーバーなしで再起動を実行します。
aws rds modify-db-parameter-group \ --db-parameter-group-name test-sqlserver-ee-2022 \ --parameters "ParameterName='tempdb metadata memory-optimized',ParameterValue=True,ApplyMethod=pending-reboot"
Usage
USE [msdb] EXEC dbo.rds_bind_tempdb_metadata_to_resource_pool @pool_name=value;
以下のパラメータは必須です。
-
@pool_name- 既存のユーザー定義リソースプールの名前です。
注記
この変更では、メモリ最適化 TempDB メタデータ機能が既に有効になっている場合でも、フェイルオーバーなしで SQL サービスを再起動する必要があります。
リソースプールから TempDB をバインド解除する
tempdb メモリ最適化メタデータをリソースプールからバインド解除します。
注記
この変更を有効にするには、フェイルオーバーなしで SQL サービスを再起動する必要もあります
Usage
USE [msdb] EXEC dbo.rds_unbind_tempdb_metadata_from_resource_pool
リソースガバナーのクリーンアップ
この手順では、オプショングループからリソースガバナーオプションを削除した後、関連するすべてのオブジェクトをクリーンアップします。これにより、リソースガバナーを無効にし、デフォルトのワークロードグループをデフォルト設定に戻し、カスタムワークロードグループ、リソースプール、分類子関数を削除します。
主な特徴:
-
デフォルトのワークロードグループをデフォルト設定に戻す
-
リソースガバナーを無効にする
-
カスタムワークロードグループを削除する
-
カスタムリソースプールを削除する
-
分類子関数を削除する
-
有効になっている場合、tempdb リソースプールバインディングを削除する
重要
このクリーンアップは、ワークロードグループにアクティブなセッションがある場合にエラーになる可能性があります。ビジネス要件に従って、アクティブなセッションが終了するのを待つか、アクティブなセッションを終了します。これをメンテナンスウィンドウ中に実行することをお勧めします。
このクリーンアップは、リソースプールが tempdb にバインドされ、フェイルオーバーなしで再起動されていない場合にエラーが発生する可能性があります。リソースプールを tempdb にバインドするか、以前に tempdb からリソースプールをバインド解除した場合は、フェイルオーバーなしで再起動を実行して変更を有効にします。これをメンテナンスウィンドウ中に実行することをお勧めします。
Usage
USE [msdb] EXEC dbo.rds_cleanup_resource_governor