博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器...
阅读量:6847 次
发布时间:2019-06-26

本文共 2955 字,大约阅读时间需要 9 分钟。

原文:

本系列包含:

1、 使用SQLServer Management Studio 配置资源调控器

2、 

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 masterGO CREATE LOGIN [AW_WebAppUser] WITH PASSWORD=N'AW_WebAppUser123' ,DEFAULT_DATABASE=AdventureWorks2012GO USE AdventureWorks2012GO CREATE USER [AW_WebAppUser] FOR LOGIN [AW_WebAppUser]GOALTER ROLE [db_owner] ADD MEMBER [AW_WebAppUser]GO CREATE LOGIN [AW_ReportAppUser] WITH PASSWORD=N'AW_ReportAppUser123',DEFAULT_DATABASE=AdventureWorks2012GO USE AdventureWorks2012GOCREATE USER [AW_ReportAppUser] FOR LOGIN  [AW_ReportAppUser]GOALTER ROLE [db_owner] ADD MEMBER  [AW_ReportAppUser]GO

3、 创建分类函数: 

USE MASTERGO CREATE FUNCTION dbo.RGClassifier( )RETURNS SYSNAME    WITH SCHEMABINDINGAS    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的值来调整。

转载地址:http://lhlul.baihongyu.com/

你可能感兴趣的文章
Win8 Metro(C#)数字图像处理--2.39二值图像投影
查看>>
linux 信号屏蔽
查看>>
2014年第五届蓝桥杯C/C++B组省赛题目解析
查看>>
怎么才知道你在使用的是不是中国电信CN2的线路
查看>>
angular 的 GET 请求 和 POST 请求的 区别 及 实现
查看>>
用户管理及授权管理
查看>>
mysql 配置MHA
查看>>
Windows Developer Day - MSIX and Advanced Installer
查看>>
【tp5】ThinkCMF5框架,配置使其支持不同终端PC/WAP/Wechat能加载不同配置和视图
查看>>
spring security+freemarker获取登陆用户的信息
查看>>
[RxJS] Implement RxJS `concatMap` by Waiting for Inner Subscriptions to Complete
查看>>
ubuntu创建idea桌面快捷方式
查看>>
详解JNDI的lookup资源引用java:/comp/env
查看>>
如何在IntelliJ IDEA中使用Git .ignore插件忽略不必要提交的文件
查看>>
愿你走出半生,归来仍是Java Parser
查看>>
[转]决定人生的三种成本:机会成本,沉没成本,边际成本
查看>>
A Generic Particle IO Library
查看>>
Enterprise Library 系列教程
查看>>
windows下搭建iphone开发环境
查看>>
POJ 3414 Pots (BFS)
查看>>