고성능 워크로드가 있는 SQL Server에 권장되는 업데이트 및 구성 옵션

이 문서에는 SQL Server 2012 이상 버전에서 사용할 수 있는 성능 향상 및 구성 옵션 목록이 포함되어 있습니다.

원래 제품 버전: SQL Server 2014, SQL Server 2012
원래 KB 번호: 2964518

이 문서에서는 다양한 제품 업데이트 및 구성 옵션을 통해 SQL Server 2014 및 SQL Server 2012 버전에 사용할 수 있는 성능 향상 및 변경 사항을 설명합니다. SQL Server 인스턴스의 성능을 향상시키기 위해 이러한 업데이트를 적용하는 것이 좋습니다. 표시되는 개선 수준은 워크로드 패턴, 경합 지점, 프로세서 레이아웃(프로세서 그룹 수, 소켓, NUMA 노드, NUMA 노드의 코어 수) 및 시스템에 존재하는 메모리 양을 포함하는 다양한 요인에 따라 달라집니다. SQL Server 지원 팀은 이러한 업데이트 및 구성 변경을 사용하여 여러 NUMA 노드와 많은 프로세서가 있는 하드웨어 시스템을 사용하는 고객 워크로드에 대해 합리적인 성능 향상을 달성했습니다. 지원 팀은 나중에 이 문서를 다른 업데이트로 계속 업데이트할 예정입니다.

하이 엔드 시스템 A 하이 엔드 시스템에는 일반적으로 여러 소켓, 소켓당 8개 이상의 코어 및 반테라바이트 이상의 메모리가 있습니다.

참고 항목

SQL Server 2016 이상 버전에서는 이 문서에 언급된 많은 추적 플래그가 기본 동작이므로 해당 버전에서 사용하도록 설정할 필요가 없습니다.

권장 사항은 다음과 같이 세 개의 테이블로 그룹화됩니다.

  • 표 1 에는 고급 시스템의 확장성을 위해 가장 자주 권장되는 업데이트 및 추적 플래그가 포함되어 있습니다.
  • 표 2 에는 추가 성능 튜닝에 대한 권장 사항 및 지침이 포함되어 있습니다.
  • 표 3 에는 누적 업데이트와 함께 포함된 추가 확장성 수정 사항이 포함되어 있습니다.

표 1. 고급 시스템의 중요한 업데이트 및 추적 플래그

SQL Server 인스턴스가 적용 가능한 버전 및 빌드 범위 열의 요구 사항을 충족하는지 확인한 후 다음 표를 검토하고 추적 플래그 열에서 추적 플래그를 사용하도록 설정합니다.

참고 항목

  • 적용 가능한 버전 및 빌드는 변경 또는 추적 플래그가 도입된 특정 업데이트를 나타냅니다. CU를 지정하지 않으면 SP의 모든 CU가 포함됩니다.

  • 해당되지 않는 버전 및 빌드는 변경 또는 추적 플래그가 기본 동작이 된 특정 업데이트를 나타냅니다. 따라서 해당 업데이트를 적용하는 것만으로도 이점을 얻을 수 있습니다.

Important

Always On 환경에서 추적 플래그를 사용하여 수정을 사용하도록 설정하는 경우 가용성 그룹의 일부인 모든 복제본에서 수정 및 추적 플래그를 사용하도록 설정해야 합니다.

고려해야 할 시나리오 및 증상 추적 플래그 적용 가능한 버전 및 빌드 범위 해당되지 않는 버전 및 빌드 범위 자세한 내용을 제공하는 기술 자료 문서/블로그 링크
  • 높은 CMEMTHREAD 대기가 발생합니다.
  • SQL Server는 소켓당 8개 이상의 코어가 있는 시스템에 설치됩니다.
T8048
  • SQL Server 2012 RTM에서 SP(현재 서비스 팩)/CU로
  • SQL Server 2014 RTM에서 SP1로
  • SQL Server 2014 SP2에서 현재 SP/CU로
  • SQL Server 2016 RTM에서 현재 SP/CU로
  • SQL Server 2017 RTM에서 현재 SP/CU로
  • 높은 CMEMTHREAD 대기가 발생합니다.
  • SQL Server는 소켓당 8개 이상의 코어가 있는 시스템에 설치됩니다.
T8079 SQL Server 2014 SP2에서 현재 SP/CU로
  • SQL Server 2016 RTM에서 현재 SP/CU로
  • SQL Server 2017 RTM에서 현재 SP/CU로
  • 로그 풀 캐시를 사용하는 기능을 사용하고 있습니다. (예: Always On)
  • SQL Server는 여러 소켓이 있는 시스템에 설치됩니다.
T9024 SQL Server 2012 서비스 팩 1에서 SP2 SQL Server 2014 RTM에 대한 누적 업데이트 패키지 3
  • SQL Server 2012 SP3에서 현재 SP/CUSQL로
  • Server 2014 SP1에서 현재 SP/CU로
  • SQL Server 2016 RTM에서 현재 SP/CU로
  • SQL Server 2017 RTM에서 현재 SP/CU로
수정: SQL Server 2012 또는 SQL Server 2014 인스턴스에서 높은 "로그 쓰기 대기" 카운터 값
SQL Server 인스턴스는 연결 풀링으로 인해 수천 개의 연결 재설정을 처리합니다. T1236 SQL Server 2014용 SQL Server 2012 서비스 팩 1 ~SP2 누적 업데이트 1용 누적 업데이트 패키지 9
  • SQL Server 2012 SP3에서 현재 SP/CUSQL로
  • Server 2014 SP1에서 현재 SP/CUSQL로
  • 서버 2016 RTM에서 현재 SP/CU로
  • SQL Server 2017 RTM에서 현재 SP/CU로
  • 애플리케이션 워크로드에는 자주 tempdb 사용(임시 테이블 또는 테이블 변수 만들기 및 삭제)이 포함됩니다.
  • 할당 경합으로 인해 tempdb 페이지 리소스를 기다리는 사용자 요청을 확인할 수 있습니다.
T1118
  • SQL Server 2012 RTM에서 현재 SP/CU로
  • SQL Server 2014 RTM에서 현재 SP/CU로
  • SQL Server 2016 RTM에서 현재 SP/CU로
  • SQL Server 2017 RTM에서 현재 SP/CU로
tempdb 데이터베이스에 대한 동시성 향상

참고 추적 플래그를 사용하도록 설정하고 tempdb 데이터베이스에 대해 여러 데이터 파일을 추가합니다.
  • tempdb 데이터 파일이 여러 대 있습니다.
  • 처음에 데이터 파일은 동일한 크기로 설정됩니다.
  • 작업량이 많기 때문에 tempdb 파일이 증가하며 모든 파일이 동시에 증가하여 할당 경합이 발생하는 것은 아닙니다.
T1117
  • SQL Server 2012 RTM에서 현재 SP/CU로
  • SQL Server 2014 RTM에서 현재 SP/CU로
  • SQL Server 2016 RTM에서 현재 SP/CU로
  • SQL Server 2017 RTM에서 현재 SP/CU로
SQL Server tempdb 데이터베이스에서 할당 경합을 줄이기 위한 권장 사항
임시 쿼리 워크로드에서 스핀 SOS_CACHESTORE 잠금 경합 또는 계획이 자주 제거됩니다. T174 None
  • 다른 캐시 또는 메모리 클럭의 증가로 인해 계획 캐시의 항목이 제거됩니다.
  • 쿼리를 자주 다시 컴파일하여 높은 CPU 사용량
T8032
  • SQL Server 2012 RTM에서 현재 SP/CU로
  • SQL Server 2014 RTM에서 현재 SP/CU로
None
테이블의 행 수가 많기 때문에 기존 통계가 자주 업데이트되지 않습니다. T2371
  • SQL Server 2012 RTM에서 현재 SP/CU로
  • SQL Server 2014 RTM에서 현재 SP/CU로
None
  • 통계 작업을 완료하는 데 시간이 오래 걸립니다.
  • 여러 통계 업데이트 작업을 병렬로 실행할 수 없습니다.
T7471 SQL Server 2014 SP1 CU6에서 현재 SP/CU로 None SQL 2014 및 SQL 2016을 사용하여 업데이트 통계 성능 향상
CHECKDB 명령은 큰 데이터베이스에 대해 시간이 오래 걸립니다.
  • T2562
  • T2549
    • SQL Server 2012 RTM에서 현재 SP/CU로
    • SQL Server 2014 RTM에서 현재 SP/CU로
    None
    CHECKDB 명령은 큰 데이터베이스에 대해 시간이 오래 걸립니다. T2566
    • SQL Server 2012 RTM에서 현재 SP/CU로
    • SQL Server 2014 RTM에서 현재 SP/CU로
    None
    컴파일 시간이 RESOURCE_SEMAPHORE_QUERY_COMPILE 오래 걸리는 동시 데이터 웨어하우스 쿼리를 실행하면 대기가 발생합니다. T6498 SQL Server 2014 에서 SP1로 누적 업데이트 패키지 6
    • SQL Server 2014 SP2에서 현재 SP/CUSQL로
    • 서버 2016 RTM에서 현재 SP/CU로
    • SQL Server 2017 RTM에서 현재 SP/CU로
    최적화 프로그램 수정이 기본적으로 사용하지 않도록 설정된 특정 쿼리 성능 문제를 해결합니다. T4199
    • SQL Server 2012 RTM에서 SP4로
    • SQL Server 2014 RTM에서 최신 버전으로
    None
    공간 데이터 형식의 쿼리 작업을 사용하여 성능이 저하됩니다.
    • T6532
    • T6533
    • T6534
    • SQL Server 2012 SP3에서 현재 SP/CU로
    • SQL Server 2014 SP2에서 현재 SP/CU로
      • SQL Server 2016 RTM에서 현재 SP/CU로
      • SQL Server 2017 RTM에서 현재 SP/CU로
        • 쿼리가 발생하고 SOS_MEMORY_TOPLEVELBLOCKALLOCATOR CMEMTHREAD가 대기합니다.
        • SQL Server 프로세스에 사용 가능한 가상 주소 공간이 부족합니다.
        T8075
        • SQL Server 2012 SP2 CU8에서 현재 SP/CU로
        • SQL Server 2014 RTM CU10에서 현재 SP/CU로
        • SQL Server 2016 RTM에서 현재 SP/CU로
        • SQL Server 2017 RTM에서 현재 SP/CU로
        해결 방법: SQL Server 프로세스의 가상 주소 공간이 SQL Server에서 낮을 때 메모리 부족 오류
        • SQL Server는 메모리가 많은 컴퓨터에 설치됩니다.
        • 새 데이터베이스를 만드는 데 시간이 오래 걸립니다.
        T3449
        • SQL Server 2012 SP3 CU3에서 현재 SP/CU로
        • SQL Server 2014 RTM CU14에서 현재 RTM CU로
        • SQL Server 2014 SP1 CU7에서 현재 SP/CU로
        • SQL Server 2016 RTM에서 현재 SP/CU로
        • SQL Server 2017 RTM에서 현재 SP/CU로
        해결 방법: 메모리가 많은 시스템에서 SQL Server 데이터베이스를 만드는 데 예상보다 오래 걸립니다.

        표 2. SQL Server 인스턴스의 성능 향상을 위한 일반적인 고려 사항 및 모범 사례

        기술 자료 문서/온라인 설명서 리소스 열의 내용을 검토하고 권장 작업 열에서 지침을 구현하는 것이 좋습니다.

        기술 자료 문서/온라인 설명서 리소스 권장 조치
        최대 병렬 처리 수준 서버 구성 옵션 구성 sp_configure 저장 프로시저를 사용하여 기술 자료 문서에 따라 SQL Server 인스턴스에 대한 최대 병렬 처리 수준 서버 구성 옵션을 구성하도록 구성을 변경합니다.
        SQL Server의 버전별 컴퓨팅 용량 한도 Server + CAL(클라이언트 액세스 라이선스) 라이선스가 있는 Enterprise Edition은 SQL Server 인스턴스당 20코어로 제한됩니다. 코어 기반 서버 라이선스 모델에서는 제한이 없습니다. 모든 하드웨어 리소스를 활용하려면 SQL Server 버전을 적절한 SKU로 업그레이드하는 것이 좋습니다.
        "균형 잡힌" 전원 계획을 사용하는 경우 Windows Server의 성능 저하 문서를 검토하고 Windows 관리자와 협력하여 문서의 "해결 방법" 섹션에 설명된 솔루션 중 하나를 구현합니다.
        수동으로 K 그룹에 NUMA 노드를 할당합니다.
        임시 워크로드 강제 매개 변수화 최적화 계획 캐시의 항목은 다른 캐시 또는 메모리 클럭의 증가로 인해 제거됩니다. 캐시가 최대 항목 수에 도달하면 계획 캐시 제거가 발생할 수도 있습니다. 위에서 설명한 추적 플래그 8032 외에도 임시 워크로드 서버 옵션 및 FORCED PARAMETERIZATION 데이터베이스 옵션에 대한 최적화를 고려합니다.
        SQL Server 메모리 구성에서 버퍼 풀 메모리의 페이징을 줄이고 SQL Server 2012 이상 버전에서 크기 조정 고려 사항을 줄이는 방법 메모리에서 페이지 잠금 옵션(Windows) 사용자 권한을 SQL 서비스 시작 계정에 할당합니다. SQL Server 2012에서 "잠긴 페이지" 기능을 사용하도록 설정하는 방법을 참조하세요. 최대 서버 메모리를 총 실제 메모리의 약 90%로 설정합니다. 서버 메모리 구성 옵션 설정이 선호도 마스크 설정을 사용하도록 구성된 노드에서만 메모리를 사용하는지 확인합니다.
        SQL Server 및 큰 페이지 설명... 고성능 워크로드에서 실행할 때 SQL Server에 대한 튜닝 옵션 특히 분석 또는 데이터 웨어하우징 워크로드와 함께 메모리가 많은 서버가 있는 경우 TF 834를 사용하도록 설정하는 것이 좋습니다. columnstore 인덱스를 사용하는 경우 TF 834를 사용하지 않는 것이 좋습니다.
        sp_configure 저장 프로시저에서 사용할 수 있는 "액세스 확인 캐시 버킷 수" 및 "액세스 확인 캐시 할당량" 옵션에 대한 설명 액세스 확인 캐시 서버 구성 옵션을 사용하여 기술 자료 문서의 권장 사항에 따라 이러한 값을 구성합니다. 하이 엔드 시스템에 권장되는 값은 다음과 같습니다.
        "액세스 확인 캐시 버킷 수": 256
        "액세스 확인 캐시 할당량": 1024

        ALTER WORKLOAD GROUP 메모리 부여 쿼리 힌트 대용량 메모리 부여를 소모하는 쿼리가 많은 경우 리소스 관리자 구성의 기본 워크로드 그룹을 기본값 25%에서 더 낮은 값으로 줄 request_max_memory_grant_percent 입니다. SQL Server에서 새 쿼리 메모리 부여 옵션을 사용할 수 있음(min_grant_percentmax_grant_percent)
        인스턴트 파일 초기화 Windows 관리자와 협력하여 SQL Server 서비스 계정에 온라인 설명서 항목의 정보에 따라 "볼륨 유지 관리 작업 수행" 사용자에게 권한을 부여합니다.
        SQL Server의 "자동 증가" 및 "자동 축소" 설정에 대한 고려 사항 데이터베이스의 현재 설정을 확인하고 기술 자료 문서의 권장 사항에 따라 구성되었는지 확인합니다.
        데이터베이스 검사점(SQL Server) SQL Server 2012 및 2014에서 I/O 동작을 최적화하기 위해 사용자 데이터베이스에서 간접 검사점을 사용하도록 설정하는 것이 좋습니다.
        해결 방법: SQL Server AG 및 Logshipping 환경의 주 및 보조 복제본 로그 파일에 대해 디스크의 섹터 크기가 서로 다른 경우 동기화 속도가 느립니다. 주 복제본의 트랜잭션 로그가 512 바이트 섹터 크기의 디스크에 있고 보조 복제본의 트랜잭션 로그가 4K 섹터 크기의 드라이브에 있는 가용성 그룹이 있는 경우 동기화 속도가 느린 문제가 있을 수 있습니다. 이러한 경우 TF 1800을 사용하도록 설정하면 문제가 해결됩니다. 자세한 내용은 추적 플래그 1800을 참조 하세요.
        SQL Server가 아직 CPU 바인딩되지 않았고 워크로드에 대해 1.5%에서 2% 오버헤드가 무시할 수 있는 경우 TF 7412를 시작 추적 플래그로 사용하도록 설정하는 것이 좋습니다. 이 플래그를 사용하면 SQL Server 2014 SP2 이상에서 간단한 프로파일링을 사용할 수 있으므로 프로덕션 환경에서 실시간 쿼리 문제 해결을 수행할 수 있습니다.

        표 3. 누적 업데이트에 포함된 성능 수정

        증상 열의 설명을 검토하고 해당 환경의 필수 업데이트 열에 필요한 업데이트를 적용합니다. 기술 자료 문서를 검토하여 해당 문제에 대한 자세한 내용을 확인할 수 있습니다. 이러한 권장 사항은 추가 추적 플래그를 시작 매개 변수로 사용하도록 설정할 필요가 없습니다. 이러한 수정 사항을 포함하는 최신 누적 업데이트 또는 서비스 팩을 적용하는 것만으로도 이점을 얻을 수 있습니다.

        참고 항목

        필수 업데이트 열의 CU 이름은 이 문제를 해결하는 SQL Server의 첫 번째 누적 업데이트를 제공합니다. 누적 업데이트에는 이전 SQL Server 업데이트 릴리스에 포함된 모든 핫픽스 및 모든 업데이트가 포함됩니다. 따라서 문제를 해결하기 위해 최신 누적 업데이트를 설치하는 것이 좋습니다.

        증상 필수 업데이트 기술 자료 문서
        임시 테이블에 대한 Select-into 중에 즉시 쓰기를 실행하면 성능 문제가 발생합니다. SQL Server 2012 SP2 CU1
        SQL Server 2012 SP1 CU10
        해결 방법: SQL Server 2012에서 임시 테이블 작업으로 select를 실행할 때 I/O 성능 저하
        쿼리 작업이 중단된 후 ALTER INDEX ... ONLINE 발생 PWAIT_MD_RELATION_CACHE 하거나 MD_LAZYCACHE_RWLOCK 기다립니다. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        해결 방법: ALTER INDEX 이후 성능 저하... SQL Server 2012 또는 SQL Server 2014에서 ONLINE 작업이 중단됨
        제품의 표준 버전에서 쿼리가 갑자기 제대로 수행되지 않습니다. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        해결 방법: SQL Server 2012 또는 SQL Server 2014 Standard Edition에서 스레드가 균등하게 예약되지 않음
        페이지 평균 수명이 급격히 감소하여 성능이 저하됩니다. SQL Server 2012 SP1 CU4 해결 방법: SQL Server 2012에서 성능 문제가 발생할 수 있습니다.
        NUMA 구성, 대용량 메모리 및 "최대 서버 메모리"가 낮은 값으로 설정된 시스템의 리소스 모니터에 의한 높은 CPU 사용량입니다. SQL Server 2012 SP1 CU3 해결 방법: 서버에 SQL Server 2012를 설치한 후 서버에 부하가 없는 경우 CPU 급증
        정렬에 대한 할당 메모리가 많은 메모리가 설치된 시스템에서 연결된 대용량 메모리 부여를 실행하는 동안 생성되지 않는 스케줄러입니다. SQL Server 2012 SP1 CU2 해결 방법: SQL Server 2012 또는 SQL Server 2008 R2에서 CPU가 많고 메모리가 많은 서버에서 쿼리를 실행하는 경우 오류 17883
        정렬 연산자가 메모리가 큰 시스템의 버퍼 풀에 있는 많은 버킷을 트래버스할 때 생성되지 않는 스케줄러입니다. SQL Server 2012 SP1 CU1 해결 방법: SQL Server 2012에서 쿼리를 실행할 때 "Scheduler에서 프로세스가 생성되지 않는 것 같습니다." 오류 메시지
        여러 NUMA 노드 및 많은 코어가 있는 시스템에서 컴파일하는 데 시간이 오래 걸리는 동시 쿼리를 실행할 때 높은 CPU 사용량입니다. SQL Server 2012 SP2 CU1
        SQL Server 2014 RTM CU2
        해결 방법: NUMA 하드웨어의 코어 수가 늘어나고 SQL Server에서 CPU 포화 상태가 발생하면서 쿼리 컴파일 워크로드가 확장되지 않습니다.
        정렬 연산자의 메모리 할당은 원격 노드 할당으로 인해 메모리가 큰 NUMA 시스템에서 완료하는 데 시간이 오래 걸립니다. SQL Server 2012 SP1 CU3 수정: NUMA 환경의 SQL Server 성능 문제
        많은 양의 RAM이 있는 NUMA 컴퓨터에 SQL Server가 설치되고 SQL Server에 많은 외국 페이지가 있는 경우 메모리 부족 오류가 발생합니다. SQL Server 2012 RTM CU1 해결 방법: NUMA를 사용하는 컴퓨터에서 SQL Server 2012 인스턴스를 실행할 때 메모리 부족 오류 발생
        큰 테이블의 공간 데이터 형식에 SOS_CACHESTORE SOS_SELIST_SIZED_SLOCK 대한 인덱스를 작성할 때 스핀 잠금 경합이 발생합니다. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        해결 방법: 큰 테이블의 공간 데이터 형식에 인덱스를 작성할 때 SQL Server 2012 또는 SQL Server 2014의 성능 저하
        큰 테이블의 공간 데이터 형식에 인덱스를 작성할 때 높은 CMEMTHREAD 대기 유형입니다. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        해결 방법: SQL Server 2012 또는 SQL Server 2014 인스턴스에서 큰 테이블의 공간 데이터 형식에 인덱스를 빌드할 때 SQL Server의 성능 저하
        대용량 메모리 컴퓨터에서 SOS_PHYS_PAGE_CACHE 메모리를 할당하는 동안 CMEMTHREAD가 대기하므로 성능 문제가 발생합니다. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        해결 방법: SQL Server 2012 또는 SQL Server 2014의 외부 페이지 처리 중 NUMA 환경에서 성능 문제가 발생합니다.
        CHECKDB 명령은 큰 데이터베이스에 대해 시간이 오래 걸립니다. SQL Server 2014용 누적 업데이트 패키지 6 수정: DBCC CHECKDB/CHECKTABLE 명령은 SQL Server 2012 또는 SQL Server 2014에서 더 오래 걸릴 수 있습니다.

        중요한 참고 사항

        참조

        적용 대상

        • SQL Server 2014 Enterprise
        • SQL Server 2014 Enterprise Core
        • SQL Server 2014 Business Intelligence
        • SQL Server 2014 개발자
        • SQL Server 2014 Standard
        • SQL Server 2014 웹
        • SQL Server 2014 Express
        • SQL Server 2012 Business Intelligence
        • SQL Server 2012 개발자
        • SQL Server 2012 Enterprise
        • SQL Server 2012 Standard
        • SQL Server 2012 웹
        • SQL Server 2012 Enterprise Core