

# 适用于 RDS for SQL Server 的 Microsoft SQL Server 资源调控器
<a name="Appendix.SQLServer.Options.ResourceGovernor"></a>

资源调控器是 SQL Server 企业版的一项功能，可让您精确控制实例资源。它支持您对工作负载如何使用 CPU、内存和物理 I/O 资源设置特定的限制。使用资源调控器，您可以：
+ 通过管理不同工作负载共享实例资源的方式，防止在多租户环境中发生资源垄断
+ 通过为不同的用户和应用程序设置特定的资源限制和优先级，提供可预测的性能

您可以在现有或新的 RDS for SQL Server 数据库实例上启用资源调控器。

资源调控器使用三个基本概念：
+ **资源池**：管理实例物理资源（CPU、内存和 I/O）的容器。您将获得两个内置池（内部和默认），并且可以创建其它自定义池。
+ **工作负载组**：用于存放具有相似特征的数据库会话的容器。每个工作负载组都属于一个资源池。您将获得两个内置工作负载组（内部和默认），并且可以创建其它自定义工作负载组。
+ **分类**：根据用户名、应用程序名称、数据库名称或主机名，确定哪个工作负载组处理传入会话的过程。

有关 SQL Server 中资源调控器功能的更多详细信息，请参阅 Microsoft 文档中的 [Resource Governor](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)
  + [将选项组与数据库实例关联](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)
+ [多可用区部署的注意事项](#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>

在所有提供 RDS for SQL Server 的 Amazon Web Services 区域中，Amazon RDS 对于以下 SQL Server 版本支持资源调控器：
+ SQL Server 2022 开发人员版和企业版
+ SQL Server 2019 企业版
+ SQL Server 2017 企业版
+ SQL Server 2016 企业版

## 限制和建议
<a name="ResourceGovernor.Limitations"></a>

以下限制和建议适用于资源调控器：
+ 版本和服务限制：
  + 仅在 SQL Server 企业版中可用。
  + 资源管理仅限于 SQL Server 数据库引擎。不支持将资源调控器用于分析服务、集成服务和报告服务。
+ 配置限制：
  + 必须使用 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 之间。
    + 所有其它参数均已锁定，无法更改。
  + 用户定义的工作负载组支持修改所有参数。
+ 分类器函数限制：
  + 分类器函数根据指定的标准（用户名、数据库、主机或应用程序名称）将连接路由到自定义工作负载组。
  + 支持多达两个用户定义的工作负载组及其各自的路由条件。
  + 将标准与每个组内的 `AND` 条件相结合。
  + 每个工作负载组需要至少一个路由标准。
  + 仅支持上面列出的分类方法。
  + 函数名称必须以 `rg_classifier_` 开头。
  + 如果没有条件匹配，则使用默认组分配。

## 多可用区部署的注意事项
<a name="ResourceGovernor.Considerations"></a>

RDS for SQL Server 将资源调控器复制到多可用区部署中的辅助实例。您可以验证修改时间以及新的资源调控器上次与辅助实例同步的时间。

使用以下查询来检查复制的 `last_sync_time`：

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

在查询结果中，如果同步时间超过了资源调控器更新或创建时间，则资源调控器将与辅助实例同步。

要执行手动数据库失效转移以确认资源调控器复制，请先等待 `last_sync_time` 进行更新。然后，继续进行多可用区失效转移。

## 只读副本的注意事项
<a name="ResourceGovernor.ReadReplica"></a>
+ 对于与源数据库实例位于同一区域的 SQL Server 副本，请使用与源相同的选项组。对选项组的更改会立即传播到副本，而不考虑其维护时段。
+ 当您创建 SQL Server 跨区域副本时，RDS 会为其创建专用选项组。
+ 您无法从专用选项组中删除 SQL Server 跨区域副本。任何其他数据库实例都无法使用 SQL Server 跨区域副本的专用选项组。
+ 资源调控器选项为非复制的选项。您可以在专用选项组中添加或删除未复制的选项。
+ 提升 SQL Server 跨区域只读副本时，提升后的副本的行为与其他 SQL Server 数据库实例相同，包括其选项的管理。

**注意**  
当在只读副本上使用资源调控器时，在将选项添加到选项组后，您必须手动确保已使用 Amazon RDS 存储过程在只读副本上配置了资源调控器。资源调控器配置不会自动复制到只读副本。此外，只读副本上的工作负载通常与主实例不同。因此，建议根据您的工作负载和实例类型在副本上应用资源配置。您可以在只读副本上独立运行这些 Amazon RDS 存储过程，以便在只读副本上配置资源调控器。