You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制特定用户的处理器资源利用率?含累计负载限制

单个用户处理器资源限制的实现方案

1. 统一限制用户所有单条查询的并行度

OPTION (MAXDOP 4)是单查询级别的提示,无法直接批量应用到某个用户的所有查询。但可以通过以下两种方式实现全局管控:

方式一:资源调控器(推荐,精准管控)

利用SQL Server的资源调控器,为目标用户创建专属的工作负载组和资源池,强制所有该用户的查询使用指定MAXDOP:

-- 1. 创建专属资源池(后续用于限制累计CPU)
CREATE RESOURCE POOL UserCPU_Pool
WITH (MAX_CPU_PERCENT = 50); -- 先预留CPU百分比,用于后续累计限制
GO

-- 2. 创建工作负载组,设置单查询MAXDOP
CREATE WORKLOAD_GROUP TargetUser_Queries
WITH (MAX_DOP = 4) -- 强制该用户所有单查询最大并行度为4
USING UserCPU_Pool;
GO

-- 3. 创建分类函数,将目标用户映射到上述工作负载组
CREATE FUNCTION dbo.ClassifyTargetUser()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    RETURN CASE WHEN SUSER_SNAME() = 'YourTargetUserName' THEN 'TargetUser_Queries' ELSE 'default' END;
END
GO

-- 4. 启用分类函数并生效
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.ClassifyTargetUser);
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

方式二:数据库级MAXDOP(仅适用于用户仅访问单一数据库的场景)

如果目标用户只操作特定数据库,可以设置该数据库的默认MAXDOP,但此设置会影响所有访问该库的用户:

ALTER DATABASE YourDatabaseName
SET MAXDOP 4;
GO

2. 限制用户多查询的累计CPU负载

要控制用户同时运行10条独立查询的累计CPU占用,依然依赖资源调控器的资源池配置:

  • 在上述创建的UserCPU_Pool中,MAX_CPU_PERCENT = 50表示该用户所有查询累计最多占用服务器50%的CPU资源(假设服务器为16核,即最多使用8核)。
  • 若需要更精细的控制,还可以结合资源池的MIN_CPU_PERCENT(保障最低CPU)、工作负载组的REQUEST_MAX_CPU_TIME_SEC(单查询最长CPU运行时间)等参数。

注意事项

  • 如果用户手动在查询中指定OPTION (MAXDOP),该查询级别的设置会覆盖资源调控器的工作负载组配置。
  • 资源调控器仅在SQL Server Enterprise版本中支持;若使用标准版,可尝试通过登录触发器临时修改全局max degree of parallelism,但该方案稳定性较差,会影响所有用户。

内容的提问来源于stack exchange,提问作者Krzysztof Krysztofczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:07:21