天天看點

sql server 2008新特性:資源調控器

資源調控器是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聯機文檔):

-- 配置資源調控器.

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;

-- 建立一個“分類器函數”,它是一個使用者定義函數 (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;

sql server 2008新特性:資源調控器

-- 将分類器函數rgclassifier_MAX_CPU注冊到資源調控器

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_MAX_CPU);

COMMIT TRAN;

-- 将更改應用于資源調控器記憶體中配置ALTER RESOURCE GOVERNOR RECONFIGURE;

--包含資源調控器的目前記憶體中配置狀态的行

select * from sys.dm_resource_governor_configuration

sql server 2008新特性:資源調控器

--目前資源池狀态、資源池的目前配置以及資源池統計資訊的相關資訊

select * from sys.dm_resource_governor_resource_pools

sql server 2008新特性:資源調控器

--工作負荷組統計資訊和工作負荷組目前在記憶體中的配置

select * from sys.dm_resource_governor_workload_groups

sql server 2008新特性:資源調控器

這樣,資源資源調控器配置完成,下面進行一下測試

建立一個public帳号:

USE master

CREATE LOGIN USER_READONLY WITH PASSWORD ='Nzperfect'

我們用這個USER_READONLY帳号登陸sql server,

sql server 2008新特性:資源調控器

然後測試一下,執行下面的T-sql循環腳本

DECLARE @CNT INT

WHILE 1=1

    SELECT @CNT=COUNT(*) FROM sys.tables

END

sql server 2008新特性:資源調控器

打開性能螢幕,并添加資源調器資源池cpu使用計數器,如下多圖:

sql server 2008新特性:資源調控器
sql server 2008新特性:資源調控器
sql server 2008新特性:資源調控器
sql server 2008新特性:資源調控器
sql server 2008新特性:資源調控器

在以USER_READONLY登陸執行T-sql腳本後,pMAX_CPU_PERCENT_10資源池占用cpu為50%如下圖:

sql server 2008新特性:資源調控器

然後,我們以sa帳号登陸sql server ,同時也執行上面的T-sql循環腳本,再看性能螢幕計數,如圖:

sql server 2008新特性:資源調控器

由上圖可以看到,gMAX_CPU_PERCENT_10所占用的cpu立即下降到5%左右,說明我們配置的配置資源調控器已生效。

這時,如果取消sa執行的T-sql循環,則結果如下:

sql server 2008新特性:資源調控器

由上面的測試說明,當系統資源夠用時,USER_READONLY像正常情況一下,sql server不會限制其使用的cpu資源,但當存在資源競争時,資源調控器将跟據配置的資源池及組資訊自動調節,限制USER_READONLY使用的資源,以確定其它程序擁用更多的資源。

--測試結束,删除測試

DROP WORKLOAD GROUP gMAX_CPU_PERCENT_10

ALTER RESOURCE GOVERNOR RECONFIGURE;

DROP RESOURCE POOL pMAX_CPU_PERCENT_10

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= null);

DROP FUNCTION [dbo].[rgclassifier_MAX_CPU]