可以使用资源调控器来管理数据库引擎资源消耗,并强制实施用户工作负荷的策略。 利用资源调控器,可以保留或限制用户查询工作负载可以使用的 CPU、内存和物理 I/O 量。 还可以修改每个查询的资源消耗行为,例如并行度或内存授予的大小。
从 SQL Server 2025(17.x) 预览版开始,可以使用资源调控器来强制限制应用程序或用户工作负荷消耗的总 tempdb
空间量。 有关详细信息,请参阅 Tempdb 空间资源治理。
有关配置和监视示例以及了解资源调控器最佳做法,请参阅 教程:资源调控器配置示例和最佳做法。
注意
虽然 azure SQL 数据库 利用资源调控器(以及其他技术)来管理资源,但不支持 Azure SQL 数据库中的资源池和工作负荷组的用户配置。
Azure Synapse Analytics 通过 工作负荷分类功能对类似的资源治理行为有不同的实现。
资源调控器的优点
利用资源管理器,您可以通过为请求指定资源消耗的预留和限制,来管理数据库引擎的工作负荷和资源。 在资源调控器上下文中,工作负荷是一组可以且应被视为单个实体的查询(请求)。 例如,某些应用程序执行的所有查询都可能被视为工作负荷。 虽然这不是一项要求,但工作负荷的资源使用模式越统一,可能从资源调控器派生的好处就越大。
如果同一服务器上存在多个不同的工作负荷,资源调控器允许根据指定的限制以不同的方式将资源分配给不同的工作负荷。
资源调控器支持的一些使用方案包括:
- 在服务于多个客户端工作负荷的单个 SQL Server 实例上提供多租户和资源隔离。 即:你可以将某个服务器上的可用资源划分到多个工作负载上,并且尽量减少在工作负载争用资源时可能发生的问题。
- 提供可预测性能并且在多工作负荷和多用户环境中支持针对工作负荷的 SLA。
- 隔离和限制失控查询,或者限制可能使 I/O 子系统饱和以及对其他工作负载有负面影响的 I/O 密集型操作的 I/O 资源。
- 为资源使用退款添加细粒度资源跟踪,并且对服务器资源的使用者提供可预测的计费。
互作性和限制
- 资源调控器可与 AlwaysOn 可用性组 和 故障转移群集实例一起使用。 请注意以下事项:
- 资源管理仅限于 SQL Server 数据库引擎。 资源调控器不能用于分析服务、集成服务和报表服务。
- 资源调控器不提供跨多个 SQL Server 实例的工作负荷监视或工作负荷管理。
- 非常短的查询(例如某些 OLTP 工作负载中的查询)可能没有足够的 CPU 时间来应用 CPU 带宽控制。 这可能会扭曲 CPU 使用率统计信息,并限制 CPU 资源治理的有效性。
- 管理物理 I/O 的功能仅适用于用户操作,不适用于系统任务。 系统任务执行事务日志、检查点和惰性编写器 I/O。 资源调控器控制用户物理读取 I/O,但不控制由系统任务执行的写入 I/O。
- 无法修改
internal
资源池和工作负荷组的资源调控控件。
资源概念
以下三个概念是了解和使用资源调控器的基础:
- 资源池。 资源池表示服务器物理资源的容器,例如 CPU、内存和 I/O。 始终存在两个内置资源池,
internal
和default
。 资源调控器还支持用户定义的资源池。 根据配置,资源池中的资源可以与其他池共享或保留。 有关详细信息,请参阅资源调控器资源池。 - 工作负荷组。 工作负荷组表示以相同方式分类的会话的容器。 工作负荷组允许对会话和请求资源消耗进行聚合监视,并定义请求策略。 每个工作负荷组都处于一个资源池中。 两个内置工作负荷组(
internal
和default
)始终存在,并分别映射到internal
和default
资源池。 资源调控器还支持用户定义的工作负荷组。 有关详细信息,请参阅 资源调控器工作负荷组。 - 分类。 分类过程使用自定义分类逻辑根据会话的属性(例如登录名或程序名称)将传入会话分配给工作负荷组。 将会话分类为工作负荷组后,在该会话上执行的所有请求都受工作负荷组策略的约束。 可以通过编写一个名为分类器函数的标量用户定义函数来定义分类逻辑。 有关详细信息,请参阅 资源调控器分类器函数。
注意
资源调控器不会对 专用管理员连接(DAC)施加任何控制。 DAC 查询始终在 internal
工作负荷组和资源池中运行。
下图显示了资源调控器组件及其在数据库引擎中彼此之间的关系。 从处理的角度来看,简化流程如下:
- 会话(会话 1(共
n
个))有一个传入连接。 - 会话是保密的。
- 根据分类结果,会话将分配给工作负荷组,例如
Group 4
。 - 工作负荷组对所有请求强制实施其策略,并使用与它关联的资源池,例如,
Pool 2
。 - 资源池提供和限制应用程序所需的资源,例如,
Application 3
。
资源调控器任务
任务说明 | 文章 |
---|---|
查看配置示例 | 资源调控器配置示例和最佳做法 |
启用资源调控器 | 启用资源调控器 |
禁用资源调控器 | 禁用资源调控器 |
创建、更改和删除资源池 | 资源调控器资源池 |
创建、更改、移动和删除工作负荷组 | 资源管理器工作负荷组 |
创建和测试分类器用户定义函数 | 资源调控器分类器函数 |
使用模板配置资源调控器 | 使用模板 配置资源调控器 |
查看资源调控器属性 | 查看和修改资源调控器属性 |
设置空间消耗限制tempdb |
Tempdb 空间资源治理 |