Resource Governor patří mezi SQL Server enterprise features, které nejsou dostupné v žádné jiné edici. Pokud vás zajímají různá omezení napříč edicemi, tak jsem to shrnul v článku Instalace SQL Server 2016 – Plánování, HW a SW požadavky. Pokud máte problémy s výkonem a vyzkoušeli jste všemožné možnosti optimalizace a scale out, tak se nabízí ještě tato možnost jak omezit fyzické zdroje. Tato funkce umožňuje nastavit limity využití CPU a RAM zdrojů v rámci instance SQL Server. Tato funkce je efektivní pouze pro operace nad databázemi (database engine) a není tedy možné řídit prostředky pro Analysis, Integration nebo Reporting services. Zdroje lze omezit pomocí funkce prakticky na cokoliv – usery, časově (den/noc) nebo jinak.
Zapnutí Resource Governor v SQL Server
Tuto funkci můžeme zapnout dvěma způsoby. Přes vizuální rozhraní nebo T-SQL script: ALTER RESOURCE GOVERNOR RECONFIGURE;
Nastavení Resource Governor
Konfigurace tohoto nástroje je trošku náročnější.
Resource Pools
Resource pools se dají popsat jako takové kontejnery fyzických zdrojů serveru. V každém takovém poolu můžou být jedna nebo více Workload groups. Funguje to tak, že když je odstartována nějaká session (třeba SQL Script), tak Resource Governor klasifikuje tuto session do workload groupy a té je přiřazen Resource pool. Pomocí zdrojů daného resource poolu je pak session obsloužena. V rámci každého resource poolu definujeme MAX a MIN hodnoty pro CPU a memory.
Na obrázku níže jsem vytvořil Resource Pool jménem “Test” a přiřadil mu maximálně 50 % CPU a 50 % Memory
Workload groups
Zatímco Resource pools slouží jako kontejnery pro fyzické zdroje, wokrloads groups jsou kontejnery pro sessions. Tyto sessions se do workload groups dostávají pomocí klasifikační funkce viz dále. Pokud není funkcí definována žádná workload groupa, tak SQL Server přidělí prostředky definované v default poolu.
Na obrázku níže jsem založil Workload group jménem “Bad Guy test”
Vytvoření funkce, která vrací Workload Group
Dalším krokem je vytvoření user defined funkce, která jako výsledek bude vracet bázev Workload Groupy v závislosti na tom, jestli dotaz pustil Bad Guy.
CREATE FUNCTION dbo.udf_Resource_Governor_Classification()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @Workload_Group AS SYSNAME
IF(SUSER_NAME() = 'Bad Guy')
SET @Workload_Group = 'Bad Guy Test'
ELSE
SET @Workload_Group = 'default'
RETURN @Workload_Group
END
GO
Posledním krokem řekneme, že má tuto funkci používat jako klasifikační a má podle toho rozdělovat prostředky serveru
ALTER RESOURCE GOVERNOR
WITH (CLASSIFIER_FUNCTION=dbo.udf_Resource_Governor_Classification);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Další zajímavé informace o tématu můžete najít: