Gå direkte til indhold

SQL Server – Resource Governor del 2 - Uppsättning

lästid I minuter: 1

Resource Governor är en funktion i SQL Server som kan hantera hur mycket systemresurser olika laster får lov att använda och hur. Det går att begränsa/övervaka/prioritera den mängd CPU och minne som en specifik last får använda på en instans.

I del 1 av miniserien om Resource Governorn beskrev jag lite kortfattat vad Resource Governorn kan användas till och principen bakom den. Här tänkte jag förklara hur man kan använda TSQL för att sätta upp de ingående komponenterna. Vi fortsätter med exemplet från del 1 där ekonomiavdelningen vill köra rapporter av produktförsäljning mot en webshop som normalt sätt har övervägande OLTP last. För att det inte ska bli några resurskonflikter vill man begränsa rapportdelens resursutnyttjande. Övriga anrop ska använda default poolen.

I det här fallet har rapportverktyget och webshopen olika SQL login så man enkelt kan avgöra vilken typ av anslutning det är, reportUser används av rapportverktyget.

Steg 1: Skapa Resource Poolen för rapportdelen
Vi tilldelar bara en liten del av resurserna till rapportkörningarna för att inte de mer kritiska delarna ska påverkas.

CREATE RESOURCE POOL ReportPool WITH
( MIN_CPU_PERCENT=0,
MAX_CPU_PERCENT=30,
MIN_MEMORY_PERCENT=0,
MAX_MEMORY_PERCENT=30)
GO

Steg 2: Skapa Workload Group
Skapa en Workload som kopplas mot Resource poolen som vi nyss skapade.

CREATE WORKLOAD GROUP ReportGroup 
USING ReportPool ;
GO

Steg 3: Skapa en user defined function som definierar vilken Workload group som en last ska använda.
I detta exempel använder vi SUSER_NAME() för att bestämma vilken Workgroup som ska användas.

CREATE FUNCTION dbo. Classifier() 
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @workloadGroup AS SYSNAME
IF(SUSER_NAME() = 'reportUser')
SET @WorkloadGroup = 'ReportGroup'
ELSE
SET @WorkloadGroup = 'default'
RETURN @WorkloadGroup
END
GO

Steg 4: I det fjärde och sista steget startar vi Resource Governor med Classifier funktionen vi skapade i steg 3.

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

Steg 5: Om du testat stegen ovan själv och vill ta bort exemplet kan du använda skriptet nedan. Det kommer att avaktivera Resource Governorn och ta bort alla de objekt vi skapat hitintills.

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL) 
GO
ALTER RESOURCE GOVERNOR DISABLE
GO
DROP FUNCTION dbo.Classifier
GO
DROP WORKLOAD GROUP ReportGroup
GO
DROP RESOURCE POOL ReportPool
GO
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

Hoppas att det har gett dig lite förståelse för hur man sätter upp Resource Governorn och lite idéer till vad man kan använda den till.

/Björn

Ska vi träffas och prata om vad vi konkret kan göra för dig?