파티션 오프셋과 SQL Server에 대한 디스크 할당 단위 크기
하드웨어에 대한 리뷰를 쓴다는 것은 매우 어려운 일이다. 특히 벤치마크 테스트를 통한 성능을 측정한다는 것은 개인이 하기엔 거의 불가능 하리라 생각한다.(그래서 대부분 벤더의 공식 문서를 참고한다.) 따라서 이 글은 어떤 공식적인 문서나 테스트 방법을 포함하고 있지 않으며 지극히 나의 주관적인 생각을 정리한 것임을 밝혀 둔다.
SQL Server에서 디스크는 가장 중요한 자원중의 하나이다. 특히 성능에 있어서 가장 영향을 많이 받는 부분이 디스크라 생각한다. (자원 중에 가장 느리다.) 우리는 여러 해 동안 서비스를 하면서 디스크에 대한 고민을 많이 해왔다.
SQL Server의 성을 최대화 화기 위해 드라이브의 파티션 오프셋은 어떻게 설정 하면 좋을까? 또 시스템 파티션 오프셋이 어떻게 설정되어 있을까? 이번 시간을 통해 알아 보자.
MS SQL Server에서는 데이터를 저장하는 최소 단위는 Page이며 8개의 Page가 1개의 Extent를 구성한다. Page 의 크기는 8K 이며 Extent의 크기는 8*8Page = 64K 이다. 여기서 IO의 최소 입출력 단위는 Extent이므로 64K가 된다.
그렇다면 SQL Server를 사용하는 모든 디스크의 오프셋 값을 64K로 맞추면 되는가? 정답은 없다. 시스템의 특성 (OLTP, OLAP)에 따라 다르며 하드웨어의 구성과 벤더에 따라 다양한 조합이 가능하기 때문이다.
디스크 파티션 및 정렬에 관한 내용은 마이크로소프트의 공식문서를 참고 하길 바란다.
Windows 2003 disk Partition tool : http://support.microsoft.com/kb/923076/en-us?wa=wsignin1.0
할당 단위 크기에 대해서 알아 보자, 할당 단위 크기는 FORMAT 명령에 의해 설정 되며 클러스터 사이즈이다. Windows는 512byte, 1024byte, 2048byte, 4096byte 8192byte 16K, 32K, 64L를 지원한다. FORMAT시 특별한 설정을 하지 않으면 기본 4096byte로 클러스터가 할당 된다.
[fsutil] 명령어를 사용하여 할당 단위 크기를 확인 해 보자.
커맨드 창에서 [fsutil] 명령어를 입력하면 명령어 옵션이 나타난다. 여기에서 필요한 명령어를 조합하여 사용 하면 된다.
다음과 같이 [fsutil fsinfo ntfsinfo d:]를 입력하여 [D:\]드라이브의 디스크 할당 단위를 확인 하자.
현재 클러스터는 4096으로 할당 되어 있다. (Windows 7, 기본 포맷)
디스크 오프셋을 확인해 보자, 우리가 잘 알고 있는 [diskpart] 명령어를 사용한다. 현재 [D:\]의 오프셋을 보면 1024K로 설정되어 있는 것을 확인 할 수 있다. Windows Vista이상 , Windows Server 2008이상은 기본 오프셋이 1024로 되어 있다고 한다.
파티션 오프셋에 대한 정확한 정보는 [wmic] 명령어를 사용하여 확인 할 수 있다. 디스크 번호와 파티션 번호를 주의하여 확인 해야 한다.
SQL Server를 운영하는데 있어서 파티션 및 오프셋 그리고 파티션 정렬은 디스크의 성능에 큰 영향을 행사하므로 나의 시스템과 디스크 옵션을 통하여 최적의 성능이 나올 수 있도록 고민해 보자.
참고로 파티션 오프셋 및 할당 단위 크기는 포맷 할 때 정할 수 있으므로 다운 타임을 피할 수 없다. 신규 서버 추가 도입에 사용하면 좋을 듯 하다.
[시나리오]
- 데이터 백업
- 드라이브 삭제
- 파티션 정렬
- 파티션 포맷
- 백업 데이터 복원
2012-11-30 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server에서 DB2 링크드 서버 연결 방법 (0) | 2015.07.17 |
---|---|
SQL Server 인덱스 활성 / 비활성 하기 (0) | 2015.07.17 |
Disk Partition Alignment Best Practices Whitepaper for SQL Server (0) | 2015.07.17 |
Read the End of a Large Error Log (에러로그 끝 부분 읽기) (0) | 2015.07.17 |
데이터베이스 여유공간 확인 (0) | 2015.07.17 |