Reporting-Last mit Resource Governor begrenzen (Pool, Workload Group, Classifier)
SQL ServerKonfigurationBefehl
USE master;
-- 1) Pool and workload group:
CREATE RESOURCE POOL [pool_report]
WITH (MIN_CPU_PERCENT = 0, MAX_CPU_PERCENT = 30, CAP_CPU_PERCENT = 40,
MIN_MEMORY_PERCENT = 0, MAX_MEMORY_PERCENT = 25);
CREATE WORKLOAD GROUP [wg_report]
WITH (IMPORTANCE = LOW, REQUEST_MAX_MEMORY_GRANT_PERCENT = 15,
MAX_DOP = 2, REQUEST_MAX_CPU_TIME_SEC = 600)
USING [pool_report];
GO
-- 2) Classifier function (in master, SCHEMABINDING required):
CREATE FUNCTION dbo.fn_rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @grp sysname = N'default';
IF SUSER_SNAME() = N'rapor_user' OR APP_NAME() LIKE N'Power BI%'
SET @grp = N'wg_report';
RETURN @grp;
END;
GO
-- 3) Enable:
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.fn_rg_classifier);
ALTER RESOURCE GOVERNOR RECONFIGURE;
-- 4) Which session landed in which group:
SELECT s.session_id, s.login_name, s.program_name, wg.name AS workload_group, rp.name AS pool
FROM sys.dm_exec_sessions s
JOIN sys.dm_resource_governor_workload_groups wg ON wg.group_id = s.group_id
JOIN sys.dm_resource_governor_resource_pools rp ON rp.pool_id = wg.pool_id
WHERE s.is_user_process = 1;
-- Rollback:
-- ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL); ALTER RESOURCE GOVERNOR DISABLE;Was es tut
Leitet Sessions bestimmter Logins oder Anwendungen beim Verbindungsaufbau in eine separate Workload Group; schützt die OLTP-Last, indem CPU, Memory Grants, DOP und CPU-Zeit pro Anfrage dieser Gruppe begrenzt werden.
Wann einsetzen
Wenn Reporting-/BI-Abfragen OLTP ausbremsen, ETL sich mit der Last der Geschäftszeit überschneidet oder zur Ressourcenaufteilung auf einem Multi-Tenant-Server.
Vorsicht
Die Classifier-Funktion läuft bei jeder neuen Verbindung; eine langsame oder fehlerhafte Funktion verlangsamt oder verhindert jeden Login (keine Abfragen oder Tabellenzugriffe darin). Verhält sie sich falsch, über die DAC verbinden und CLASSIFIER_FUNCTION = NULL setzen. Die Klassifizierung erfolgt nur beim Verbindungsaufbau; bestehende Sessions sind nicht betroffen. CAP_CPU_PERCENT ist eine harte Grenze, die auch bei freier CPU gilt. MAX_CPU_PERCENT greift nur bei CPU-Konkurrenz. Resource Governor ist ein Enterprise-/Developer-Feature.