Azure VM에서 SQL Server에 대한 저장소 구성 지침
· Version : Azure VM
Azure Virtual Machines 에서 SQL Server를 사용할 경우 VM 및 SQL Server를 완벽하게 제어하고 SQL Server의 작업 부하를 위한 가장 간단한 클라우드 마이그레이션 경로를 제공한다.
· SQL Server on Virtual Machines : https://azure.microsoft.com/en-us/services/virtual-machines/sql-server/
SQL IaaS Extension은 기본적으로 Azure Market Place를 통해 생성된 각 SQL VM에 설치 된다. SQL IaaS Extension은 백업 관리, 자동 보안 패치, 연결 구성, AKV 통합 및 최적화된 스토리지 구성 기능을 제공한다. Azure Market의 SQL Server 이미지는 작업 부하 유형에 따라 SQL Server 팀이 성능에 맞춰 조절한다. 그러나 SQL Server가 업무상 중요한 서비스를 하는 경우 최적의 저장소 구성은 특정 작업 부하의 I/O 특성 및 요구 사항에 따라 다르다. 이번 포스트는 Azure IaaS에서 수행된 테스트를 기반으로 SQL Server 팀의 지침을 설명한다.
[프리미엄 저장소 및 적절한 크기의 VM 선택]
프리미엄 스토리지는 낮은 대기 시간과 일관된 높은 I/O 성능을 제공하도록 설계되었다. 캐시되지 않은 읽기는 평균 4ms 대기 시간으로 작동하고 캐시되지 않은 쓰기는 VM 당 평균 2ms 대기 시간 및 최대 80,000 IOPS로 작동한다. 또한 예측할 수 없는 작업에서도 호스트의 SSD 기반 BLOB 캐시 기술은 대기 시간이 1ms 미만이며 최대 160,000 IOPS를 제공한다. 따라서 일관된 I/O 성능과 높은 성능으로 인해 Azure VM에서 SQL Server 서비스는 프리미엄 스토리지를 사용할 것을 권장한다.
각 프리미엄 스토리지는VM에 따라IOPS, 대역폭 및 연결할 수 있는 디스크 수에 대한 크기 제한 및 성능 사양이 있다. 예를 들어 표준 DS14_v2 VM크기는 64개의 프리미엄 디스크를 사용하여 최대 51,200 IOPS또는 768MBps의 디스크 처리량을 제공하며 로컬 SSD 및 576GB의 BLOB 캐시를 사용하여 최대 64,000 IOPS또는 512MBps 처리량을 제공한다. 아래 링크에서 모든 VM 크기에 할당된 제한 및 리소스를 확인할 수 있다.
· Memory optimized virtual machine sizes : https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-memory
[읽기가 많은 작업 경우 읽기 전용 캐시를 사용하여 처리량을 향상]
프리미엄 스토리지를 지원하는 Azure VM은 캐싱을 위해 가상 시스템 RAM과 로컬SSD의 조합을 사용하는 다중 계층 캐싱 기술을 사용한다. SQL 서버 작업 부하를 가져오는 읽기 전용 캐시 이득은 작업량 특성에 따라 다르다.
아래의 테스트 결과는 10-P30 디스크가 장착된 DS14_v2 VM에서 최대 50,000 IOPS를 사용하는 OLTP 작업 부하로 테스트했다. 데이터 및 로그 파일은 이 테스트를 위해 10-P30 디스크에서 동일한 저장 영역 풀에 있다.
읽기 80%, 쓰기 20%, 약간의 tempdb를 사용하는 OLTP 작업 부하의 경우 캐시가 없는 동일한 구성에 비해 모든 프리미엄 디스크에 대해 읽기 전용 캐시가 활성화 되었을 때 처리량이 42% 증가했다. 읽기 50%, 쓰기 50%, 약간의 tempdb를 사용하는 OLTP 작업 부하의 경우 캐시가 없는 구성에 비해 읽기 전용 캐시의 처리량이 25% 증가했다.
[데이터 및 로그 파일의 분리]
데이터 및 로그 파일을 분리한 별도의 저장 영역을 사용하여 읽기 전용 캐시의 이득을 최적화 하는 것이 좋다. 캐시가 없는 프리미엄 스토리지 디스크에 로그파일을 호스팅 하면 읽기 작업에 대해서는 호스트 BLOB 캐시의 사용 가능한 공간과 처리량이 절약되어 이점을 극대화 한다. 특히 SQL Server 데이터 파일을 호스팅하는 저장소에 포함될 프리미엄 저장소 디스크에는 읽기 전용 캐시를 사용하는 것이 좋다. 예를 들어 데이터 파일에 총 IOPS 요구사항이 30,000 이라면 모든 디스크에 RO 캐시를 활성화 한 후 6 - P30 디스크 또는 4 - P50 디스크를 스트라이핑 하는것이 좋다.
로그 파일을 호스팅 하는 저장소에 포함될 프리미엄 저장소 디스크는 읽기전용 캐시를 구성하지 않는것이 좋다. 또한 로그 파일의 디스크 처리량 요구 사항이 7500 IOPS 미만인 경우 단일 P50 디스크로 IOPS를 달성할 수 있으므로 로그 파일에 대한 저장소 풀이 필요하지 않다. 특히 작은 호스트 BLOB 캐시가 있는 VM에서SQL Server 작업의 부하가 큰 경우 로그 파일과 데이터 파일을 분리하였을때 테스트에서 상당한 처리량 증가를 보였다. 평균적인 예로 데이터를 호스팅하는것과 비교하여 RO 캐시가 있는 별도의 스토리지 풀에서 호스트되는 캐시 및 데이터 파일이 없는 스토리지 풀에서 로그 파일을 호스팅할 때 쓰기 50% 비율의 OLTP 테스트 경우 총 처리량이 35% 증가했다.
[올바른 크기의 VM 선택 후 로컬 SSD에 tempdb 배치]
VM 크기에 따라 로컬 SSD 및 BLOB 캐시에 대해 최대 대역폭, 최대 처리량 및 크기 제한이 가능한 스토리지 용량을 정의한다. Tempdb 사용량이 높은 업무용 SQL Server의 경우 로컬 SSD에 temp db를 호스팅하면 작업 부하 성능과 처리량에 큰 영향을 준다. VM의 로컬 SSD에 대한 크기, 처리량 및 대역폭 제한이 tempdb IO 요구 사항을 허용해야 한다. 그리고 VM의 호스트 BLOB 캐시 스케일 한계는 로컬 SSD의 읽기 및 호스트 BLOB 캐시 읽기가 발생하는 총 읽기 활동을 허용할 만큼 충분히 커야 한다.
“최대 로컬 디스크 + SSD 캐시 성능” 한계는 로컬 SSD의 읽기 및 쓰기 작업 및 SSD 캐시의 읽기 작업에 대한 최대 작업을 정의한다. tempdb 가 로컬 SSD 디스크에 배치되고 SQL Server 데이터 파일을 호스팅하는 프리미엄 디스크에 RO 캐시가 사용되는 경우 tempdb에서 구동되는 읽기 + 쓰기 IOPS와 RO 캐시의 읽기 IOPS가 공유된다. 예를들어 표준 DS14_v2는 임시 디스크의 크기가 224GB이고 호스트 캐시가 576GB이며 로컬 캐시의 tempdb 활동과 함께 읽기 캐시에 사용할 수 있는 최대 처리량은 64,000 IOPS 및 524MB/s이다.
Storage Optimized L-Series 또는 Memory Optimized M-Series 는 로컬 SSD가 최대 14TB이고 메모리가 최대 4TB 이다. 이러한 서버는 고부하의 SQL Server 작업을 처리하는데 가장 적합하다. 적절한 VM 크기 선택 구성으로 Azure VM의 SQL Server 작업 부하에 대해 미션 크리티컬 성능을 얻을 수 있다.
[참고자료]
2018-10-02 / Sungwook Kang / http://sqlmvp.kr
Azure SQL, Azure VM, BLOB Storage, local SSD, local cache, SQL Server On Azure VM, SQL Server on Azure
출처: https://sqlmvp.tistory.com/1286?category=663684 [Database Lab]