데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL Server 가상화 팁

jevida(강성욱) 2016.10.08 06:52 Views : 2019

SQL Server 가상화 팁

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

최근 들어 가상화 기술지원이 강화 되면서 기존의 스케일 아웃(scale out) 설계에서 스케일 업(scale up) 설계로 많이 바뀌고 있는 추세이다. 스케일 아웃과 스케일 업 중 어떤 디자인이 좋을까? 누구나 할 수 있는 대답이지만 정답은 없다. 다만 한정적인 자원에서 효율적인 성능을 발휘 할 수 있도록 설계하는 것이 정답이라 생각한다.

 

일반적으로 패션에서도 유행은 10년 주기로 반복된다는 말이 있듯이 IT의 흐름을 보면 시스템 디자인에 대한 트렌드 또한 라이프사이클이 있는 듯 하다. 한 때는 각 서버를 기능별로 분리하여 확장하는 형태가 유행 하였다고 하면 최근에는 하드웨어의 발달과 가상화 기술의 발달로 확장 되었던 시스템을 통합하는 것이 유행이다.

 

이번 시간에는 SQL Server 가상화에 대해서 다루어 보려고 한다. 사실 SQL Server의 가상화 사용에 대해서는 그 동안 많은 이슈들이 있었다. 데이터베이스에서는 가장 중요한 것이 데이터이다. 가상화 환경에서의 데이터 안정성, 시스템 성능, 기타 여러 가지 이슈들에 대해서 많은 고민이 있었다. 현재에는 가상화에 대한 기술적 안정성 및 수 많은 레퍼런스 확보 등을 통하여 노하우 및 기술 팁이 많이 공개되어 있으며 다양한 기술지원이 가능하여 새롭게 검토해 볼 필요가 있을 듯 하다.

 

가상화를 검토 하고 있다면 가상화 할 때 주의하여야 사항에 대해서 알아보자. (설치 방법에 대해서는 다루지 않는다.) 이번 포스트는 SQL Server Pro에 게시된 글로 필자가 읽고 이해한 내용을 바탕으로 정리 하였다. 자세한 내용은 원문을 참고 하길 바란다.

 

아직도 많은 사람들은 SQL Server가 가상머신(VM) 환경에서 실행 할 수 없다고 생각한다. 하지만 SQL Server는 매우 성공적으로 VM 환경에서 실행 할 수 있다. 하지만 자원 집약적인 특성으로 인하여 주의하여야 할 몇 가지 사례가 있다.

 

[SLAT(Second Level Address Translation, 두 번째 레벨 주소 변환)의 활용)]

베어 메탈 가상화를 지원하는 VMware의 vSphere와 Microsoft의 Hyper-V 같은 플랫폼에서 호스트가 64비트 x64 프로세서를 사용하는지 확인 해야 한다. 이것은 AMD 또는 Intel 프로세서 중 하나가 될 수 있다.

 

SQL Server처럼 리소스 집약적인 워크로드는 호스트 프로세서 두 번째 레벨 주소 변환을 지원하는 것이 매우 중요하다. SLAT(Second Level Address Translation)는 CPU 제조업체에 따라 다른 이름으로 알려져 있다. Intel은 그것을 확장 페이지(Extended Page Tables) 테이블이라 부르며 AMD는 중첩 된 페이지(Nested Page Tables) 테이블이나 또는 고속 가상화 인덱싱(Rapid Virtualization Indexing) 이라 부른다.

 

VM은 호스트의 물리적 메모리를 사용하고 SLAT 메커니즘은 CPU를 사용하여 VM에 사용되는 가상 메모리와 가상화 호스트의 물리적 메모리간의 매핑을 유지한다. 이 메모리 매핑 기능이 CPU에 의해 수행되지 않는 경우 하이퍼바이저가 수행해야 한다. CPU가 메모리 매핑을 기능을 수행하는 것이 더 나은 성능과 항상된 확장성을 제공한다. Microsoft의 연구에 의하면 SLAT사용은 하이퍼바이저의 오버헤드를 2% 정도 줄이고 VM을 실행시 VM 하나에 약 1MB 하여 호스트 메모리를 줄일 수 있는 결과가 나타났다.

 

아래 그림은 VM성능을 개선하기 위해 SLAT가 어떻게 작동하는지 개요를 확인 할 수 있다.

 

대부분의 최신 서버 플랫픔은 SLAT가 지원된는 x64 프로세서를 갖추고 있다.

 

 

[Don't Overcommit Your Physical Processors]

SQL Server는 자동으로 여러 개의 CPU를 효율적으로 활용 할 수 있다. 물리적 SQL Server 환경에서 가상 SQL Server 환경으로 마이그레이션하는 경우 VM 환경에서 가상 CPU 수에 대한 가이드는 물리적 CPU 수를 사용 할 수 있다. SQL Server를 새로 구현하여 사용하는 경우 응용프로그램 공급업체의 조언을 따르거나 가상 인스턴스 내에서 CPU 사용률을 추적하는 성능 모니터를 사용한다.

 

SQL Server 처럼 높은 확장성을 요구하는 가상화 플랫폼에서 인스턴스를 구현하는 경우 차이가 있다. Windows Server 2008 및 Windows Server 2008 R2의 Hyper-V는 4개의 가상 CPU로 제한 된다. 이런 경우에는 가상화 플랫폼에서 SQL Server 인스턴스가 사용하는 CPU에 대해서 제약이 발생하게 된다. VMware의 vSphere 5.0 버전 에서는 32개의 가상 CPU를 지원하며 5.1 버전에서는 64개를 지원한다. 높은 CPU가 필요한 경우에는 Windows Server 2012 Hyper-V를 사용하거나 vSphere 5.0 이상을 사용하여야 한다.

 

 

[Use Dynamic Memory]

메모리는 SQL Server 성능에 가장 큰 요인 중의 하나이다. SQL Server는 내부 버퍼 및 프로시저 캐시 메모리를 사용한다. 프로시저 캐시는 최근 실행 된 T-SQL 명령을 포함하며 버퍼 캐시는 최근에 사용된 데이터가 포함되어 있다. 캐시는 디스크로 가는 I/O 오버헤드를 줄이기 때문에 SQL Server의 높은 수준의 성능을 달성 할 수 있다. SQL Server는 워크로드 및 사용 가능한 최대 메모리의 요구 사항에 기초하여 버퍼와 프로시저 캐시를 자동으로 관리한다. 따라서 사용 가능한 메모리를 최대한 많이 가지고 있는 것이 성능에 매우 유리하다.

 

그러나 과도한 메모리 할당은 특정 시점에만 도움된다. 또한 가상 서버 환경에서 물리적 메모리 제한은 VM에게 한번에 활성화 할 수 있다. 동적 메모리는 메모리와 가상 머신 사이에 동일한 물리적 메모리 공유가 필요한 SQL Server의 요구에 훌륭한 솔루션을 제공한다.

 

SQL Server가 동적 메모리를 활용하기 위해 게스트 OS는 Hot Add RAM 을 인식 할 수 있어야 한다. Hyper-V에서 동적 메모리를 사용하려면 호스트는 Windows Server 2008 R2 SP1 이상을 사용해야 한다. VMware의 경우 게스트 OS는 Hot Add RAM기능을 지원해야 한다.

 

다음 게스트 OS에서 Hyper-V 동적 메모리를 활용 할 수 있다.

  • Windows Server 2012
  • Windows Server 2008R2 SP1
  • Windows Server 2008 SP2
  • Windows Server 2003 R2 SP2
  • Windows 8
  • Windows 7 SP1
  • Windows Vista SP1

 

새 메모리는 게스트 VM에 할당 될 때 SQL Server 인스턴스 핫 애드 물리적 메모리처럼 보인다. Ssqlservr.exe를 프로세스에 할당하고 OS에서 메모리를 커밋한다.

 

SQL Server 워크로드 sqlserver.exe 프로세스가 증가하는 원인은 SQL Server가 추가 메모리를 감지하고 워크로드 수용을 충족하기 위해 증가한다. SQL Server는 OS메모리를 매초마다 확인하고 동적으로 사용 가능한 메모리와 최대 서버 메모리 설정에 따라 메모리를 조정한다.

 

 

다음 그림은 Microsoft에서 VM환경의 SQL Server 비교 실시한 부하테스트 이다. 한 세트당 정적 메모리7.5GB VM 8세트와 와 동적 메모리는 시작 시 2GB에서 최대 12GB로 설정한 8세트이다. SQL Server에 12500 배치를 실행하였으며 동적 메모리에서 평균 7500 IOPS, 정적 메모리에서 12000 IOPS 결과를 나타내었다. 즉 동적 메모리는 정적 메모리의 60^정도 처리량을 지원하였다.

 

 

검은 선은 SQL Server의 버퍼풀 메모리, 녹색선은 디스크의 초당 읽기 수 이다. 테스트 결과를 보면 시작 시 읽기 숫자가 매우 높은 것을 볼 수 있지만 추가 메모리가 VM에 할당되면서 버퍼풀 크기가 증가한 것을 볼 수 있다. 그 결과로 디스크의 읽기 수는 50% 정도로 감소 한다.

 

SQL Server가 메모리를 사용하는 동안 OS는 메모리 부족 신호를 보내면 SQL Server는 캐시를 축소 한다. 이 시도는 다른 VM에 OS가 SQL server 작업 도중 사용할 수 있는 게스트의 메모리가 감소한다. 이는 SQL Server 성능에 매우 부정적인 영향을 미칠 수 있다. 이런 현상을 방지하기 위해 Microsoft는 SQL Server의 페이지 아웃을 보장하기 위해 SQL Server Lock Page In Memory를 설정하는 것이 좋다.

 

동적 메모리는 가상화 자원을 보다 효율적으로 사용학 위한 유용한 도구 이지만 성능 문제에 대해서는 여러 가지 상황에 대해 고민해 보아야 한다.

 

 

[Use Fixed Virtual Hard Disks or Pass-Through Disks]

VM에서 사용할 수 있는 가상 하드 디스크(VHD)의 세 가지 기본 유형이 있다.

  • Dynamic : 동적 VHD는 실제 게스트 OS의 스토리지 요구 사항에 따라 초기 크기에서 최대 크기에 도달 할 때까지 스토리지 요구사항에 동적으로 확장 할 수 있다.
  • Fixed : 고정 VHD는 최대 크기가 처음부터 할당 된다.
  • Differencing disk : VHD는 처음에 부모 역할 할 기본 이미지를 사용하여 만들어 지며 필요에 따라 서로 다른 자식 디스크를 만들 수 있다. 자식 디스크는 기본적으로 부모 디스크를 사용하지만 각 자식 디스크는 독립적으로 변경 유지 된다.

 

고정 디스크는 최상의 워크로드를 실행하기 위한 최적의 선택이다. 고정 VHD는 많은 스토리지를 사용하지만 최고의 성능을 제공한다.

 

동적 VHD는 디스크 공간을 더 적게 사용하지만 실행 중인 워크로드에서 동적 디스크를 확장 해야 할 때 순간적으로 멈추는 현상이 발생 할 수도 있다.

 

Differencing disk는 테스트 환경에서만 적합하다. 적은 스토리지를 사용하지만 성능 또한 매우 낮기 때문이다.

 

VM에 존재하는 또 다른 스토리지 옵션은 Pass-Through이다. 이는 VHD에 대한 대안이다. 패스 스루는 직접 VM에 호스트의 스토리지를 할당한다. 스토리지는 Hyper-V의 내부 물리적 스토리지가 될 수 있거나 가상화 서버에 매핑 된 SAN의 LUN에 있을 수 있다. VM에 대한 디스크 스토리지의 최고 수준의 성능을 제공 한다. 히지만 고정 VHD와 같은 유연성을 가지고 있지 않으며 디스크 정지 없이 이동은 불가능 하다 또한 VM 스냅샷을 지원하지 않는다.

 

일반적으로 가장 좋은 방법은 여분의 비트를 사용해야 하는 경우가 아니면 고정 VHD를 사용하는 것이다.

 

[Don't Use the Default Storage Configuration]

일반적인 물리적인 서버와 같이 가상 디스크 구성은 SQL Server의 성능에 많은 영향을 미칠 수 있다. vSphere나 Hyper-V가 제공하는 기본 스토리지 구성을 사용하는 경우 기본 구성을 저장하기 위해 VHD를 사용하기 때문에 낮은 효율성을 나타낼 가능성이 있다. 즉 OS, MDF, LDF 등 모든 파일이 동일한 VHD에 사용한다는 뜻이다. 높은 트랜잭션에 대하여 경합이 발생 한다.

 

고성능의 환경에서는 다른 VHD 또는 Pass-Through로 데이터 파일 및 로그를 배치하는 것이 중요하다. 공유 스토리지를 사용하는 경우 물리적 디스크 구현을 인식하고 디스크가 분리되어 있는지 확인 하는 것도 중요하다. 다음 그림은 가상 스토리지 유형의 예시이다.

 

 

 

[라이선스]

라이선스는 에디션 또는 버전에 따라 다르게 적용 되므로 자세히 다루지는 않는다. 항상 도입 전 라이선에 대한 검토를 반드시 하여 추가 비용이나 도입 비용에 대하여 비효율적인 상황이 발생하지 않도록 해야 한다.

 

 

가상화를 계획하고 있다면 다양한 사례와 문서를 살펴보고 우리의 비즈니스 환경에 적용되는지 많은 검토가 필요하다.

 

[참고자료]

 

  • Running SQL Server with Hyper-V Dynamic Memory(Best Practices and Considerations) :

http://msdn.microsoft.com/en-us/library/hh372970.aspx

 

 


강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1873 SQL Server IO and Latch 설명 jevida(강성욱) 2016.10.11 3175
1872 마지막 백업 시간 및 DBCC 확인 [1] jevida(강성욱) 2016.10.08 1592
1871 DMV를 활용한 CPU 트러블슈팅 - Sys.dm_exec_query_stats, sys.dm_os_ring_buffers 활용 [1] jevida(강성욱) 2016.10.08 1907
1870 백업 미디어 세트에 압축 백업 추가하기 jevida(강성욱) 2016.10.08 1454
1869 Collation에 따른 실행계획 변경과 성능 문제 jevida(강성욱) 2016.10.08 1668
1868 SQL Connection Timeout 디버깅 with BizTalk Server jevida(강성욱) 2016.10.08 2282
1867 인스턴스 파일 초기화 활성 jevida(강성욱) 2016.10.08 1712
1866 누락된 인덱스 확인하기 jevida(강성욱) 2016.10.08 2876
1865 비클러스터 인덱스 페이지 내용 jevida(강성욱) 2016.10.08 2011
1864 ATTACH DATABASE 오류 1314 jevida(강성욱) 2016.10.08 1161
1863 SQL Server 커넥션 풀링 jevida(강성욱) 2016.10.08 4065
1862 가상 SQL Server에 Hot Add vCPU 사용하기 jevida(강성욱) 2016.10.08 1112
1861 DDL 트리거를 활용한 ERRORLOG에 XEVENT 상태 기록하기 jevida(강성욱) 2016.10.08 1348
1860 쉐어포인트의 SQL Server 접속 문제 jevida(강성욱) 2016.10.08 1447
1859 Lazy Log Truncation jevida(강성욱) 2016.10.08 1290
1858 인덱스 구성과 상황에 따른 인덱스 성능 jevida(강성욱) 2016.10.08 1464
1857 Max worker thread 초과 이슈 jevida(강성욱) 2016.10.08 2673
1856 SQL Server Failover 클러스터 설치 트러블슈팅 jevida(강성욱) 2016.10.08 2344
1855 MAXDOP 극대화 하기 jevida(강성욱) 2016.10.08 2031
» SQL Server 가상화 팁 jevida(강성욱) 2016.10.08 2019





XE Login