用SQL SERVER 2008的新功能 resource governor
用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
好了我们的任务已经完成了
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuhuayang/archive/2011/05/16/6423655.aspx
[解决办法]