第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器
原文:第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器
本系列包含:
1、 使用SQLServer Management Studio 配置资源调控器
3、 监控资源调控器
前言:
在前面的章节,提到过可以通过多种配置数据库服务器的方式来提高性能。如索引、统计信息、hints、物理设计和服务器配置等。
当你完成上面那些配置后,还依旧有少量存储过程、查询运行得很慢时,由于硬件资源限制,可能已经没什么好调整。如一个数据库服务器支撑着多个应用系统,其中一个是报表系统,而报表系统往往都是非常耗资源的。
在2008之前,对于这种问题,很难作出有效的解决方法。从2008开始,引入了一个资源调控器(ResourceGovernor)来协助解决这类问题。资源调控器(下面简称RG),可以管理服务器上CPU和内存资源。不同类型的请求可以被分配到不同的资源。
RG的功能可以分为3个组件:
1、 分类(Classification)
2、 资源池(Resource pool)
3、 工作负荷组(Workload group)
RG的基本功能/体系

分类(Classification):定义一个用户自定义标量函数作为RG的分类函数,每当请求到达时,分类函数就会执行,区分请求的类型,然后放到特定的工作负荷组(Workload Group)中。
工作负载组(WorkloadGroup):一个逻辑单元,包含了一组资源。属于特定的资源池(Resource Pool)SQLServer创建了两个默认的工作负载组,internal和default。
资源池(ResourcePool):包含对请求分配特定工作负载组的资源规则定义,SQLServer同样创建了两个资源池internal和default。
通过SQLServerManagement Studio 配置资源调控器:
在开始之前,先来创建一个现实环境,假设AdventureWorks数据库是生产数据库,且有数十亿的数据。这个库提供多个应用程序使用。一个应用程序是用于web程序,一个是OLTP。另外一个应用程序是报表系统。当查询报表的时候,会影响到web程序,为了解决这个问题,可以借助RG来保存web程序的CPU和内存资源。这里保留web程序获得最少50%的CPU和内存,报表使用25%。
本文将演示使用SQLServer Management Studio(下称SSMS)来实现。
准备工作:
本文将创建两个资源池和工作负载组。用于给web和报表程序之用。独立的用户名分类函数区分请求很有帮助,基于用户名,分类函数将发送请求到特定的工作负载组。
步骤:
1、 打开ssms,确保这个登录有管理员权限,如果不能,那需要有ALTER LOGIN和CONTROL SERVER的权限。
2、 在新建窗口输入,注意本文使用AdventureWorks2012数据库:
USE master
GO CREATE LOGIN [AW_WebAppUser] WITH PASSWORD=N'AW_WebAppUser123' ,DEFAULT_DATABASE=AdventureWorks2012
GO USE AdventureWorks2012
GO CREATE USER [AW_WebAppUser] FOR LOGIN [AW_WebAppUser]
GO
ALTER ROLE [db_owner] ADD MEMBER [AW_WebAppUser]
GO CREATE LOGIN [AW_ReportAppUser] WITH PASSWORD=N'AW_ReportAppUser123',DEFAULT_DATABASE=AdventureWorks2012
GO USE AdventureWorks2012
GO
CREATE USER [AW_ReportAppUser] FOR LOGIN [AW_ReportAppUser]
GO
ALTER ROLE [db_owner] ADD MEMBER [AW_ReportAppUser]
GO
3、 创建分类函数:
USE MASTER
GO CREATE FUNCTION dbo.RGClassifier( )
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @Workload_GroupName SYSNAME IF SUSER_NAME() = 'AW_WebAppUser'
SET @Workload_GroupName = 'rg_WebApp' ELSE
IF SUSER_NAME() = 'AW_ReportAppUser'
SET @Workload_GroupName = 'rg_ReportApp' ELSE
SET @Workload_GroupName = 'default'
RETURN @Workload_GroupName
END
4、 打开ssms,右键资源调控器节点,选择【属性】,就见到如下:

5、 点击启用【启用资源调控器】:

6、 在分类函数名下拉框中,选择dbo.RGClassifier():

7、 在资源池网格中,可以找到两个默认资源池defalut和internal,现在添加一个新的资源池叫做rp_WebApp,并配置为如图,记住总和不能超过100:

8、 在资源池的工作负荷组:rp_WebApp中,创建一个新的工作负荷组rg_WebApp,并配置CPU时间为300:

9、 在资源池网格中,按上述步骤添加rp_ReportApp,并把最小CPU和内存设为25,CPU时间为300:

10、点击确定后,打开资源调控器节点:

分析:
在连接了SQLServer之后,先执行脚本创建用户,用于标识不同应用程序访问数据库。通过账号,分类函数会把登录名的请求发送到对应的资源池和工作负荷组。
在创建类分区函数dbo.RGClassifier(),并在图形界面中调用这个函数。默认情况下资源调控器是禁用的,为了使其工作,需要手动启用。除了图形界面,也可以使用T-SQL语句:ALTER RESOURCEGOVERNOR RECONFIGURE命令来启动。
如果请求不属于新建的两个资源池,会分配到default工作负荷组和default资源池。Internal工作负荷组是SQLServer内部使用的,并且DAC(专用管理员连接)是不受RG分类影响。
最后通过图形界面查看是否建立成功。
扩充信息:
在现实世界中,在实施资源调控器之前,需要对各个应用程序的资源请求做一个趋势分析,可以帮助你更好地分配资源。
在资源池中定义的MIN参数是不共享的,也就是别的请求不能占用这部分,是专用的资源。资源调控器可以有多个资源池。这就是为什么MIN中的百分比总和不能超过100.
另一方面,MAX参数的值是共享的,实际的MAX值会根据MIN的值来调整。
第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器的更多相关文章
- 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器
原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展. ...
- 第十九章 Django的ORM映射机制
第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...
- 20190908 On Java8 第十九章 类型信息
第十九章 类型信息 RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息. Java 主要有两种方式在运行时识别对象和类信息: "传 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如 ...
- Python之路【第十九章】:Django进阶
Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...
- Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12翻译——第十九章. Gradle 守护进程
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十九章. IDEA 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
随机推荐
- 读取数据表中第m条到第n条的数据,SQL语句怎么写?
原文:读取数据表中第m条到第n条的数据,SQL语句怎么写? 对于MySQL或者Oracle来说,如果实现从Table 表中取出第 m 条到第 n 条的记录操作,我们需要TOP函数(不是所有的数据库都支 ...
- 使用windows-SQLyog连接linux-mysql
嘿嘿,最近又清闲了一点,重新安装了mysql去学习. -----博客园-邦邦酱好 系统环境: 1. 主机为windows系统,安装了SQLyog. 2. 主机上还安装了虚拟机,系统为c ...
- VC6.0入门使用
软件下载地址 http://pan.baidu.com/s/1qWuqFAO 新建win console 32 project,然后新建header文件.最后新建source cpp文件.如图所看到的
- 深入理解java虚拟机系列(一):java内存区域与内存溢出异常
文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了開始.假设有什么错误或者遗漏,欢迎指出. 一.概述 先上 ...
- POJ 1515 Street Directions
题意: 一幅无向图 将尽量多的无向边定向成有向边 使得图强连通 无向图保证是连通的且没有重边 思路: 桥必须是双向的 因此先求边双连通分量 并将桥保存在ans中 每一个双连通分量内的边一定都 ...
- Callable 获取线程返回值
allable与 Future 两功能是Java在兴许版本号中为了适应多并法才增加的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它 ...
- 悟道—位IT高管20年的职场心经(读书笔记五)
悟道--一位IT高管20年的职场心经 第五章 搞定老板 "老板就是老板" 这一点,你可能会忘了,他一定不会忘: "老板不会总是老板" 这一点,他可能会忘,你最好 ...
- hdu2457 Trie图+dp
hdu2457 给定n个模式串, 和一个文本串 问如果修改最少的字符串使得文本串不包含模式串, 输出最少的次数,如果不能修改成功,则输出-1 dp[i][j] 表示长度为i的字符串, 到达状态j(Tr ...
- WPF对于xml的简单操作(上)
private void button1_Click(object sender, RoutedEventArgs e) { XmlTextWriter writer = new XmlTextWri ...
- HTTP相关概念
最近观看HTTP权威指南.这本书是一个小更,欲了解更多详细信息,我们不能照顾.但一些基本概念仍然应该清楚.在这里,我整理: HTTP--因特网的多媒体信使 HTTP 使用的是可靠的传输数据协议,因此即 ...