SQL Server 리소스 제어

완료됨

일부 SQL Server 또는 Azure SQL의 관리되는 인스턴스는 하나의 애플리케이션 데이터베이스만 지원하지만(해당 구성은 미션 크리티컬 애플리케이션에서 일반적으로 사용됨), 많은 서버가 성능 요구 사항 및 워크로드 최대치가 서로 다른 여러 애플리케이션 데이터베이스를 지원합니다. 서로 다른 요구 사항의 균형을 맞추는 것은 관리자에게 어려울 수 있습니다. 서버 리소스의 균형을 조정하는 방법 중 하나는 SQL Server 2008에 도입된 Resource Governor를 사용하는 것입니다.

Resource Governor는 애플리케이션의 들어오는 요청에서 사용할 수 있는 CPU, 물리적 IO, 메모리 리소스의 양을 세부적으로 제어할 수 있는 SQL Server 및 Azure SQL의 관리되는 인스턴스의 기능입니다. Resource Governor는 인스턴스 수준에서 사용하도록 설정되며 세션을 워크로드 그룹으로 세분화하는 분류자 함수를 사용하여 연결을 처리하는 방법을 정의할 수 있습니다. 각 워크로드 그룹은 특정 시스템 리소스 풀을 사용하도록 구성됩니다.

리소스 풀

리소스 풀은 서버에서 사용할 수 있는 물리적 리소스를 나타냅니다. Resource Governor를 사용할 수 없는 경우에도 SQL Server에는 항상 두 개의 풀(기본 및 내부)이 있습니다. 내부 풀은 중요한 SQL Server 함수에 사용되며 제한할 수 없습니다. 기본 풀과 명시적으로 정의한 모든 리소스 풀은 사용할 수 있는 리소스에 대한 제한을 지정해 구성할 수 있습니다. 각 비 내부 풀에 대해 다음과 같은 제한을 지정할 수 있습니다.

  • 최소/최대 CPU 비율

  • CPU 비율 한도

  • 최소/최대 메모리 비율

  • NUMA 노드 선호도

  • 볼륨당 최소/최대 IOP

참고

풀에 대한 변경 사항은 새 세션에만 적용되고 기존 세션에는 적용되지 않습니다. 풀에 대한 변경 사항은 장기 실행 프로세스의 리소스를 제한하는 데 도움이 되지 않습니다. 단, SQL Server 외부에 있는 SQL Server Machine Learning Services와 함께 사용되는 외부 풀은 풀 변경에 의해 제한될 수 있습니다.

최소/최대 CPU 비율을 제외하고 다른 모든 리소스 풀 설정은 하드 제한을 나타내므로 초과할 수 없습니다. 최소/최대 CPU 비율은 CPU 경합이 있는 경우에만 적용됩니다. 예를 들어, 최대가 70%이고 사용할 수 있는 CPU 주기가 있으면 워크로드에서 최대 100%까지 사용할 수 있습니다. 다른 워크로드를 실행하는 경우 워크로드는 70%로 제한됩니다.

워크로드 그룹

워크로드 그룹은 세션 요청에 대한 컨테이너로 분류자 함수에 의한 분류를 기반으로 합니다. 리소스 풀과 마찬가지로 두 개의 기본 제공 그룹(기본 및 내부)이 있으며 각 워크로드 그룹은 하나의 리소스 풀에만 속할 수 있습니다. 그러나 리소스 풀은 여러 워크로드 그룹을 호스트할 수 있습니다. 분류자 함수에 의해 다른 사용자 정의 그룹으로 전달되는 경우를 제외하면 모든 연결은 기본 워크로드 그룹으로 이동합니다. 기본적으로 기본 워크로드 그룹은 기본 리소스 풀에 할당된 리소스를 사용합니다.

분류자 함수

분류자 함수는 SQL Server 인스턴스에 대한 연결이 설정될 때 실행되며 각 연결을 지정된 워크로드 그룹으로 분류합니다. 함수에서 NULL, 기본값, 존재하지 않는 워크로드 그룹의 이름을 반환하는 경우 해당 세션은 기본 워크로드 그룹으로 전송됩니다. 분류자는 모든 연결에서 실행되므로 효율성을 테스트해야 합니다. 다음 이미지에서는 사용자 이름에 따라 사용자를 분류하는 샘플 분류자 함수를 보여줍니다.

CREATE FUNCTION dbo.RGClassifier()

RETURNS SYSNAME

WITH SCHEMABINDING

AS

BEGIN

DECLARE @WorkloadGroup AS SYSNAME

IF(SUSER_NAME() = 'ReportUser')

SET @WorkloadGroup = 'ReportServerGroup'

ELSE IF (SUSER_NAME() = 'PrimaryUser')

SET @WorkloadGroup = 'PrimaryServerGroup'

ELSE

SET @WorkloadGroup = 'default'

RETURN @WorkloadGroup

END

예제에 표시된 함수 정의의 복잡성을 높일 수 있지만, 더 복잡한 함수가 사용자 로그인 성능에 영향을 주지 않는지 확인해야 합니다.

Resource Governor 사용 사례

Resource Governor는 주로 데이터베이스 그룹이 단일 SQL Server 인스턴스를 공유하고 서버의 모든 사용자에 대해 성능을 일관되게 유지해야 하는 다중 테넌트 시나리오에서 사용됩니다. 또한 Resource Governor를 사용하여 일관성 확인 및 인덱스 다시 작성 등의 유지 관리 작업에 사용되는 리소스를 제한하여 유지 관리 기간 동안 사용자 쿼리에 충분한 리소스를 보장할 수 있습니다.