资源调控器是sql server 2008新增中的功能,可以限制某些用户访问sql server所消耗的cpu、内存资源或是对某个库访问所所消耗的cpu、内存资源,可以在SQL Server 的 Enterprise Edition、Developer Edition 和 Evaluation Edition中使用。

配置资源调控器基本分为以下步骤:
1. 创建并配置一个资源调控器资源池,发生 CPU 争用时,该资源池将限制分配给资源池中的请求的最大平均 CPU 带宽。
2. 创建并配置一个使用该池的资源调控器工作负荷组。
3. 创建一个“分类器函数”,它是一个用户定义函数 (UDF),其返回值供资源调控器用来对会话进行分类,以便将它们路由到适当的工作负荷组。
4. 将分类器函数注册到资源调控器。
5. 将更改应用于资源调控器内存中配置。

本测试示例是限制某查询用户USER_READONLY限制cpu最大为10%.
示例代码(代码参考msdn联机文档):
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源-- 配置资源调控器.
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
BEGIN TRAN
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
USE master;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 创建并配置一个资源调控器资源池,发生 CPU 争用时,
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 该资源池将限制分配给资源池中的请求的最大平均 CPU 带宽 10%
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
CREATE RESOURCE POOL pMAX_CPU_PERCENT_10
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源   
WITH
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
      (MAX_CPU_PERCENT = 10);
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 创建并配置一个使用该池的资源调控器工作负荷组。
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
CREATE WORKLOAD GROUP gMAX_CPU_PERCENT_10
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
USING pMAX_CPU_PERCENT_10;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 创建一个“分类器函数”,它是一个用户定义函数 (UDF),
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 其返回值供资源调控器用来对会话进行分类,以便将它们路由到适当的工作负荷组
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 本例是限制用户为:USER_READONLY所使用的cpu资源不超过10%
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
CREATE FUNCTION dbo.rgclassifier_MAX_CPU() RETURNS sysname
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
WITH SCHEMABINDING
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
AS
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
BEGIN
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源    
DECLARE @workload_group_name AS sysname
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源      
IF (SUSER_NAME() = 'USER_READONLY')
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源          
SET @workload_group_name = 'gMAX_CPU_PERCENT_10'
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源    
RETURN @workload_group_name
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
END;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 将分类器函数rgclassifier_MAX_CPU注册到资源调控器
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_MAX_CPU);
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
COMMIT TRAN;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
-- 将更改应用于资源调控器内存中配置
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
ALTER RESOURCE GOVERNOR RECONFIGURE;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO

--包含资源调控器的当前内存中配置状态的行
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源select * from sys.dm_resource_governor_configuration
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
--当前资源池状态、资源池的当前配置以及资源池统计信息的相关信息
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源select * from sys.dm_resource_governor_resource_pools
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
--工作负荷组统计信息和工作负荷组当前在内存中的配置
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源select * from sys.dm_resource_governor_workload_groups
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

这样,资源资源调控器配置完成,下面进行一下测试
创建一个public帐号:
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源USE master
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
CREATE LOGIN USER_READONLY WITH PASSWORD ='Nzperfect'
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

我们用这个USER_READONLY帐号登陆sql server,
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

然后测试一下,执行下面的T-sql循环脚本
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源DECLARE @CNT INT
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
WHILE 1=1
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
BEGIN
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源    
SELECT @CNT=COUNT(*FROM sys.tables
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
END
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

打开性能监视器,并添加资源调器资源池cpu使用计数器,如下多图:
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

在以USER_READONLY登陆执行T-sql脚本后,pMAX_CPU_PERCENT_10资源池占用cpu为50%如下图:
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

然后,我们以sa帐号登陆sql server ,同时也执行上面的T-sql循环脚本,再看性能监视器计数,如图:
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

由上图可以看到,gMAX_CPU_PERCENT_10所占用的cpu立即下降到5%左右,说明我们配置的配置资源调控器已生效。
这时,如果取消sa执行的T-sql循环,则结果如下:
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

由上面的测试说明,当系统资源够用时,USER_READONLY像正常情况一下,sql server不会限制其使用的cpu资源,但当存在资源竞争时,资源调控器将跟据配置的资源池及组信息自动调节,限制USER_READONLY使用的资源,以确保其它进程拥用更多的资源。

--测试结束,
删除测试:
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
USE master
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
DROP WORKLOAD GROUP gMAX_CPU_PERCENT_10
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
ALTER RESOURCE GOVERNOR RECONFIGURE;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
DROP RESOURCE POOL pMAX_CPU_PERCENT_10
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
ALTER RESOURCE GOVERNOR RECONFIGURE;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= null);
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
ALTER RESOURCE GOVERNOR RECONFIGURE;
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
DROP FUNCTION [dbo].[rgclassifier_MAX_CPU]
使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源
GO

writed by nzperfect 2009.07.26

相关文章:

  • 2021-10-01
  • 2021-09-02
  • 2021-11-22
  • 2022-12-23
  • 2021-08-02
  • 2023-03-06
  • 2021-07-18
猜你喜欢
  • 2021-04-23
  • 2022-12-23
  • 2022-01-21
  • 2021-05-23
  • 2021-08-19
  • 2021-09-04
相关资源
相似解决方案