设为首页 收藏本站
查看: 673|回复: 0

[经验分享] 使用sql server 2008 资源调控器限制指定用户查询所使用CPU资源

[复制链接]

尚未签到

发表于 2015-7-2 07:02:32 | 显示全部楼层 |阅读模式
资源调控器是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联机文档):

DSC0000.gif -- 配置资源调控器.
BEGIN TRAN
USE master;
-- 创建并配置一个资源调控器资源池,发生 CPU 争用时,
-- 该资源池将限制分配给资源池中的请求的最大平均 CPU 带宽 10%
CREATE RESOURCE POOL pMAX_CPU_PERCENT_10
   WITH
      (MAX_CPU_PERCENT = 10);
GO
-- 创建并配置一个使用该池的资源调控器工作负荷组。
CREATE WORKLOAD GROUP gMAX_CPU_PERCENT_10
USING pMAX_CPU_PERCENT_10;
GO
-- 创建一个“分类器函数”,它是一个用户定义函数 (UDF),
-- 其返回值供资源调控器用来对会话进行分类,以便将它们路由到适当的工作负荷组
-- 本例是限制用户为:USER_READONLY所使用的cpu资源不超过10%
CREATE FUNCTION dbo.rgclassifier_MAX_CPU() RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @workload_group_name AS sysname
      IF (SUSER_NAME() = 'USER_READONLY')
          SET @workload_group_name = 'gMAX_CPU_PERCENT_10'
    RETURN @workload_group_name
END;
GO

-- 将分类器函数rgclassifier_MAX_CPU注册到资源调控器
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_MAX_CPU);
COMMIT TRAN;
GO

-- 将更改应用于资源调控器内存中配置
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
--包含资源调控器的当前内存中配置状态的行

select * from sys.dm_resource_governor_configuration DSC0001.jpg
--当前资源池状态、资源池的当前配置以及资源池统计信息的相关信息

select * from sys.dm_resource_governor_resource_pools DSC0002.jpg
--工作负荷组统计信息和工作负荷组当前在内存中的配置

select * from sys.dm_resource_governor_workload_groups DSC0003.jpg
这样,资源资源调控器配置完成,下面进行一下测试
创建一个public帐号:

USE master
CREATE LOGIN USER_READONLY WITH PASSWORD ='Nzperfect'
GO

我们用这个USER_READONLY帐号登陆sql server,
DSC0004.jpg

然后测试一下,执行下面的T-sql循环脚本

DECLARE @CNT INT
WHILE 1=1
BEGIN
    SELECT @CNT=COUNT(*) FROM sys.tables
END

打开性能监视器,并添加资源调器资源池cpu使用计数器,如下多图:
DSC0005.jpg
DSC0006.jpg
DSC0007.jpg
DSC0008.jpg
DSC0009.jpg

在以USER_READONLY登陆执行T-sql脚本后,pMAX_CPU_PERCENT_10资源池占用cpu为50%如下图:
DSC00010.jpg

然后,我们以sa帐号登陆sql server ,同时也执行上面的T-sql循环脚本,再看性能监视器计数,如图:
DSC00011.jpg

由上图可以看到,gMAX_CPU_PERCENT_10所占用的cpu立即下降到5%左右,说明我们配置的配置资源调控器已生效。
这时,如果取消sa执行的T-sql循环,则结果如下:
DSC00012.jpg

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

--测试结束,删除测试:



USE master
GO
DROP WORKLOAD GROUP gMAX_CPU_PERCENT_10
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
DROP RESOURCE POOL pMAX_CPU_PERCENT_10
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= null);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
DROP FUNCTION [dbo].[rgclassifier_MAX_CPU]
GO

writed by nzperfect 2009.07.26

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-82388-1-1.html 上篇帖子: SQL Server与ADO.Net数据类型对照 下篇帖子: SQL Server 中如何用一个表的数据更新另一个表中的数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表