리소스 관리자 리소스 풀
적용 대상:SQL ServerAzure SQL Managed Instance
리소스 관리자에서 리소스 풀은 데이터베이스 엔진 인스턴스의 물리적 리소스 하위 집합을 나타냅니다. 리소스 관리자를 사용하면 애플리케이션 요청이 리소스 풀 내에서 사용할 수 있는 CPU, 실제 IO 및 메모리의 총 양에 대한 제한을 지정할 수 있습니다.
각 리소스 풀에는하나 이상의
리소스 풀 개념
리소스 풀은 CPU, 메모리 및 I/O와 같은 서버의 물리적 리소스를 나타냅니다. 구성에 따라 리소스 풀의 리소스를 예약하거나 다른 풀과 공유할 수 있습니다. 풀 구성은 각 리소스 유형(CPU, 메모리 및 물리적 I/O)에 대해 다음 설정 중 하나 이상을 지정하여 정의됩니다.
MIN_CPU_PERCENT 및 MAX_CPU_PERCENT
이러한 설정은 CPU 경합이 있을 때 리소스 풀의 모든 요청에 대해 보장되는 최소 및 최대 평균 CPU 대역폭을 정의합니다.
MIN_CPU_PERCENT
경합이 있을 때 다른 풀에서 사용할 수 없는 리소스 풀에 대한 CPU 대역폭 예약입니다.
MAX_CPU_PERCENT
풀의 CPU 대역폭에 대한 소프트 제한입니다. 제한은 다른 풀과 CPU 경합이 있는 경우에만 적용됩니다.
예를 들어 회사의 영업 및 마케팅 부서가 동일한 SQL Server 인스턴스를 공유했다고 가정합니다. 영업 부서에는 우선 순위가 높은 쿼리가 있는 CPU 집약적 워크로드가 있습니다. 마케팅 부서에는 CPU 집약적 워크로드도 있지만 우선 순위가 낮은 쿼리가 있습니다. 각 부서에 대해 별도의 리소스 풀을 만들면 Sales 리소스 풀에 대해 최소 CPU 백분율 40을 할당하고 마케팅 리소스 풀에 대해 최대 CPU 백분율 30을 할당할 수 있습니다. 이 구성은 Sales 워크로드가 필요한 CPU 리소스를 수신하고 마케팅 워크로드가 Sales 워크로드의 CPU 요구에 영향을 주지 않도록 합니다.
최대 CPU 비율은 기회 최대값입니다. 사용 가능한 CPU 용량이 있는 경우 요청은 최대 100%까지 모든 용량을 사용합니다. 최대값은 CPU 리소스에 대한 경합이 있는 경우에만 적용됩니다. 이전 예제에서 Sales 워크로드가 실행되지 않는 경우 마케팅 워크로드는 필요한 경우 CPU의 100%를 사용할 수 있습니다.
CAP_CPU_PERCENT
CAP_CPU_PERCENT
설정은 리소스 풀의 모든 요청에 대한 CPU 대역폭에 대한 하드 제한입니다. 풀과 연결된 워크로드는 사용 가능한 경우 MAX_CPU_PERCENT
값보다 높은 CPU 용량을 사용할 수 있지만 CAP_CPU_PERCENT
값보다 높지는 않습니다. 이전 섹션의 예제에 따라 마케팅 부서에 리소스 사용량에 대한 요금이 청구된다고 가정해 보겠습니다. 예측 가능한 청구를 원하며 CPU의 30% 이상을 지불하고 싶지 않습니다. 이 목표는 마케팅 리소스 풀에 대해 CAP_CPU_PERCENT
30으로 설정하여 수행할 수 있습니다.
MIN_MEMORY_PERCENT 및 MAX_MEMORY_PERCENT
이러한 설정은 다른 리소스 풀과 공유할 수 없는 리소스 풀에 예약된 최소 및 최대 메모리 양입니다.
풀에 대한 최소 메모리 값을 설정하면 이 리소스 풀에서 실행되는 요청에 대한 메모리가 예약됩니다. 이 설정은 이 풀에 속하는 워크로드 그룹에 요청이 없는 경우에도 예약된 메모리가 풀에 남아 있을 수 있으므로 MIN_CPU_PERCENT
다릅니다. 활성 요청이 없는 경우에도 다른 풀에서 이 메모리를 사용할 수 없으므로 이 설정을 사용할 때는 주의해야 합니다. 풀에 대한 최대 메모리 값을 설정하면 요청이 이 풀에서 실행 중일 때 전체 메모리의 이 백분율을 초과하지 않습니다.
없는
AFFINITY
이 설정을 사용하면 CPU 리소스를 더 격리하기 위해 하나 이상의 스케줄러 또는 NUMA 노드에 리소스 풀을 선호할 수 있습니다. 이전 섹션의 영업 및 마케팅 시나리오를 사용하려면 영업 부서에 더 격리된 환경이 필요하며 항상 논리 CPU의 100%를 원한다고 가정해 보겠습니다.
AFFINITY
옵션을 사용하면 영업 및 마케팅 워크로드를 다른 논리 CPU에 예약할 수 있습니다. 마케팅 풀의 CAP_CPU_PERCENT
지정되었다고 가정하면 마케팅 워크로드는 한 CPU의 최대 30%를 계속 사용하고 Sales 워크로드는 다른 CPU의 100%를 사용합니다.
MIN_IOPS_PER_VOLUME과 MAX_IOPS_PER_VOLUME을 설정합니다.
이러한 설정은 리소스 풀에 대한 디스크 볼륨당 최소 및 최대 IOPS(실제 IO 작업 수)입니다. 이러한 설정을 사용하여 지정된 리소스 풀의 사용자 요청에 의해 발급된 실제 IO를 제어할 수 있습니다. 예를 들어 Sales 부서는 여러 월말 보고서를 대량 일괄 처리로 생성합니다. 이러한 일괄 처리의 쿼리는 디스크 볼륨을 포화시키고 동일한 SQL Server 인스턴스에서 우선 순위가 높은 다른 워크로드의 성능에 영향을 줄 수 있는 IO를 생성할 수 있습니다. 이 워크로드를 격리하기 위해 MIN_IOPS_PER_VOLUME
500으로 설정되고 영업 부서 리소스 풀의 MAX_IOPS_PER_VOLUME
2,000으로 설정됩니다.
시스템 및 사용자 정의 리소스 풀
리소스 관리자에는 두 개의 기본 제공 리소스 풀인 internal
풀과 default
풀이 있습니다. 추가 사용자 정의 풀을 만들 수 있습니다.
내부 풀
internal
풀은 데이터베이스 엔진 자체에서 사용하는 리소스를 제어합니다. 이 풀에는 항상 internal
그룹만 포함되며 풀은 어떤 방식으로도 수정할 수 없습니다.
internal
풀의 리소스 사용은 제한되지 않습니다. 풀의 모든 워크로드는 데이터베이스 엔진이 작동하는 데 중요한 것으로 간주됩니다. 리소스 관리자는 internal
풀이 다른 풀에 대해 설정된 제한을 위반하는 것을 의미하더라도 다른 풀을 압박할 수 있도록 허용합니다.
참고 항목
internal
풀 및 internal
그룹 리소스 사용량은 전체 리소스 사용량에서 차감되지 않습니다. 백분율은 사용 가능한 전체 리소스에서 계산됩니다.
기본 풀
처음에는 default
풀에 default
워크로드 그룹만 포함됩니다.
default
풀을 만들거나 삭제할 수는 없지만 수정할 수 있습니다.
default
풀에는 default
그룹 외에도 사용자 정의 워크로드 그룹이 포함될 수 있습니다. SQL Server 2016(13.x)부터 데이터베이스 엔진 작업에 대한 default
리소스 풀 외에도 R 스크립트 실행과 같은 외부 프로세스에 대한 default
외부 리소스 풀이 있습니다.
참고 항목
default
그룹을 수정할 수 있지만 default
풀 밖으로 이동할 수는 없습니다.
외부 풀
사용자는 외부 프로세스에 대한 리소스를 정의하는 외부 풀을 만들 수 있습니다. R Services의 경우 이 풀은 특히 rterm.exe
, BxlServer.exe
, python.exe
및 생성된 기타 프로세스를 제어합니다. 자세한 내용은 CREATE EXTERNAL RESOURCE POOL을(를) 참조하세요.
사용자 정의 리소스 풀
사용자 환경에서 특정 워크로드에 대한 사용자 정의 리소스 풀을 만들 수 있습니다. 리소스 관리자는 리소스 풀을 만들고, 수정하고, 삭제하기 위한 DDL 문을 제공합니다. 자세한 내용은
리소스 풀 간의 리소스 할당
CPU 및 메모리 제한 및 예약을 구성할 때 모든 풀에서 MIN
값의 합계는 서버 리소스의 100%를 초과할 수 없습니다.
MAX
및 CAP
값은 MIN
값과 100%를 포함하여 그 사이의 범위에서 설정할 수 있습니다.
풀에 0이 아닌 MIN
값을 지정하여 리소스를 예약하는 경우, 다른 풀의 유효 MAX
값이 줄어들 수 있습니다. 가장 작은 풀의 구성된 MAX
값과 다른 풀들의 MIN
값의 합계를 100%에서 뺍니다.
다음 표에서는 이 개념을 보여 줍니다. 이러한 테이블에서 LEAST(X, Y)
는 X
과 Y
중 더 작은 값을 의미합니다. 모든 숫자 값은 백분율입니다.
첫 번째 표에서는 internal
풀, default
풀 및 두 개의 사용자 정의 풀에 대한 설정을 보여 줍니다.
풀 이름 | MIN |
MAX |
Effective MAX |
Shared % |
Comment(설명) |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 |
Effective MAX 및 Shared % internal 풀에는 적용되지 않습니다. |
default |
0 | 100 | 30 | 30 | Effective MAX = LEAST(100, 100 - (20 + 50)) = 30 Shared % = Effective MAX - MIN = 30 |
Pool 1 |
20 | 100 | 50 | 30 | Effective MAX = LEAST(100, 100 - 50) = 50 Shared % = Effective MAX - MIN = 30 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - 20) = 70 Shared % = Effective MAX - MIN = 20 |
앞의 표를 예로 사용하여 다른 리소스 풀을 만들 때 발생하는 조정을 자세히 설명할 수 있습니다. 이 풀은 Pool 3
이름이 지정되며 MIN
설정은 5입니다.
풀 이름 | MIN |
MAX |
Effective MAX |
Shared % |
Comment(설명) |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 |
Effective MAX 및 Shared % internal 풀에는 적용되지 않습니다. |
default |
0 | 100 | 25 | 25 | Effective MAX = LEAST(100, 100 - (20 + 50 + 5)) = 25 Shared % = Effective MAX - MIN = 25 |
Pool 1 |
20 | 100 | 45 | 25 | Effective MAX = LEAST(100, 100 - (50 + 5))) = 45 Shared % = Effective MAX - MIN = 25 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - (20 + 5))) = 70 Shared % = Effective MAX - MIN = 20 |
Pool 3 |
5 | 100 | 30 | 25 | Effective MAX = LEAST(100, 100 - (50 + 20))) = 30 Shared % = Effective MAX - MIN = 25 |
풀의 공유 부분은 리소스를 사용할 수 있는 경우에 사용 가능한 리소스가 갈 수 있는 위치입니다. 그러나 리소스를 사용하는 경우 지정된 풀로 이동하고 공유되지 않습니다. 이 동작은 지정된 풀에 요청이 없고 풀에 예약되지 않은 리소스가 다른 풀에 대해 해제될 수 있는 경우 리소스 사용률을 향상시킬 수 있습니다.
풀 구성의 일부 에지 사례는 다음과 같습니다.
- 모든 풀은 서버 리소스의 100%를 나타내는 최소값을 정의합니다. 이 경우 유효한 최대값은 최소값과 같습니다. 이는 지정된 풀 내에서 리소스를 사용하는 방법에 관계없이 서버 리소스를 오버랩되지 않는 조각으로 나누는 것과 같습니다.
- 모든 풀에는 최소값이 0입니다. 모든 풀은 사용 가능한 리소스를 공유하고 경쟁하며 해당 런타임 크기는 각 풀의 리소스 소비를 기반으로 합니다. 워크로드 그룹 정책과 같은 다른 요소는 풀 크기를 셰이핑하는 데 중요한 역할을 합니다.
리소스 풀 작업
리소스 풀은 다양한 시스템 리소스를 제어할 수 있습니다. 자세한 내용은 CREATE RESOURCE POOL참조하세요.
자세한 샘플 및 전체 연습은 자습서: Resource Governor 구성 예제 및모범 사례를 참조하세요.
작업 설명 | 문서 |
---|---|
리소스 풀 만들기 | 리소스 풀 만들기 |
리소스 풀 설정 수정 | 리소스 풀 설정 변경 |
리소스 풀 삭제 | 리소스 풀을 삭제 |
리소스 관리자는 리소스 풀을 만들고, 수정하고, 삭제하기 위한 DDL 문을 제공합니다.
리소스 풀 예약 및 제한에 대한 세부 정보를 포함하여 자세한 내용은 다음을 참조하세요.
- 리소스 풀 만들기
- ALTER RESOURCE POOL
- 리소스 풀 삭제