2. RESOURCE GOVERNOR 필요성
모든 DBA는 SQL Server instances 의 Resource 사용을 효율적으로
제어 할 수 있기를 원함.
[ IT ]
[ Other departments ] [ Customer ]
•하드웨어 비용 구축을
최소하여 높은 성능을 •재무, 회계, 마게팅, Sales •나의 Web Report 는
내고 자 함. • 더 낳은 성능을 원함 timed out 발생 불만
•안정적인 Service를 •많은 Data 분석을 원함 •실 시간 조회를 원함
원함
3. RESOURCE GOVERNOR 전에.
RESOURCE GOVERNOR 가 있기 전에 자원을 효율적으로 사용하던
방법
Resource 를 많이 사용하는 세션을 Kill
SET QUERY_GOVERNOR_COST_LIMIT 옵션 사용으로 제한
부하가 많은 업무를 별도의 Server 혹은 Instance 로 분리
Peak load Time 때 부하를 주지 않기 위한 예약된 작업 사용
Peak load Time 때 특정 그룹 유저에 대한 Password 변경으로
차단
새로운 업무 계획 작성을 기획하지 못하게 함
4. What is The RESOURCE GOVERNOR ?
RESOURCE 소비량에 대한 제한을 지정하여, SQL Server 작업과 리소스 관리를 할
수 있는 SQL 2008 기술
[ 리소스 문제의 유형]
Run-away queries on the Server
예기치 않은 작업 실행
작업 우선 순의 결정
모든 작업은 어떤 방식으로 구별이 되어야 함 (HostName, App Name.., User)
[ 리소스 관리자 제약]
Database 엔진으로 제한 ( IS, RS, AS 사용 못함)
SQL Server Instance 간 작업 관리는 없음
CPU 대역폭과 SQL Server에서 관리하는 메모리에만 적용
5. RESOURCE GOVERNOR 구성요소
Resource Pools
서버의 물리적 리소스
Internal Pool – 변경/삭제 X, 다른 Pool 제한을 받지 않고 사용. ( 어떤 Pool 과 붙어도 이김)
Default Pool – 변경 0
사용자 정의 Pool
WorkGroup
각 요청에 적용되는 분류 조건에 따라 유사한 세션 요청의 컨테이너 역할.
internal Group, Default Group
Classification
RESOURCE GOVERNOR은 세션의 분류를 지원.
작업을 분류하기 위해서는 분류 함수가 필요함.
분류자 함수는 새 세션이 생성될 때마다 수행 됩니다.
7. RESOURCE GOVERNOR- Resource Pools 사용율
CPU, 메모리 MIN 또는 MAX 설정
모든 풀의 MIN 값의 합은 서버 리소스 100% 초과 할 수 없음, MAX 값은 MIN과 100% 사이의 임
의 값 설정.
유효한 MAX% = min(x, 100-sum(min%)), 계산된 공유% = 유효한 MAX% - MIN%
Pool MIN % MAX % 유효한 MAX% 계산된 공유 % 설명
Internal 0 100 100 0 내부 Pool에는 적용 못함
Default 0 100 30 30 Min( 100, 100-(20+50)), max-min =30-0
Pool 1 20 100 50 30 Min(100,100-50), 50-20 = 20
Pool 2 50 70 70 20 Min(70, 100-20), 70-50 = 30
8. RESOURCE GOVERNOR- Resource Pools 사용율
퀴즈
Pool MIN % MAX % 유효한 MAX% 계산된 공유 % 설명
Internal 0 100 100 0
Default 0 100
Pool 1 20 100
Pool 2 50 70
Pool 3 5 100
모든 Pool 이 MIN 0 %, MAX 100 % 이 라면?
모든 Pool 이 MIN 100% 정의 한다면 ?
9. 생성 Step
Create resource Pools
Create Workload Groups
Create classifier function
Enable resource Governor
Monitoring
11. 어디에 적용?
OLTP 환경에서는 쿼리의 지속 시간이 매우 짧으므로 대역폭 제어를 적용할 수 있을 정도로 오래
CPU에 상주 하지 않는다. 이로 인해 CPU 사용량 반환되는 통계가 왜곡 될 수 있다.
DBA 는 SQL Server의 상태를 확인하기 윈한 진단 쿼리를 수행합니다. 이러한 쿼리가 서버 메모
리의 특정 리소스를 사용하지 않게 합니다.
SQL 2008에서 압축 백업이 가능합니다. 압축 시 CPU 로드가 추가되는데 전체 CPU에 부하를 주
기 싫을 때..
특정 패키지 & APP 호출 내역이 메모리, CPU를 모두 차지합니다. 이 작업시 다른 서비스에는 영
향을 주기 싫을 때, 메모리, cpu 제한 (GINDEXDB.. )
특정 Report는 기본 리소스 그룹에서 가장 높은 리소스 사용 우선 순위를 갖도록 할 때.
12. 모니터링
-- 리소스관리자category view
-- veiw any definition, 변경시control server
select * from sys.resource_governor_configuration with (nolock)
SELECT
classifier_function_id
,object_schema_name(classifier_function_id) AS 'Classifier UDF schema'
,object_name(classifier_function_id) AS 'Classifier UDF name'
,is_enabled
FROM sys.resource_governor_configuration
GO
-- resource pool info
select * from sys.resource_governor_resource_pools with (nolock)
select * from sys.resource_governor_workload_groups with (nolock)
-- 리소스관리자를변경했을때재구성문필요여부
select * from sys.dm_resource_governor_configuration with (nolock)
select * from sys.dm_resource_governor_workload_groups with (nolock)
select * from sys.dm_resource_governor_resource_pools as with (nolock)
select p.pool_id, p.name, p.statistics_start_time
, p.total_cpu_usage_ms,p.used_memgrant_kb, p.active_memgrant_kb
, p.min_cpu_percent, p.max_cpu_percent, p.min_memory_percent, p.max_memory_percent
, g.name, g.importance,g.total_cpu_usage_ms, g.max_dop
, g.total_query_optimization_count, g.active_parallel_thread_count
from sys.dm_resource_governor_resource_pools as p with (nolock)
join sys.dm_resource_governor_workload_groups as g with (nolock)
on p.pool_id = g.pool_id
order by p.pool_id
13. 참고 자료
BOL, MSDN, BLOGS
http://msdn.microsoft.com/ko-kr/library/bb933866.aspx
http://blogs.technet.com/sqlos/archive/2007/12/14/part-1-anatomy-of-sql-server-2008-
resource-governor-cpu-demo.aspx
http://blogs.msdn.com/psssql/archive/2008/01/10/sql-server-2008-resource-governor-
questions.aspx