SQL SERVER resource governor 来控制对于备份任务的资源消耗

来源:互联网 发布:淘宝全球购申请 编辑:程序博客网 时间:2024/03/29 09:34

在日常的备份操作中,很有可能的是你的服务器在进行运行,需要大量的CPU以及内存,而这时你的备份任务却悄然在schedule,

并开始运行。

 

那这里我们要做的是利用SQL SERVER 2008的新功能 resource governor 来对这个情况进行控制,以达到限制它对备份认为的资源消耗。

 

------------------------------------------------------------------------------------------------------------------------------------------------

 

CREATE RESOURCE POOL [backup] WITH(min_cpu_percent=0,
  max_cpu_percent=30,
  min_memory_percent=10,
  max_memory_percent=40)


GO

CREATE WORKLOAD GROUP [backup] WITH(group_max_requests=0,
  importance=Low,
  request_max_cpu_time_sec=0,
  request_max_memory_grant_percent=25,
  request_memory_grant_timeout_sec=0,
  max_dop=0) USING [backup]

GO

ALTER RESOURCE GOVERNOR RECONFIGURE;

GO

 

 

这里我们建立了一个资源池,名字叫BACKUP,并分配CPU的最大资源为30%,内存的最大资源在10-40%之间,并在这里建立了一个资源组,他的重要等级是低的,并建立和资源池的关联。

 

到了这里我们虽然建立了资源池以及资源组,但是我们却还么有和我们的备份任务有任何的关系,这里需要一个触发备份就是用这个资源的函数。那下面我们就做这个函数。

 

 

use master

 

go

 

create function backupcontrol (0

 

RETURNS sysname WITH SCHEMABINDING

as

begin

declare @groupname sysname

if (suser_name()='backup')

set @groupname='backup'

return @groupname

end

 

这里解释,我们来判断是否是备份的任务是通过执行备份任务的用户名来进行的,只要是使用BACKUP这个用户来进行的备份工作,则自动进入我们的资源控制范围,也就是说我们的触发SQL SERVER 去管理备份资源的触点是,backup这个用户,所以非BACKUP用户进行的备份操作不在我们的控制范围,当然我们也可以通过应用的类型来做。

 

这里要给定的有

1 suser_name  也就是我们的执行备份认为的用户名

2 @GROUPNAME 这里赋值一定要使用我们已经做好的组名

 

最后一步就是要把我们的这个函数和我们的resource governor进行连接

 

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = [dbo].[backupcontrol]);

GO

ALTER RESOURCE GOVERNOR RECONFIGURE;

GO

 

好了我们的任务已经完成了