리소스 관리자 리소스 풀
적용 대상: SQL Server
Azure SQL Managed Instance
SQL Server 리소스 관리자에서 리소스 풀은 데이터베이스 엔진 인스턴스의 물리적 리소스 하위 세트를 나타냅니다. 리소스 관리자를 사용하면 들어오는 애플리케이션 요청이 리소스 풀 내에서 사용할 수 있는 CPU, 물리적 IO 및 메모리 양에 대한 제한을 지정할 수 있습니다. 각 리소스 풀에는 하나 이상의 워크로드 그룹이 포함될 수 있습니다. 세션이 시작되면 리소스 관리자 분류자는 특정 워크로드 그룹에 세션을 할당하고 세션은 워크로드 그룹에 할당된 리소스를 사용하여 실행해야 합니다.
리소스 풀 개념
리소스 풀 또는 풀은 서버의 물리적 리소스를 나타냅니다. 풀은 SQL Server 인스턴스 내부의 가상 SQL Server 인스턴트로 간주할 수 있습니다. 풀은 두 부분으로 구성되어 있는데, 하나는 다른 풀과 겹치지 않으므로 리소스 예약을 최소화할 수 있고, 다른 하나는 다른 풀과 공유되므로 리소스 소비를 최대로 지원합니다. 풀 리소스는 각 리소스(CPU, 메모리 및 실제 IO)에 대해 다음 설정 중 하나 이상을 지정하여 정의됩니다.
MIN_CPU_PERCENT 및 MAX_CPU_PERCENT
이러한 설정은 CPU 경합이 있을 때 리소스 풀의 모든 요청에 대해 보장되는 최소 및 최대 평균 CPU 대역폭입니다. 이 설정을 사용하면 각 작업의 요구 사항을 기준으로 여러 작업에 대해 예측 가능한 CPU 리소스 사용량을 설정할 수 있습니다. 예를 들어 회사의 영업 및 마케팅 부서가 동일한 데이터베이스를 공유했다고 가정합니다. 영업 부서에는 우선 순위가 높은 쿼리가 있는 CPU 집약적 워크로드가 있습니다. 마케팅 부서에는 CPU 집약적 워크로드도 있지만 우선 순위가 낮은 쿼리가 있습니다. 각 부서에 대해 별도의 리소스 풀을 만들면 Sales 리소스 풀에 대해 최소 CPU 비율 70과 마케팅 리소스 풀의 최대 CPU 비율 30을 할당할 수 있습니다. 이렇게 구성하면 영업부 작업은 필요한 CPU 리소스를 받을 수 있고 마케팅 부서 작업은 영업부 작업의 CPU 수요와 격리됩니다. 최대 CPU 비율은 기회 최대값입니다. 사용 가능한 CPU 용량이 있으면 작업자 스레드가 100%를 사용합니다. 최대값은 CPU 리소스에 대한 경합이 있는 경우에만 적용됩니다. 이 예에서는 필요한 경우 영업부 작업이 차단되고 마케팅 부서 작업에 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 여전히 사용한다고 가정하면 마케팅 워크로드는 한 코어의 최대 30%를 계속 사용하고 Sales 워크로드는 다른 코어의 100%를 사용합니다. 영업부 워크로드와 마케팅부 워크로드는 두 개의 격리된 시스템에서 실행됩니다.
MIN_IOPS_PER_VOLUME과 MAX_IOPS_PER_VOLUME을 설정합니다.
이러한 설정은 리소스 풀에 대한 디스크 볼륨당 최소 및 최대 IOPS(실제 IO 작업 수)입니다. 이 설정을 사용하면 지정된 리소스 풀의 사용자 스레드에 대해 발생하는 물리적 IO를 제어할 수 있습니다. 예를 들어 Sales 부서는 여러 월말 보고서를 대량 일괄 처리로 생성합니다. 이러한 일괄 처리의 쿼리는 디스크 볼륨을 포화시키고 데이터베이스에서 우선 순위가 높은 다른 작업의 성능에 영향을 줄 수 있는 IO를 생성할 수 있습니다. 이 작업을 격리하기 위해 영업부 리소스 풀의 MIN_IOPS_PER_VOLUME을 20으로 설정하고 MAX_IOPS_PER_VOLUME을 100으로 설정합니다. 이러한 설정은 워크로드에 대해 발급할 수 있는 IO 수준을 제어합니다.
시스템 및 사용자 정의 리소스 풀
리소스 관리자는 내부 풀과 기본 풀인 두 개의 리소스 풀을 미리 정의합니다. 추가 풀을 만들 수 있습니다.
내부 풀
내부 풀은 SQL Server 자체에서 소비한 리소스를 나타냅니다. 이 풀에는 항상 내부 그룹만 포함되며 풀은 어떤 방식으로도 수정할 수 없습니다. 내부 풀의 리소스 사용은 제한되지 않습니다. 풀의 모든 워크로드는 서버 함수에 중요한 것으로 간주됩니다. 따라서 리소스 관리자는 내부 풀이 다른 풀에 대해 설정된 제한 위반을 의미하더라도 다른 풀을 압박할 수 있도록 허용합니다.
참고 항목
내부 풀 및 내부 그룹 리소스 사용량은 전체 리소스 사용량에서 빼지지 않습니다. 백분율은 사용 가능한 전체 리소스에서 계산됩니다.
기본 풀
기본 풀은 미리 정의된 첫 번째 사용자 풀입니다. 구성 전에 기본 풀에는 기본 그룹만 포함됩니다. 기본 풀을 만들거나 삭제할 수는 없지만 변경할 수 있습니다. 기본 풀에는 기본 그룹 외에도 사용자 정의 그룹이 포함될 수 있습니다. SQL Server 2016(13.x)부터는 일상적인 SQL Server 작업에 대한 기본 리소스 풀과 R 스크립트 실행과 같은 외부 프로세스에 대한 기본 외부 리소스 풀이 있습니다.
참고 항목
기본 그룹은 변경할 수 있지만 기본 풀에서 이동할 수 없습니다.
외부 풀
사용자는 외부 프로세스에 대한 리소스를 정의하는 외부 풀을 만들 수 있습니다. R 서비스의 경우 이 풀은 특히 rterm.exe
, BxlServer.exe
, python.exe
및 생성된 다른 프로세스를 관리합니다. 자세한 내용은 CREATE EXTERNAL RESOURCE POOL을 참조하세요.
사용자 정의 리소스 풀
사용자 정의 리소스 풀은 환경의 특정 작업에 대해 만드는 풀입니다. 리소스 관리자는 리소스 풀을 만들고, 변경하고, 삭제하기 위한 DDL 문을 제공합니다. 자세한 내용은 리소스 풀 만들기, 리소스 풀 삭제 및 리소스 풀 설정 변경을 참조하세요.
풀 간의 리소스 할당
CPU 또는 메모리를 구성할 때 모든 풀에서 MIN 값의 합계는 서버 리소스의 100%를 초과할 수 없습니다. 또한 CPU 또는 메모리를 구성할 때 MAX 및 CAP 값은 MIN에서 100% 사이의 범위에서 설정할 수 있습니다.
풀에 MIN이 0이 아닌 값으로 정의되어 있으면 다른 풀의 유효 MAX 값이 재조정됩니다. 풀의 구성된 MAX 값의 최소값과 다른 풀의 MIN 값 합계는 100%에서 뺍니다.
다음 표에서는 앞의 몇 가지 개념을 보여 줍니다. 이 표에서는 내부 풀, 기본 풀 및 두 개의 사용자 정의 풀에 대한 설정을 보여 줍니다.
풀 이름 | MIN % 설정 | MAX % 설정 | 계산된 유효 MAX % | 계산된 공유 % | Comment(설명) |
---|---|---|---|---|---|
internal | 0 | 100 | 100 | 0 | 유효 MAX % 및 공유 %는 내부 풀에 적용할 수 없습니다. |
기본값 | 0 | 100 | 30 | 30 | 유효 MAX 값은 min(100,100-(20+50)) = 30으로 계산됩니다. 계산된 공유 %는 유효 MAX - MIN = 30입니다. |
풀 1 | 20 | 100 | 50 | 30 | 유효 MAX 값은 min(100,100-50) = 50으로 계산됩니다. 계산된 공유 %는 유효 MAX - MIN = 30입니다. |
풀 2 | 50 | 70 | 70 | 20 | 유효 MAX 값은 min(70,100-20) = 70으로 계산됩니다. 계산된 공유 %는 유효 MAX - MIN = 20입니다. |
다음 공식은 유효한 MAX % 및 테이블의 공유 %를 계산하는 데 사용됩니다.
Min(X,Y)은 X와 Y 중에서 더 작은 값을 의미합니다.
Sum(X)은 모든 풀에서 X 값의 합계를 의미합니다.
총 공유 % = 100 - sum(MIN %)입니다.
유효 MAX % = min(X,Y)입니다.
공유 % = 유효한 MAX % - MIN %
앞의 테이블을 예로 사용하여 다른 풀을 만들 때 발생하는 조정을 자세히 설명할 수 있습니다. 이 풀은 풀 3이며 MIN % 설정은 5입니다.
풀 이름 | MIN % 설정 | MAX % 설정 | 계산된 유효 MAX % | 계산된 공유 % | Comment(설명) |
---|---|---|---|---|---|
internal | 0 | 100 | 100 | 0 | 유효 MAX % 및 공유 %는 내부 풀에 적용할 수 없습니다. |
기본값 | 0 | 100 | 25 | 25 | 유효 MAX 값은 min(100,100-(20+50+5)) = 25으로 계산됩니다. 계산된 공유 %는 유효 MAX - MIN = 25입니다. |
풀 1 | 20 | 100 | 45 | 25 | 유효 MAX 값은 min(100,100-55) = 45으로 계산됩니다. 계산된 공유 %는 유효 MAX - MIN = 25입니다. |
풀 2 | 50 | 70 | 70 | 20 | 유효 MAX 값은 min(70,100-25) = 70으로 계산됩니다. 계산된 공유 %는 유효 MAX - MIN = 20입니다. |
풀 3 | 5 | 100 | 30 | 25 | 유효 MAX 값은 min(100,100-70) = 30으로 계산됩니다. 계산된 공유 %는 유효 MAX - MIN = 25입니다. |
풀의 공유 부분은 리소스를 사용할 수 있는 경우 사용 가능한 리소스가 어디로 갈 수 있는지를 나타내는 데 사용됩니다. 그러나 리소스를 사용하는 경우 지정된 풀로 이동하고 공유되지 않습니다. 이 동작은 지정된 풀에 요청이 없고 풀에 구성된 리소스가 다른 풀에 대해 해제될 수 있는 경우 리소스 사용률을 향상시킬 수 있습니다.
풀 구성의 몇 가지 극단적인 경우는 다음과 같습니다.
모든 풀은 서버 리소스의 100%를 나타내는 최소값을 정의합니다. 이 경우 유효한 최대값은 최소값과 같습니다. 이것은 지정된 풀 내부에서 리소스가 소비되는지 여부에 관계없이 서버 리소스를 겹치지 않는 부분으로 분할하는 것과 같습니다.
모든 풀에는 최소값이 0입니다. 모든 풀은 사용 가능한 리소스에 대해 경쟁하며 최종 크기는 각 풀의 리소스 소비를 기반으로 합니다. 정책과 같은 다른 요소는 최종 풀 크기를 형성하는 데 중요한 역할을 합니다.
리소스 풀 작업
작업 설명 | 문서 |
---|---|
리소스 풀을 만드는 방법을 설명합니다. | 리소스 풀 만들기 |
리소스 풀 설정을 변경하는 방법을 설명합니다. | 리소스 풀 설정 변경 |
리소스 풀을 삭제하는 방법을 설명합니다. | 리소스 풀 삭제 |