

# RDS for SQL Server を使用した Microsoft SQL Server リソースガバナー
<a name="Appendix.SQLServer.Options.ResourceGovernor"></a>

リソースガバナーは、インスタンスリソースを正確に制御できる SQL Server Enterprise Edition の機能です。これにより、ワークロードが CPU、メモリ、物理 I/O リソースを使用する方法に特定の制限を設定できます。リソースガバナーを使用すると、次のことができます。
+ さまざまなワークロードがインスタンスリソースを共有する方法を管理することで、マルチテナント環境でのリソースの独占を防ぐ
+ ユーザーやアプリケーションごとに特定のリソース制限と優先順位を設定することで、予測可能なパフォーマンスを実現する

既存の RDS for SQL Server DB インスタンスまたは新しい RDS for SQL Server DB インスタンスでリソースガバナーを有効にできます。

リソースガバナーは、次の 3 つの基本概念を使用します。
+ **リソースプール** - インスタンスの物理リソース (CPU、メモリ、I/O) を管理するコンテナ。2 つの組み込みプール (内部プールとデフォルトプール) を取得し、追加のカスタムプールを作成できます。
+ **ワークロードグループ** - 同様の特性を持つデータベースセッションのコンテナ。すべてのワークロードグループはリソースプールに属します。2 つの組み込みワークロードグループ (内部およびデフォルト) を取得し、追加のカスタムワークロードグループを作成できます。
+ **分類** - ユーザー名、アプリケーション名、データベース名、またはホスト名に基づいて、受信セッションを処理するワークロードグループを決定するプロセス。

SQL Server のリソースガバナー機能の詳細については、Microsoft ドキュメントの「[リソースガバナー](https://learn.microsoft.com/en-us/sql/relational-databases/resource-governor/resource-governor?view=sql-server-ver16)」を参照してください。

**Contents**
+ [サポート対象のバージョンとリージョン](#ResourceGovernor.SupportedVersions)
+ [制限と推奨事項](#ResourceGovernor.Limitations)
+ [RDS for SQL Server インスタンスの Microsoft SQL Server リソースガバナーを有効にする](ResourceGovernor.Enabling.md)
  + [`RESOURCE_GOVERNOR` のオプショングループの作成](ResourceGovernor.Enabling.md#ResourceGovernor.OptionGroup)
  + [`RESOURCE_GOVERNOR` オプションのオプショングループへの追加](ResourceGovernor.Enabling.md#ResourceGovernor.Add)
  + [オプショングループを DB インスタンスに関連付ける](ResourceGovernor.Enabling.md#ResourceGovernor.Apply)
+ [RDS for SQL Server インスタンスでの Microsoft SQL Server リソースガバナーの使用](ResourceGovernor.Using.md)
  + [リソースプールの管理](ResourceGovernor.Using.md#ResourceGovernor.ManageResourcePool)
    + [リソースプールの作成](ResourceGovernor.Using.md#ResourceGovernor.CreateResourcePool)
    + [リソースプールの変更](ResourceGovernor.Using.md#ResourceGovernor.AlterResourcePool)
    + [リソースプールの削除](ResourceGovernor.Using.md#ResourceGovernor.DropResourcePool)
  + [ワークロードグループの管理](ResourceGovernor.Using.md#ResourceGovernor.ManageWorkloadGroups)
    + [ワークロードグループを作成する](ResourceGovernor.Using.md#ResourceGovernor.CreateWorkloadGroup)
    + [ワークロードグループの変更](ResourceGovernor.Using.md#ResourceGovernor.AlterWorkloadGroup)
    + [ワークロードグループの削除](ResourceGovernor.Using.md#ResourceGovernor.DropWorkloadGroup)
  + [分類子関数を作成して登録する](ResourceGovernor.Using.md#ResourceGovernor.ClassifierFunction)
  + [分類子関数の削除](ResourceGovernor.Using.md#ResourceGovernor.DropClassifier)
  + [分類子関数の登録解除](ResourceGovernor.Using.md#ResourceGovernor.DeregisterClassifier)
  + [統計をリセットする](ResourceGovernor.Using.md#ResourceGovernor.ResetStats)
  + [リソースガバナーの設定変更](ResourceGovernor.Using.md#ResourceGovernor.ConfigChanges)
  + [TempDB をリソースプールにバインドする](ResourceGovernor.Using.md#ResourceGovernor.BindTempDB)
  + [リソースプールから TempDB をバインド解除する](ResourceGovernor.Using.md#ResourceGovernor.UnbindTempDB)
  + [リソースガバナーのクリーンアップ](ResourceGovernor.Using.md#ResourceGovernor.Cleanup)
+ [マルチ AZ 配置に関する考慮事項](#ResourceGovernor.Considerations)
+ [リードレプリカに関する考慮事項](#ResourceGovernor.ReadReplica)
+ [RDS for SQL Server インスタンスのシステムビューを使用して Microsoft SQL Server リソースガバナーをモニタリングする](ResourceGovernor.Monitoring.md)
  + [リソースプールランタイム統計](ResourceGovernor.Monitoring.md#ResourceGovernor.ResourcePoolStats)
+ [RDS for SQL Server インスタンスの Microsoft SQL Server リソースガバナーを無効にする](ResourceGovernor.Disabling.md)
+ [RDS for SQL Server でリソースガバナーを設定するためのベストプラクティス](ResourceGovernor.BestPractices.md)

## サポート対象のバージョンとリージョン
<a name="ResourceGovernor.SupportedVersions"></a>

Amazon RDS は、RDS for SQL Server が利用可能なすべての AWS リージョンで、次の SQL Server バージョンとエディションのリソースガバナーをサポートしています。
+ SQL Server 2022: Developer および Enterprise Edition
+ SQL Server 2019 Enterprise Edition
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

## 制限と推奨事項
<a name="ResourceGovernor.Limitations"></a>

リソースガバナーには、次の制限と推奨事項が適用されます。
+ エディションとサービスの制限:
  + SQL Server Enterprise Edition でのみ使用できます。
  + リソース管理は SQL Server データベースエンジンに限定されます。Analysis Services、Integration Services、Reporting Services のリソースガバナーはサポートされていません。
+ 設定の制限:
  + すべての設定で Amazon RDS ストアドプロシージャを使用する必要があります。
  + ネイティブ DDL ステートメントと SQL Server Management Studio GUI 設定はサポートされていません。
+ リソースプールパラメータ
  + `rds_` で始まるプール名はサポートされていません。
  + 内部リソースプールとデフォルトリソースプールの変更は許可されません。
  + ユーザー定義のリソースプールでは、次のリソースプールパラメータはサポートされていません。
    + `MIN_MEMORY_PERCENT`
    + `MIN_CPU_PERCENT`
    + `MIN_IOPS_PER_VOLUME`
    + `AFFINITY`
+ ワークロードグループのパラメータ:
  + `rds_` で始まるワークロードグループ名はサポートされていません。
  + 内部ワークロードグループの変更は許可されません。
  + デフォルトのワークロードグループの場合:
    + `REQUEST_MAX_MEMORY_GRANT_PERCENT` パラメータは変更できません。
    + デフォルトのワークロードグループの場合、`REQUEST_MAX_MEMORY_GRANT_PERCENT` は 1～70 である必要があります。
    + 他のすべてのパラメータはロックされており、変更できません。
  + ユーザー定義のワークロードグループでは、すべてのパラメータを変更できます。
+ 分類子関数の制限:
  + 分類子関数は、指定された条件 (ユーザー名、データベース、ホスト、またはアプリケーション名) に基づいて接続をカスタムワークロードグループにルーティングします。
  + それぞれのルーティング条件を持つユーザー定義のワークロードグループを最大 2 つサポートします。
  + 各グループ内で基準を `AND` 条件と組み合わせます。
  + ワークロードグループごとに少なくとも 1 つのルーティング基準が必要です。
  + 上記の分類方法のみがサポートされています。
  + 関数名の先頭には、`rg_classifier_` を付ける必要があります。
  + 条件が一致しない場合のデフォルトのグループ割り当て。

## マルチ AZ 配置に関する考慮事項
<a name="ResourceGovernor.Considerations"></a>

RDS for SQL Server は、マルチ AZ 配置のセカンダリインスタンスにリソースガバナーをレプリケートします。変更された新しいリソースガバナーがセカンダリインスタンスと最後に同期された日時を確認できます。

次のクエリを使用して、レプリケーションの `last_sync_time` を確認します。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

クエリ結果で、同期時刻がリソースガバナーの更新時刻または作成時刻を過ぎている場合、リソースガバナーはセカンダリと同期します。

リソースガバナーのレプリケーションを確認するために手動で DB フェイルオーバーを実行するには、まず `last_sync_time` が更新されるのを待ちます。次に、マルチ AZ フェイルオーバーに進みます。

## リードレプリカに関する考慮事項
<a name="ResourceGovernor.ReadReplica"></a>
+ ソース DB インスタンスと同じリージョンの SQL Server レプリカの場合、ソースと同じオプショングループを使用します。オプショングループへの変更は、メンテナンスウィンドウに関係なく、レプリカにすぐに伝達されます。
+ SQL Server クロスリージョンレプリカを作成する場合、RDS により、そのための専有オプショングループが作成されます。
+ SQL Server クロスリージョンレプリカを、その専有オプショングループから削除することはできません。他の DB インスタンスで、SQL Server クロスリージョンレプリカの専有オプショングループを使用することはできません。
+ リソースガバナーオプションはレプリケートされていないオプションです。専用オプショングループから、レプリケートされないオプションを追加または削除できます。
+ SQL Server クロスリージョンリードレプリカを昇格するとき、昇格されたレプリカは、オプションの管理を含め、その他の SQL Server DB インスタンスと同じように動作します。

**注記**  
リードレプリカでリソースガバナーを使用する場合は、オプションがオプショングループに追加された後に、Amazon RDS ストアドプロシージャを使用して、リードレプリカでリソースガバナーが手動で設定されていることを確認する必要があります。リソースガバナーの設定は、リードレプリカに自動的にレプリケートされません。また、リードレプリカのワークロードは通常、プライマリインスタンスとは異なります。したがって、ワークロードとインスタンスタイプに基づいてリソース設定をレプリカに適用することをお勧めします。リードレプリカでこれらの Amazon RDS ストアドプロシージャを個別に実行して、リードレプリカでリソースガバナーを設定できます。