Sql Server2008 推出了已经有一段时间了,这里给大家介绍一下 Sql Server2008 的一个很不错的新特性,Resource Governor。
信任咱们都遇到过,一个服务器上面运转多个数据库的状况,假如1个数据库占用资源过多,很或许直接导致别的一个数据库无法处理,直到超时的状况。曩昔这种状况根本无法处理(当然不扫除运用三方程序处理的办法)。嘿嘿,在新的Sql Server 2008 中,就能够***的处理这个问题了。答案便是Resource Governor。
Resource Governor能够经过创立资源池(Resource Pool)的办法,对不同资源池别离分配服务器资源(CPU,内存),这儿设置的是,资源池最繁忙时期的分配值。简略的说,现在我有两个数据库,DataBaseA和DataBaseB,那么咱们能够创立两个资源池PoolA和PoolB,给PoolA分配10%的CPU和内存,PoolB分配90%的CPU和内存。那么当DataBaseA和DataBaseB都繁忙的时分,体系会别离分配相应的资源给他们,让他们都能够完结自己的作业(当然,功用或许有所下降,究竟只运用10%的资源),然后避免了高并发性时,资源独占的状况。很好吧,下面咱们就经过一个实例来给咱们演示一下。
1. 首要能够检查一下当时资源池的装备状况
USE master; |
假如如上图所示,那么阐明现在没有创立任何资源池。(创立资源池的时分需求绑定一个classifier的函数,假如绑定了,会显现函数的ObjectID)
2. 创立2个资源池MarketingPool和DevelopmentPool,
CREATE RESOURCE POOL MarketingPool |
MarketingPool分配了10%CPU资源,DevelopmentPool分配了90%CPU资源。(当然你也能够加上内存的分配,不过个人感觉一般CPU比较重要,内存这东西不好说)
3. 能够先看一下当时Resource Governor的装备状况
SELECT * FROM sys.dm_resource_governor_resource_pools; |
你会发现,如上所示成果,只要两个资源池,而且不是咱们创立的。
internal和default资源池是体系默许的资源池,假如没有手动设置Resource Governor的话,创立的数据库会被默许放到default资源池傍边。(后边你还会看到对应的 WORKLOAD GROUP)
为什么咱们创立的资源池没有看到呢?其实是咱们的装备还没有设定上去,Sql Server08的设置修改后,需求手动 RECONFIGURE 来重置装备信息。
4. RECONFIGURE RESOURCE GOVERNOR 来让咱们新建的资源池收效。
ALTER RESOURCE GOVERNOR RECONFIGURE; |
来看一下现在的装备信息。
你会发现新创立的MarketingPool和DevelopmentPool现已被增加了进去,而且max_cpu_percent为相应的10和90。
只要Resource Pool 是没用作用的,由于Pool下面还有下级单位,叫做 WORKLOAD GROUP , 所以接下去咱们需求创立Group。
5. 创立 WORKLOAD GROUP
CREATE WORKLOAD GROUP MarketingGroup |
别离给两个Pool创立对应的 WorkLoad Group 。而且运用 Using 关键字绑定Group到对应的Pool。
6. 检查WorkLoad Group 的装备信息
SELECT * FROM sys.dm_resource_governor_workload_groups; |
会发现,和Pool中的状况相同,只要两个Group。(便是体系默许的Group,别离与默许的Pool对应)
同样是由于没有ReConfigure形成的。
7. 更新装备信息
ALTER RESOURCE GOVERNOR RECONFIGURE; |
接着在检查Group信息。
新的Group现已被增加进去了。
8. 创立两个数据库,用来做测验
IF DB_ID ('MarketingDB') IS NULL |
9. 创立classifier function
IF OBJECT_ID ('dbo.MyClassifier') IS NOT NULL |
这儿,SqlServer2008关于 Resource Governor 的规划办法,很相似署理。Resource Governor 经过一个办法来绑定数据库目标到WorkLoad Group ,这个办法需求外部给出界说,而且手动绑定到Resource Governor 上面,界说办法能够参照上面代码。别离将两个测验用数据库绑定到各自的Group中,其他的数据库绑定到Default上面。
10. 绑定Classifier Function 到Resource Governor上面。
ALTER RESOURCE GOVERNOR |
11. 更新Resource Governor 装备信息
ALTER RESOURCE GOVERNOR RECONFIGURE; |
12. 检查Resource Governor装备信息,承认设置
CREATE RESOURCE POOL MarketingPool |
假如如下图所示,阐明装备成功。
到这儿,资源池的创立完结,然后运用Server2003的Performance来检查CPU的运用状况
1. 在办理工具中发动Performance
2. 点击Action菜单中的New WindowForm Here
3. 点击加号增加监督
4. 选中对应SQL实例的Resource Governor ,并选定两个资源池
5. 点击Add增加2个资源池衔接
现在由于没有操作,所以占用资源为0
接下去将运用两个循环脚本,不断更新数据库,来测验作用
1. 创立RunQueries.SQL脚本,代码如下
CREATE RESOURCE POOL MarketingPool |
不断更新Index以耗费资源。
2. 创立RunQueries2.sql脚本,代码如下
CREATE RESOURCE POOL MarketingPool |
与***个脚本相同,由于测验发现,一个脚本耗费的资源不足以体现出9:1作用,所以一起运转2个脚本。
3. 运用sqlcmd来运转脚本(由于是死循环)
a) cd 脚本地点目录
b) sqlcmd -S .\SQLDEV01 -d MarketingDB -iRunQueries.sql
经过sqlcmd运转脚本 –S 指定运用的SQL实例 -d 指定运用数据库 -i 指定运转脚本
别离运用4个sqlcmd运转4分脚本,直接给出sqlcmd指令(留意替换SQL实例称号)
CREATE RESOURCE POOL MarketingPool |
4. 调查Performance中曲线的改变,如下所示则操作成功
能够看到,CPU运用趋于 1:9 Resource Governor 成功运用了
补白:
Resource Governor 能够主动判别资源分配份额,假如没有竞赛资源池的话,那么会分配100%资源运用,假如竞赛剧烈,会依照份额分配。然后使得各个资源池中的目标都能够运用必定的服务器资源完结自己的作业,然后能够使得咱们猜测体系的最差状况,增强对数据库的办理性。
【修改引荐】
- 用并行查询让SQL Server加快运转
- 有用运用SQL Server的主动办理功用
- 将SQL 2000日志迁移到SQL Server 2008