다음을 통해 공유


검사 목록: Azure VM의 SQL Server에 대한 모범 사례

적용 대상: Azure VM 기반 SQL Server

이 문서에서는 Azure VMs(Virtual Machines)에서 SQL Server의 성능을 최적화하기 위한 일련의 지침 및 모범 사례로 빠른 검사 목록을 제공합니다.

자세한 내용은 이 시리즈의 다른 문서(VM 크기, 스토리지, 보안, HADR 구성, 기준 수집)를 참조하세요.

Azure VM의 SQL Server에 대한 SQL 평가를 활성화하면 SQL Server는 Azure Portal의 SQL VM 관리 페이지에서 결과와 함께 알려진 모범 사례에 따라 평가됩니다.

SQL Server VM 성능을 최적화하고 관리를 자동화하는 최신 기능에 대한 비디오는 다음 데이터 노출 비디오를 확인하세요.

개요

Azure Virtual Machines에서 SQL Server를 실행하는 동안 온-프레미스 서버 환경의 SQL Server에 적용할 수 있는 동일한 데이터베이스 성능 튜닝 옵션을 계속 사용합니다. 그러나 퍼블릭 클라우드의 관계형 데이터베이스 성능은 가상 머신의 크기 및 데이터 디스크의 구성과 같은 많은 요인에 따라 달라집니다.

일반적으로 비용에 대한 최적화와 성능에 대한 최적화 간의 절충이 있습니다. 이 성능 모범 사례 시리즈는 Azure Virtual Machines에서 SQL Server에 대한 최상의 성능을 얻는 데 중점을 두었습니다. 워크로드가 적은 경우 모든 권장 최적화 사항이 필요하지 않을 수 있습니다. 이러한 권장 사항을 평가할 때 성능 요구 사항, 비용 및 작업 패턴을 고려하세요.

VM 크기

이 섹션의 체크리스트에서는 Azure VM 기반 SQL Server에 대한 VM 크기 모범 사례를 다룹니다.

  • Ebdsv5 시리즈는 Azure에서 가장 높은 I/O 처리량 대 vCore 비율을 제공하고 메모리 대 vCore 비율은 8입니다. 이 시리즈는 Azure VM의 SQL Server 워크로드에 대해 최고의 가격 대비 성능을 제공합니다. 대부분의 SQL Server 워크로드에 대해 이 시리즈를 먼저 사용하는 것이 좋습니다.
  • E4ds_v5 이상과 같이 vCPU가 4개 이상인 VM 크기를 사용합니다.
  • SQL Server 워크로드의 최고 성능을 위해 메모리가 최적화된 가상 머신 크기를 사용합니다.
  • Edsv5 시리즈와 Ebdsv5 시리즈, Msv3 및 Mdsv3 시리즈는 OLTP 워크로드에 필요한 최적의 메모리 대 vCore 비율을 제공합니다.
  • M 시리즈 VM은 Azure에서 가장 높은 메모리 대 vCore 비율을 제공합니다. 중요 업무용 OLTP 및 데이터 웨어하우스 워크로드에 대해 이러한 VM을 고려합니다.
  • 최적의 성능을 위해 SQL Server 설정 및 스토리지 옵션이 구성되어 있으므로 Azure Marketplace 이미지를 사용하여 SQL Server Virtual Machines를 배포합니다.
  • 대상 워크로드의 성능 특성을 수집하고 수집한 정보를 사용하여 비즈니스에 적합한 VM 크기를 결정합니다.
  • Data Migration AssistantSKU 권장 사항 도구를 사용하여 기존 SQL Server 워크로드에 적합한 VM 크기를 찾습니다.
  • Azure Data Studio를 사용하여 Azure로 마이그레이션합니다.

Warning

NUMA 노드당 64개 코어를 초과하는 시스템에 SQL Server를 설치하는 것은 현재 지원되지 않습니다. 이 제한은 현재 Msv3 및 Mdsv3 중간 메모리 시리즈 내의 Standard_M176s_3_v3 및 Standard_M176s_4_v3 Azure Virtual Machine 크기에 적용됩니다.

스토리지

이 섹션의 체크리스트에서는 Azure VM 기반 SQL Server에 대한 스토리지 모범 사례를 다룹니다.

  • 디스크 유형을 선택하기 전에 애플리케이션을 모니터링하고 SQL Server 데이터, 로그, tempdb 파일에 대한 스토리지 대역폭 및 대기 시간 요구 사항을 결정합니다.
  • 가능한 경우 tempdb D: 로컬 SSD 볼륨에 tempdb 데이터 및 로그 파일을 구성합니다. SQL IaaS 에이전트 익스텐션은 다시 프로비전할 때 필요한 폴더와 권한을 처리합니다.
  • 스토리지 성능을 최적화하기 위해 사용 가능한 캐시되지 않은 최고 IOPS를 계획하고, 가상 머신 및 디스크 상한 설정을 방지하면서 데이터 읽기에 대한 성능 기능으로 데이터 캐싱을 사용합니다.
  • Ebdsv5 또는 Ebsv5 시리즈 SQL Server VM을 사용하는 경우 최고의 가격 대비 성능을 위해 프리미엄 SSD v2를 사용합니다. Azure Portal(현재 프리뷰 상태)을 사용하여 프리미엄 SSD v2가 포함된 SQL Server VM을 배포할 수 있습니다.
  • 데이터, 로그 및 tempdb 파일을 별개의 드라이브에 배치합니다.
    • 데이터 드라이브의 경우 프리미엄 P30 및 P40 디스크 이하를 사용하여 캐시 지원의 가용성을 보장합니다. Ebdsv5 VM 시리즈를 사용하는 경우 높은 IOPS 및 I/O 처리량이 필요한 워크로드에 더 나은 가격 대비 성능을 제공하는 프리미엄 SSD v2를 사용합니다.
    • 로그 드라이브의 경우 프리미엄 SSD v2 또는 프리미엄 SSD P30~P80 디스크를 평가하는 동안 용량 및 테스트 성능과 비용에 대해 계획합니다.
      • 밀리초보다 적은 단위의 스토리지 대기 시간이 필요한 경우 트랜잭션 로그에 프리미엄 SSD v2 또는 Azure Ultra Disks를 사용합니다.
      • M 시리즈 가상 머신 배포의 경우 Azure Ultra Disks를 사용하는 것보다 쓰기 가속기를 사용하는 것이 좋습니다.
    • 최적의 VM 크기를 선택한 후 FCI(장애 조치(failover) 클러스터 인스턴스)의 일부가 아닌 대부분의 SQL Server 워크로드에 대해 임시 디스크(임시 디스크는 임시이며 기본값은 D:\임)에 tempdb를 배치합니다.
      • tempdb를 배치하기에 로컬 드라이브의 용량이 부족한 경우 VM의 크기를 조정하는 것이 좋습니다. 자세한 내용은 데이터 파일 캐싱 정책을 참조하세요.
    • FCI(장애 조치(failover) 클러스터 인스턴스)의 경우 공유 스토리지에 tempdb를 배치합니다.
      • FCI 워크로드가 tempdb 디스크 성능에 크게 의존하는 경우 FCI 스토리지에 있지 않은 로컬 임시 SSD(기본값 D:\) 드라이브에 고급 구성 위치로 tempdb를 배치합니다. 이 구성은 이 드라이브의 오류로 FCI에서 작업을 트리거하지 못하기 때문에 로컬 임시 SSD(기본값 D:\) 드라이브를 항상 사용할 수 있도록 사용자 지정 모니터링 및 작업이 필요합니다.
  • 대상 가상 머신의 최대 IOPS 및 처리량 한계까지 I/O 대역폭을 늘리려면 스토리지 공간을 사용하여 여러 Azure 데이터 디스크를 스트라이프합니다.
  • 데이터 파일 디스크에 대해 호스트 캐싱읽기 전용으로 설정합니다.
  • 로그 파일 디스크에 대해 호스트 캐싱없음으로 설정합니다.
    • SQL Server 데이터 또는 로그 파일이 포함된 디스크에서 읽기/쓰기 캐싱을 사용하도록 설정하지 마세요.
    • 디스크의 캐시 설정을 변경하기 전에 항상 SQL Server 서비스를 중지합니다.
  • 여러 다른 워크로드를 클라우드 로 마이그레이션할 때 Azure Elastic SAN은 비용 효율적인 통합 스토리지 솔루션이 될 수 있습니다. 그러나 Azure Elastic SAN을 사용하는 경우 SQL Server 워크로드에 대해 원하는 IOPS/처리량을 달성하려면 용량을 과도하게 프로비전해야 하는 경우가 많습니다. 일반적으로 단일 SQL Server 워크로드에는 적합하지 않지만 성능이 낮은 워크로드를 SQL Server와 결합할 때 비용 효율적인 솔루션을 얻을 수 있습니다.
  • 개발 및 테스트 워크로드와 장기 백업 보관에는 표준 스토리지를 사용하는 것이 좋습니다. 프로덕션 워크로드에는 표준 HDD/SSD를 사용하지 않는 것이 좋습니다.
  • 크레딧 기반 디스크 버스팅(P1-P20)은 소규모 개발/테스트 워크로드 및 부서 시스템인 경우에만 고려해야 합니다.
  • 스토리지 성능을 최적화하려면 사용 가능한 캐시되지 않은 최고 IOPS를 계획하고, 가상 머신 및 디스크 최대 가용량 사용/제한을 방지하면서 데이터 읽기에 대한 성능 기능으로 데이터 캐싱을 사용합니다.
  • 임시 D:\ 드라이브(기본값은 4KB)가 아닌 드라이브에 배치된 모든 데이터 파일에 대해 64KB 할당 단위 크기를 사용하도록 데이터 디스크의 형식을 지정합니다. Azure Marketplace를 통해 배포된 SQL Server VMs는 할당 단위 크기로 형식이 지정된 데이터 디스크와 함께 제공되고 64KB로 설정된 스토리지 풀에 인터리빙됩니다.
  • SQL Server VM과 동일한 하위 지역에 스토리지 계정을 구성합니다.
  • Azure 지역 중복 스토리지(지역에서 복제)를 사용하지 않도록 설정하고 스토리지 계정에서 LRS(로컬 중복 스토리지)를 사용합니다.
  • SQL 모범 사례 평가를 사용하도록 설정하여 발생 가능한 성능 문제를 식별하고 SQL Server VM이 모범 사례를 따르도록 구성되어 있는지 평가합니다.
  • 스토리지 IO 사용률 메트릭을 사용하여 디스크 및 VM 한도를 검토하고 모니터링합니다.
  • 바이러스 백신 소프트웨어 검사에서 데이터 파일, 로그 파일, 백업 파일을 포함한 SQL Server 파일을 제외합니다.

보안

이 섹션의 검사 목록에서는 Azure VM의 SQL Server에 대한 보안 모범 사례를 다룹니다.

SQL Server 기능은 인프라 수준의 보안 기능과 결합할 수 있는 데이터베이스 수준에서 데이터를 보호하는 방법을 제공합니다. 이러한 기능을 함께 사용하면 클라우드 기반 및 하이브리드 솔루션에 대해 인프라 수준에서 심층적으로 방어할 수 있습니다. 또한 Azure 보안 측정값을 사용하여 중요한 데이터를 암호화하고, 바이러스 및 맬웨어로부터 가상 머신을 보호하고, 네트워크 트래픽을 보호하고, 위협을 식별 및 검색하고, 규정 준수 요구 사항을 충족하고, 하이브리드 클라우드의 모든 보안 요구 사항에 대한 단일 관리 및 보고 방법을 제공합니다.

  • 클라우드용 Microsoft Defender를 사용하여 데이터 환경의 보안 태세를 평가하고 작업을 수행합니다. Azure ATP(Advanced Threat Protection)과 같은 기능은 하이브리드 워크로드 전반에 걸쳐 사용되어 보안 평가를 개선하고 위험에 대응할 수 있는 기능을 제공할 수 있습니다. SQL IaaS 에이전트 확장으로 SQL Server VM을 등록하면 Azure Portal의 SQL 가상 머신 리소스 내에서 클라우드용 Microsoft Defender 평가가 표시됩니다.
  • SQL용 Microsoft Defender를 사용하여 잠재적인 데이터베이스 취약성을 발견 및 완화하고 SQL Server 인스턴스 및 데이터베이스 계층에 위협이 될 수 있는 비정상적인 작업을 검색합니다.
  • 취약성 평가는 SQL Server 환경에 대한 잠재적인 위험을 발견하고 수정할 수 있는 SQL용 Microsoft Defender의 일부입니다. 보안 상태에 대한 표시 유형을 제공하고 보안 문제를 해결하기 위한 실행 가능한 단계를 포함합니다.
  • Azure 기밀 VM을 사용하여 호스트 운영자 액세스에 대해 사용 중인 데이터 및 미사용 데이터 보호를 강화합니다. Azure 기밀 VM을 사용하면 중요한 데이터를 클라우드에 안전하게 저장하고 엄격한 규정 준수 요구 사항을 충족할 수 있습니다.
  • SQL Server 2022를 사용하는 경우 Microsoft Entra 인증을 사용하여 SQL Server 인스턴스에 연결하는 것이 좋습니다.
  • Azure Advisor는 리소스 구성 및 사용량 원격 분석을 수행한 다음, Azure 리소스의 비용 효율성, 성능, 고가용성 및 보안을 향상시키는 데 도움이 되는 해결 방법을 권장합니다. 가상 머신, 리소스 그룹 또는 구독 수준에서 Azure Advisor를 사용하여 모범 사례를 식별하고 적용하여 Azure 배포를 최적화합니다.
  • 규정 준수 및 보안상의 이유로 임시(로컬로 연결된 임시) 디스크의 암호화를 포함하여 암호화 키를 사용하여 데이터를 엔드투엔드 암호화해야 하는 경우 Azure Disk Encryption을 사용합니다.
  • Managed Disks는 기본적으로 Azure Storage 서비스 암호화를 사용하여 암호화됩니다. 여기서 암호화 키는 Azure에 저장된 Microsoft 관리형 키입니다.
  • 관리 디스크 암호화 옵션을 비교하려면 관리 디스크 암호화 비교 차트를 검토합니다.
  • 가상 머신에서 관리 포트를 닫아야 합니다. - 열린 원격 관리 포트는 VM을 인터넷 기반 공격으로 인한 높은 수준의 위험에 노출시킵니다. 이러한 공격은 자격 증명을 무차별적으로 대입하여 머신에 대한 관리자 액세스 권한을 획득하려고 시도합니다.
  • Azure Virtual Machines에 대해 JIT(Just-in-time) 액세스를 켭니다.
  • RDP(원격 데스크톱 프로토콜)를 통해 Azure Bastion을 사용합니다.
  • 원래 IP 주소를 기반으로 서버 액세스를 허용/거부하는 관리 FaaS(Firewall as a Service)인 Azure Firewall을 사용하여 포트를 잠그고 필요한 애플리케이션 트래픽만 허용합니다.
  • NSG(네트워크 보안 그룹)를 사용하여 Azure Virtual Networks에서 Azure 리소스로 들어오고 나가는 네트워크 트래픽 필터링
  • 애플리케이션 보안 그룹을 사용하여 웹 서버 및 데이터베이스 서버와 같은 유사한 기능을 가진 유사한 포트 필터링 요구 사항과 함께 서버를 그룹화합니다.
  • 웹 및 애플리케이션 서버의 경우 Azure DDoS(분산 서비스 거부) 보호를 사용합니다. DDoS 공격은 네트워크 리소스를 압도하고 고갈시키도록 설계되어 앱이 느려지거나 응답하지 않습니다. DDoS 공격은 일반적으로 사용자 인터페이스를 대상으로 합니다. Azure DDoS 보호는 서비스 가용성에 영향을 미치기 전에 원치 않는 네트워크 트래픽을 삭제합니다.
  • VM 익스텐션을 사용하여 맬웨어 방지, 원하는 상태, 위협 탐지, 예방 및 치료를 처리하여 운영 체제, 컴퓨터 및 네트워크 수준에서 위협을 처리합니다.
  • Azure Policy를 사용하여 환경에 적용할 수 있는 비즈니스 규칙을 만듭니다. Azure 정책은 해당 리소스의 속성을 JSON 형식으로 정의된 규칙과 비교하여 Azure 리소스를 평가합니다.
  • 클라우드 설계자와 중앙 정보 기술 그룹은 Azure Blueprints를 통해 조직의 표준, 패턴 및 요구 사항을 구현하고 준수하는 반복 가능한 Azure 리소스 집합을 정의할 수 있습니다. Azure Blueprints는 Azure 정책과 다릅니다.
  • Windows Server 2019 또는 Windows Server 2022를 사용하여 Azure VM의 SQL Server와 FIPS를 준수합니다.

SQL Server 기능

다음은 프로덕션 환경의 Azure 가상 머신에서 SQL Server 인스턴스를 실행할 때 SQL Server 구성 설정의 모범 사례에 대한 간략한 검사 목록입니다.

사용하여 매핑

다음은 Azure VM에서 SQL Server를 실행할 때 Azure 관련 지침에 대한 모범 사례의 빠른 검사 목록입니다.

HADR 구성

이 섹션의 체크리스트에서는 Azure VM 기반 SQL Server에 대한 HADR 모범 사례를 다룹니다.

Always On 가용성 그룹장애 조치(failover) 클러스터 인스턴스와 같은 HADR(고가용성 및 재해 복구) 기능은 기본 Windows Server 장애 조치(Failover) 클러스터 기술을 사용합니다. 클라우드 환경을 더 잘 지원하기 위해 HADR 설정을 수정하기 위한 모범 사례를 검토합니다.

Windows 클러스터의 경우 모범 사례를 고려합니다.

  • 트래픽을 HADR 솔루션으로 라우팅하는 Azure Load Balancer 또는 DNN(분산 네트워크 이름)에 대한 종속성을 방지하기 위해 가능한 경우 SQL Server VM을 여러 서브넷에 배포합니다.
  • 일시적인 네트워크 실패 또는 Azure 플랫폼 유지 관리로 인한 예기치 않은 중단을 방지하기 위해 덜 적극적인 매개 변수로 클러스터를 변경합니다. 자세히 알아보려면 하트비트 및 임계값 설정을 참조하세요. Windows Server 2012 이상에서는 다음 권장 값을 사용합니다.
    • SameSubnetDelay: 1초
    • SameSubnetThreshold: 하트비트 40개
    • CrossSubnetDelay: 1초
    • CrossSubnetThreshold: 40개 하트비트
  • VM을 가용성 집합 또는 다른 가용성 영역에 배치합니다. 자세한 내용은 VM 가용성 설정을 참조하세요.
  • 클러스터 노드당 단일 NIC를 사용합니다.
  • 클러스터 쿼럼 투표를 구성하여 3개 이상의 홀수 투표를 사용합니다. DR 지역에 투표를 할당하지 마세요.
  • 리소스 제약으로 인한 예기치 않은 재시작 또는 장애 조치(failover)를 방지하기 위해 리소스 제한을 신중하게 모니터링합니다.
    • OS, 드라이버 및 SQL Server가 최신 빌드인지 확인합니다.
    • Azure VM에서 SQL Server에 대한 성능을 최적화합니다. 자세히 알아보려면 이 문서의 다른 섹션을 검토합니다.
    • 리소스 제한을 방지하기 위해 워크로드를 줄이거나 분산합니다.
    • 제약을 방지하기 위해 제한이 더 높은 VM이나 디스크로 이동합니다.

SQL Server 가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스의 경우 다음 모범 사례를 고려합니다.

  • 예기치 않은 오류가 자주 발생하는 경우 이 문서의 나머지 부분에서 설명하는 성능 모범 사례를 따릅니다.
  • SQL Server VM 성능 최적화로 예기치 않은 장애 조치(failover)가 해결되지 않는 경우 가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스에 대한 모니터링 완화를 고려합니다. 하지만 문제의 근본 원인이 해결되지 않을 수 있고 오류 발생 가능성을 줄여 증상을 일시적으로 덮는 데 그칠 수 있습니다. 계속해서 근본 원인을 조사하고 해결해야 할 수 있습니다. Windows Server 2012 이상에서는 다음 권장 값을 사용합니다.
    • 임대 시간 제한: 이 등식을 사용하여 최대 임대 시간 제한 값을 계산합니다.
      Lease timeout < (2 * SameSubnetThreshold * SameSubnetDelay).
      40초부터 시작합니다. 이전에 권장되었던 완화된 SameSubnetThresholdSameSubnetDelay 값을 사용하는 경우 임대 시간 제한 값이 80초를 초과해서는 안 됩니다.
    • Max failures in a specified period(지정된 기간의 최대 실패 횟수) : 이 값을 6으로 설정합니다.
  • VNN(가상 네트워크 이름) 및 Azure Load Balancer를 사용하여 HADR 솔루션에 연결하는 경우 클러스터가 하나의 서브넷에만 걸쳐 있는 경우에도 연결 문자열에서 MultiSubnetFailover = true를 지정합니다.
    • 클라이언트에서 MultiSubnetFailover = True를 지원하지 않는 경우 RegisterAllProvidersIP = 0HostRecordTTL = 300을 설정하여 더 짧은 기간 동안 클라이언트 자격 증명을 캐시해야 할 수 있습니다. 하지만 이렇게 하면 DNS 서버에 추가 쿼리가 발생할 수 있습니다.
  • DNN(분산형 네트워크 이름)을 사용하여 HADR 솔루션에 연결하려면 다음 사항을 고려합니다.
    • MultiSubnetFailover = True를 지원하는 클라이언트 드라이버를 사용해야 하고, 이 매개 변수가 연결 문자열에 있어야 합니다.
    • 가용성 그룹의 DNN 수신기에 연결할 때 연결 문자열에서 고유한 DNN 포트를 사용합니다.
  • 기본 가용성 그룹에 대한 데이터베이스 미러링 연결 문자열을 사용하여 부하 분산 장치 또는 DNN에 대한 필요성을 무시합니다.
  • 불일치 I/O가 발생하지 않도록 고가용성 솔루션 배포 전에 VHD의 섹터 크기를 확인합니다. 자세히 알아보려면 KB3009974를 참조하세요.
  • SQL Server 데이터베이스 엔진, Always On 가용성 그룹 수신기 또는 장애 조치(failover) 클러스터 인스턴스 상태 프로브가 49,152~65,536(TCP/IP의 기본 동적 포트 범위) 사이의 포트를 사용하도록 구성된 경우 각 포트에 대한 제외를 추가합니다. 이렇게 하면 다른 시스템에 동적으로 동일한 포트가 할당되는 것을 방지할 수 있습니다. 다음 예에서는 포트 59999에 대한 제외를 만듭니다.
    netsh int ipv4 add excludedportrange tcp startport=59999 numberofports=1 store=persistent

성능 문제 해결

다음은 SQL Server 성능 문제를 추가로 해결하는 데 도움이 되는 리소스 목록입니다.

Azure VM에서 SQL Server에 대한 SQL 평가 활성화를 고려합니다.

Azure Virtual Machines의 SQL Server 개요에서 다른 SQL Server 가상 머신 문서를 검토하세요. SQL Server 가상 머신에 대한 질문이 있으면 질문과 대답을 참조하세요.