Resource Governor로 리포팅 부하 제한 (pool, workload group, classifier)
SQL Server구성명령어
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;하는 일
특정 로그인 또는 애플리케이션의 세션을 연결 시점에 별도 workload group으로 보낸다. 해당 그룹의 CPU, memory grant, DOP, 요청당 CPU 시간을 제한하여 OLTP 워크로드를 보호한다.
사용 시점
리포팅/BI 쿼리가 OLTP를 고갈시킬 때, ETL이 업무 시간 부하와 겹칠 때, 또는 멀티테넌트 서버의 리소스 공유를 위해.
주의
classifier 함수는 모든 새 연결에서 실행된다. 함수가 느리거나 실패하면 모든 로그인이 느려지거나 실패한다(함수 안에서 쿼리나 테이블 접근 금지). 오동작하면 DAC로 접속해 CLASSIFIER_FUNCTION = NULL로 설정한다. 분류는 연결 시점에만 일어나며 기존 세션에는 영향이 없다. CAP_CPU_PERCENT는 CPU가 유휴일 때도 적용되는 하드 상한이다. MAX_CPU_PERCENT는 CPU 경합 시에만 적용된다. Resource Governor는 Enterprise/Developer 기능이다.