在 MSSQL 上创建和控制资源池
Source: Dev.to

引言
是时候掌控服务器的资源了。
在你的 MS SQL 实例中,并非所有工作负载都应被同等对待。
一次在 SQL Server Management Studio (SSMS) 中执行的重查询就可能轻易消耗 CPU 和内存,从而影响生产工作负载。
Resource Governor 是 SQL Server 中一个使用率不高却 功能强大 的特性。借助一个简单的函数和资源池,你可以显著提升多用户环境的稳定性和可预测性。
什么是 Resource Governor?
Resource Governor 是 SQL Server 的一项功能,允许你控制不同工作负载可以消耗的 CPU 和内存量。这在生产安全或 DBA 控制访问时尤为有用。
完成设置后,任何从 Microsoft SQL Server Management Studio 执行的查询都会被分配到受限资源池,而所有其他连接则保持在默认池中。你可以通过修改分类函数来自定义资源池,以满足具体需求。
典型场景包括限制以下对象的资源:
- 特定的 SQL 用户
- 报表或 BI 工具
- ETL 作业
- 临时用户
- 第三方应用程序
- 夜间或后台工作负载
实施步骤
1. 启用 Resource Governor
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
2. 创建分类函数
该函数决定会话应使用哪个工作负载组。
CREATE FUNCTION [dbo].[ResourceGroup_Users]
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @WorkloadGroup SYSNAME;
DECLARE @ProgramName SYSNAME;
SET @ProgramName = CONVERT(SYSNAME, PROGRAM_NAME());
IF @ProgramName LIKE 'Microsoft SQL Server Management Studio%'
BEGIN
SET @WorkloadGroup = 'LimitedResourceGroup';
END
ELSE
BEGIN
SET @WorkloadGroup = 'default';
END
RETURN @WorkloadGroup;
END
GO
可选: 若要限制特定 SQL 用户,可添加额外条件,例如:
IF SUSER_NAME() = 'testuser' THEN ...
3. 创建资源池
此池将 SSMS 查询的 CPU 与内存限制在不超过 30 % 的范围内。
CREATE RESOURCE POOL [LimitedResourcePool]
WITH
(
MIN_CPU_PERCENT = 0,
MAX_CPU_PERCENT = 30,
MIN_MEMORY_PERCENT = 0,
MAX_MEMORY_PERCENT = 30
);
GO
4. 创建工作负载组
将工作负载组关联到受限资源池。
CREATE WORKLOAD GROUP [LimitedResourceGroup]
USING [LimitedResourcePool];
GO
5. 启用分类函数
告诉 Resource Governor 使用该函数并重新配置。
ALTER RESOURCE GOVERNOR
WITH (CLASSIFIER_FUNCTION = [dbo].[ResourceGroup_Users]);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
监控
运行以下查询即可查看各会话使用的资源池:
SELECT
s.session_id,
s.login_name,
rg.name AS resource_pool_name
FROM sys.dm_exec_sessions AS s
JOIN sys.dm_resource_governor_workload_groups AS wg
ON s.group_id = wg.group_id
JOIN sys.dm_resource_governor_resource_pools AS rg
ON wg.pool_id = rg.pool_id
WHERE s.is_user_process = 1;
注意事项
- 更改仅对 新 会话生效。若要让更改立即生效,请重启 SQL 服务或终止现有会话。
- Resource Governor 在 SQL Server Standard Edition(自 SQL Server 2025 起) 可用;在更早的版本中,它仅是 Enterprise 版的功能。
现在就去使用这些资源池吧。希望本指南能帮助你保持 SQL Server 的平稳运行!