리소스 관리자 리소스 풀

적용 대상:SQL ServerAzure 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을 할당할 수 있습니다. 이 구성은 Sales 워크로드가 필요한 CPU 리소스를 수신하고 마케팅 워크로드가 Sales 워크로드의 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 다릅니다. 이 경우 풀에 이 풀에 속한 작업 그룹에 요청이 없는 경우에도 지정된 리소스 풀에서 메모리가 다시 기본 수 있기 때문입니다. 따라서 활성 요청이 없는 경우에도 다른 풀에서 이 메모리를 사용할 수 없으므로 이 설정을 사용할 때는 주의해야 합니다. 풀에 대한 최대 메모리 값을 설정하면 요청이 이 풀에서 실행 중일 때 전체 메모리의 이 백분율을 초과하지 않습니다.

Resource Governor를 사용하여 메모리 최적화 테이블에 대한 메모리를 제어하려면 데이터베이스를 별도의 리소스 풀에 바인딩해야 합니다. 자세한 내용은 메모리 최적화 테이블이 있는 데이터베이스를 리소스 풀에 바인딩을 참조 하세요.

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 수준을 제어합니다.

시스템 및 사용자 정의 리소스 풀

Resource Governor는 내부 풀과 기본 풀인 두 개의 리소스 풀을 미리 정의합니다. 추가 풀을 만들 수 있습니다.

내부 풀

내부 풀은 SQL Server 자체에서 사용하는 리소스를 나타냅니다. 이 풀에는 항상 내부 그룹만 포함되며 풀은 어떤 방식으로도 수정할 수 없습니다. 내부 풀의 리소스 사용은 제한되지 않습니다. 풀의 모든 워크로드는 서버 함수에 중요한 것으로 간주됩니다. 따라서 리소스 관리자는 내부 풀이 다른 풀에 대해 설정된 제한 위반을 의미하더라도 다른 풀을 압박할 수 있도록 허용합니다.

참고 항목

내부 풀 및 내부 그룹 리소스 사용량은 전체 리소스 사용량에서 빼지지 않습니다. 백분율은 사용 가능한 전체 리소스에서 계산됩니다.

기본 풀

기본 풀은 미리 정의된 첫 번째 사용자 풀입니다. 구성 전에 기본 풀에는 기본 그룹만 포함됩니다. 기본 풀을 만들거나 삭제할 수는 없지만 변경할 수 있습니다. 기본 풀에는 기본 그룹 외에도 사용자 정의 그룹이 포함될 수 있습니다. SQL Server 2016(13.x)부터는 일상적인 SQL Server 작업에 대한 기본 리소스 풀과 R 스크립트 실행과 같은 외부 프로세스에 대한 기본 외부 리소스 풀이 있습니다.

참고 항목

기본 그룹은 변경할 수 있지만 기본 풀에서 이동할 수 없습니다.

외부 풀

사용자는 외부 풀을 만들어 외부 프로세스에 대한 리소스를 정의할 수 있습니다. R Services의 경우 이 풀은 rterm.exeBxlServer.exepython.exe 특히 해당 풀에 의해 생성된 프로세스 및 기타 프로세스를 제어합니다. 자세한 내용은 CREATE EXTERNAL RESOURCE POOL을 참조 하세요.

사용자 정의 리소스 풀

사용자 정의 리소스 풀은 환경의 특정 작업에 대해 만드는 풀입니다. Resource Governor는 리소스 풀을 만들고, 변경하고, 삭제하기 위한 DDL 문을 제공합니다. 자세한 내용은 리소스 풀 만들기, 리소스 풀 삭제 및 리소스 풀 변경 설정 참조하세요.

풀 간의 리소스 할당

CPU 또는 메모리를 구성할 때 모든 풀에서 MIN 값의 합계는 서버 리소스의 100%를 초과할 수 없습니다. 또한 CPU 또는 메모리를 구성할 때 MAX 및 CAP 값은 MIN에서 100% 사이의 범위에서 설정할 수 있습니다.
풀에 0이 아닌 MIN이 정의되어 있으면 다른 풀의 유효 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 - 합계(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입니다. 모든 풀은 사용 가능한 리소스에 대해 경쟁하며 최종 크기는 각 풀의 리소스 소비를 기반으로 합니다. 정책과 같은 다른 요소는 최종 풀 크기를 형성하는 데 중요한 역할을 합니다.

리소스 풀 작업

태스크 설명 문서
리소스 풀을 만드는 방법을 설명합니다. 리소스 풀 만들기
리소스 풀 설정을 변경하는 방법을 설명합니다. 리소스 풀 설정 변경
리소스 풀을 삭제하는 방법을 설명합니다. 리소스 풀 삭제

참고 항목