在 MSSQL 上创建和控制资源池

发布: (2026年1月8日 GMT+8 05:52)
4 min read
原文: Dev.to

Source: Dev.to

MSSQL 资源池的构建与控制封面图

引言

是时候掌控服务器的资源了。

在你的 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 的平稳运行!

Back to Blog

相关文章

阅读更多 »