SQL Server Resource Governor Webcast – Demo Scripts

Hi Friends,

Last week I took a webcast “Tap is the only Solution Ver.2 (SQL Server Resource Governor). The webcast was very well received and there were a lot of questions regarding the Demo and the scripts. So in this blog post I’ll provide all the scripts to implement, test, tweak & remove Resource Governor. You can also use these scripts to do Proof of Concept (POC) on Resource Governor.

Hope this will help you.

Happy Learning\Testing – DO leave a comment to let us know how we are doing.

 

Implement\ configure Resource Governor

Create database simple
go
---Login creation for all users, I disabled strong password checking for demo
--purposes only but this is against best practices
	 
USE [master]
GO
CREATE LOGIN [Sales_app] WITH PASSWORD=N'sales_app', DEFAULT_DATABASE=[simple], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
	 
CREATE LOGIN [Reporting_app] WITH PASSWORD=N'reporting_app', DEFAULT_DATABASE=[simple], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
	 
CREATE LOGIN [Fin_App] WITH PASSWORD=N'fin_app', DEFAULT_DATABASE=[simple],CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
Go
	 
use simple
Go
CREATE USER [Sales_app] FOR LOGIN [Sales_app]
CREATE USER [Reporting_app] FOR LOGIN [Reporting_app]
CREATE USER [Fin_App] FOR LOGIN [Fin_App]
GO
	 
--limiting resources to test Resource Governor because I am using a laptop with 8 proc and 8GB ram
--which will be too much and complex to do POC
	 
sp_configure 'show ',1
go
reconfigure
go
sp_configure 'min server', 2048;
go
sp_configure 'max server', 2048;
RECONFIGURE
GO
	 
-- create user pools
-- note that we are using all default parameters
CREATE RESOURCE POOL Pool_Sales_fin_app
CREATE RESOURCE POOL Pool_reporting
	 
-- create user groups also note that all groups created with default parameters only pointing to the
--corresponding pools (and not 'default' pool)
CREATE WORKLOAD GROUP Sales_Group
USING Pool_Sales_fin_app
	 
CREATE WORKLOAD GROUP Reporting_Group
USING Pool_reporting
	 
CREATE WORKLOAD GROUP Fin_Group
USING Pool_Sales_fin_app
GO
 
-- now create the classifier function
Use master
go
IF OBJECT_ID('DBO.CLASSIFIER_1','FN') IS NOT NULL
DROP FUNCTION DBO.CLASSIFIER_1
GO
 
-- note that this is just a regular (UDF) User Defined Function
CREATE FUNCTION DBO.CLASSIFIER_1()
RETURNS SYSNAME WITH SCHEMABINDING
BEGIN
                DECLARE @val varchar(32)
                SET @val = 'default';
                if 'Sales_app' = SUSER_SNAME()
                                SET @val = 'Sales_Group';
                else if 'Reporting_app' = SUSER_SNAME()
                                SET @val = 'Reporting_Group';
                else if 'Fin_App' = SUSER_SNAME()
                                SET @val = 'Fin_Group';
                return @val;
END
GO
  
-- make function known to the Resource Governor
ALTER RESOURCE GOVERNOR
WITH (CLASSIFIER_FUNCTION = DBO.CLASSIFIER_1)
GO
  
--Check if Reconfigure is pending for any setting of Resource Governor
SELECT * FROM sys.dm_resource_governor_configuration
 
-- make the changes effective
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

Workload – by different Sessions

   
declare @i int
declare @s varchar(100)
set @i = 10
while @i > 0
begin
                select @s = @@version;
end

Using Cap_CPU_Percent Parameter – New to SQL 2012 to configure Hard Cap on CPU

 CPU_CAP_PERCENT & AFFINITY SCHEDULER settings are available only through Scripts as of now- Planned to come in GUI from SP1

ALTER RESOURCE POOL [Pool_Sales_fin_app]
WITH (CAP_CPU_PERCENT=30)
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
  
ALTER RESOURCE POOL [Pool_Reporting]
WITH (CAP_CPU_PERCENT=40)
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

Using Affinity Parameter to dedicate a scheduler to a single pool

ALTER RESOURCE POOL Pool_Sales_fin_app
WITH (AFFINITY SCHEDULER = (0))
GO
	 
ALTER RESOURCE POOL Pool_reporting
WITH (AFFINITY SCHEDULER = (1))
GO
	 
ALTER RESOURCE GOVERNOR RECONFIGURE
Go

Internal Tables\DMVs for Resource Governor

–Metadata Tables

SELECT * FROM sys.resource_governor_workload_groups
SELECT * FROM sys.resource_governor_resource_pools
SELECT * FROM sys.resource_governor_configuration

 DMV’s

SELECT * FROM sys.dm_resource_governor_workload_groups

SELECT * FROM sys.dm_resource_governor_resource_pools

SELECT * FROM sys.dm_resource_governor_configuration
 
Select * from sys.dm_resource_governor_resource_pool_affinity --- – New DMV in SQL 2012 for Affinity setting & Schedulers mask

Script to check which scheduler is being used by which Resource Group

select
      r.session_id,
      CONVERT(NCHAR(20), wg.name) as group_name,
      t.scheduler_id,
      r.status
from sys.dm_exec_requests r
      join sys.dm_os_tasks t on r.task_address = t.task_address
      join sys.dm_resource_governor_workload_groups wg on r.group_id = wg.group_id
where
      r.session_id > 50

Clean-Up

---Clean Up Script
ALTER RESOURCE GOVERNOR disable;
 
--Drop Logins and associated Users
USE [simple]
GO
DROP USER [Sales_app]
DROP USER [Reporting_app]
DROP USER [Fin_App]
GO
 
USE [master]
GO
DROP LOGIN [Sales_app]
DROP LOGIN [Reporting_app]
DROP LOGIN [Fin_App]
GO
 
--drop workload
USE [master]
GO
DROP WORKLOAD GROUP [Reporting_Group]
DROP WORKLOAD GROUP [Sales_Group]
DROP WORKLOAD GROUP [Fin_Group]
go
 
--drop pools
USE [master]
GO
DROP RESOURCE POOL [Pool_Sales_fin_app]
DROP RESOURCE POOL [Pool_Reporting]
GO
 
---drop classifier function
ALTER RESOURCE GOVERNOR
WITH (CLASSIFIER_FUNCTION = Null)
GO
DROP FUNCTION DBO.CLASSIFIER_1

Reference: Boris Baryshnikov’s blog post & Whitepapers for Resource Governor 2008 & 2012.

 

Regards

Sarabpreet Anand

Like us on FaceBook Follow us on Twitter | Join the fastest growing SQL Server group on FaceBook

Follow me on Twitter  |  Follow me on FaceBook

   

2 Comments on “SQL Server Resource Governor Webcast – Demo Scripts”

  1. hi ,

    ALTER RESOURCE POOL [Pool_Reporting]
    WITH (CAP_CPU_PERCENT=20)
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    GO

    it showing “Msg 102, Level 15, State 1, Line 4

    Incorrect syntax near ‘CAP_CPU_PERCENT’. ”
    Does it suppourt for mssql2008(10.0.1600).

    if i want used for mssl 2008 then what changes have do ?

  2. Hi Dinesh,

    This is the version 2 webcast which was done for SQL Server 2012 & it also includes a few switches which are not supported on SQL 2008.

    If you want to test\implement RG in SQL Server 2008, just ignore the settings\switches below.

    CPU_CAP_PERCENT & AFFINITY SCHEDULER Parameter – New to SQL 2012

    Do let us know about your experience.

    Happy Learning.

    Sarab.

Leave a Reply

Your email address will not be published.