Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198241
  • 博文数量: 264
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 2740
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-03 13:25
文章分类

全部博文(264)

文章存档

2011年(1)

2009年(263)

我的朋友

分类: 数据库开发技术

2009-06-23 16:56:11

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;
GO
SELECT * FROM sys.dm_resource_governor_configuration;
GO

SQL Server2008 新特性 Resource Governor

如果如上图所示,那么说明目前没有创建任何资源池。(创建资源池的时候需要绑定一个classifier的函数,如果绑定了,会显示函数的ObjectID)

2. 创建2个资源池MarketingPool和DevelopmentPool,

CREATE RESOURCE POOL MarketingPool
WITH (MAX_CPU_PERCENT = 10);
GO
CREATE RESOURCE POOL DevelopmentPool
WITH (MAX_CPU_PERCENT = 90);
GO

MarketingPool分配了10%CPU资源,DevelopmentPool分配了90%CPU资源。(当然你也可以加上内存的分配,不过个人感觉一般CPU比较重要,内存这东西不好说)

3. 可以先看一下当前Resource Governor的配置情况

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO

SQL Server2008 新特性 Resource Governor

SQL Server2008 新特性 Resource Governor

你会发现,如上所示结果,只有两个资源池,并且不是我们创建的。

internal和default资源池是系统默认的资源池,如果没有手动设置Resource Governor的话,创建的数据库会被默认放到default资源池当中。(后面你还会看到对应的 WORKLOAD GROUP)

为什么我们创建的资源池没有看到呢?其实是我们的配置还没有设定上去,sql server08的设置修改后,需要手动 RECONFIGURE 来重置配置信息。

4. RECONFIGURE RESOURCE GOVERNOR 来让我们新建的资源池生效。

ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

加下去执行

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO

来看一下现在的配置信息。

SQL Server2008 新特性 Resource Governor

SQL Server2008 新特性 Resource Governor

你会发现新创建的MarketingPool和DevelopmentPool已经被添加了进去,并且max_cpu_percent为相应的10和90。

只有Resource Pool 是没用效果的,因为Pool下面还有下级单位,叫做 WORKLOAD GROUP , 所以接下去我们需要创建Group。

5. 创建 WORKLOAD GROUP

CREATE WORKLOAD GROUP MarketingGroup
USING MarketingPool;
GO
CREATE WORKLOAD GROUP DevelopmentGroup
USING DevelopmentPool;
GO

分别给两个Pool创建对应的 WorkLoad Group 。并且使用 Using 关键字绑定Group到对应的Pool。

6. 查看WorkLoad Group 的配置信息

SELECT * FROM sys.dm_resource_governor_workload_groups;
GO

会发现,和Pool中的情况相同,只有两个Group。(就是系统默认的Group,分别与默认的Pool对应)

SQL Server2008 新特性 Resource Governor

同样是由于没有ReConfigure造成的。

7. 更新配置信息

ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

接着在查看Group信息。

SQL Server2008 新特性 Resource Governor

新的Group已经被添加进去了。

8. 创建两个数据库,用来做测试

IF DB_ID ('MarketingDB') IS NULL
    CREATE DATABASE MarketingDB;
GO
IF DB_ID ('DevelopmentDB') IS NULL
    CREATE DATABASE DevelopmentDB;
GO

9. 创建classifier function

IF OBJECT_ID ('dbo.MyClassifier') IS NOT NULL
    DROP FUNCTION dbo.MyClassifier;
GO
CREATE FUNCTION dbo.MyClassifier ()
RETURNS SYSNAME WITH SCHEMABINDING
AS
BEGIN
    DECLARE @GroupName SYSNAME;
    IF ORIGINAL_DB_NAME () = 'MarketingDB'
        SET @GroupName = 'MarketingGroup';
    ELSE IF  ORIGINAL_DB_NAME () = 'DevelopmentDB'
        SET @GroupName = 'DevelopmentGroup';
    ELSE SET @GroupName = 'Default';
    RETURN @GroupName;
END;
GO

这里,Sqlserver2008对于 Resource Governor 的设计方式,很类似代理。Resource Governor 通过一个方法来绑定数据库对象到WorkLoad Group ,这个方法需要外部给出定义,并且手动绑定到Resource Governor 上面,定义方式可以参照上面代码。分别将两个测试用数据库绑定到各自的Group中,其他的数据库绑定到Default上面。

10. 绑定Classifier Function 到Resource Governor上面。

ALTER RESOURCE GOVERNOR
    WITH (CLASSIFIER_FUNCTION = dbo.MyClassifier);
GO

11. 更新Resource Governor 配置信息

ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

12. 查看Resource Governor配置信息,确认设置

SELECT * FROM sys.dm_resource_governor_configuration;
GO

如果如下图所示,说明配置成功。

SQL Server2008 新特性 Resource Governor

到这里,资源池的创建完成,然后使用Server2003的Performance来查看CPU的使用情况

1. 在管理工具中启动Performance

SQL Server2008 新特性 Resource Governor

SQL Server2008 新特性 Resource Governor

2. 点击Action菜单中的New WindowForm Here

SQL Server2008 新特性 Resource Governor

SQL Server2008 新特性 Resource Governor

3. 点击加号添加监视

SQL Server2008 新特性 Resource Governor

4. 选中对应SQL实例的Resource Governor ,并选定两个资源池

SQL Server2008 新特性 Resource Governor

5. 点击Add添加2个资源池连接

SQL Server2008 新特性 Resource Governor

目前由于没有操作,所以占用资源为0

阅读(600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~