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

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

디스크 섹터 크기와 데이터베이스 성능

 

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

 

디스크 섹터와 데이터베이스는 어떤 관계가 있을까? 디스크 섹터와 구조에 대해서 궁금하다면 다음 링크를 참고 한다.

 

이번 포스팅의 초점은 필자가 생각하기엔 조금 오래된 내용이긴 하지만 많은 분들이 고민 하였던 내용이며 매우 중요한 이슈라 생각 한다. (아직 이 사실을 모르고 있다면 IT 소식에 관심을 가지도록 하자)

 

2010년쯤 세계적인 하드디스크 제조사인 씨게이트(http://www.seagate.com/)에서 포맷 방식을 변경한다고 하였다. 글을 쓰는 지금쯤이면 변경된 포맷방식이 정착되었을 시기이기도 하다.

 

내용을 요약해 보면 하드디스크는 데이터를 저장하기 위해 기본 단위로 섹터를 사용하는데 보통 512B로 나누어져 있고 에러 수정코드를 가지고 있다. 이 단위를 8개 합쳐서 4K 섹터를 만들고 ECC 하나만 배치하여 물리적인 공간을 늘리고 액세스 횟수를 줄임으로써 성능을 높인다고 한다.

 

 

그렇다면 DBA 및 SE는 어떤 고민이 들까? 데이터를 관리하는 나의 입장에서는 "단순히 용량이 커지고 속도가 빨라지는구나" 라는 생각만 들지 않을 것이다.

 

쉽게 말해 물리적 데이터 저장소 구조가 변경된다는 것인데 그렇다면 기존의 512B 섹터의 구조에 최적화 되어 있던 소프트웨어들이 잘 적응할까 라는 고민을 해보아야 한다. 내가 운영하는 데이터베이스의 저장단위는 어떻게 되는지? 기존 섹터 크기에서 변경되면 데이터 저장 시 아무런 문제가 없을까? 라는 의문을 가져야 한다.

 

이 이슈와 관련해서 Microsoft CSS SQL Server Engineer 팀블로그에 정리된 내용을 확인 할 수 있었다. 자세한 내용은 하단의 링크를 참고하여 원문을 확인 하길 바란다. 필자가 이해한 내용을 바탕으로 요약 하였기 때문에 번역의 오류나 기술적인 오류가 있을 수 있음을 인지 한다.

 

[SQL Server - New Drives Use 4K Sector Size]

이 아티클에서는 512e(512byte sector size emulation mode)에 대해서 다룬다.

 

SQL Server는 데이터베이스를 생성할 때 Windows API를 호출하여 섹터 사이즈를 알아낸다. 이것은 매우 중요하다. 512e로 설정되어 있으면 운영체제 시스템과 SQL Server 로그 파일 I/O 요청이 512byte 경계로 정렬되어 사용 할 수 있다.

 

512e를 사용하는 드라이브에 데이터베이스가 RMW(읽기-수정-쓰기)동작을 수행하여 로그레코드를 작성 할 때 긴 I/O 시간을 볼 수 있다. 이는 1~2ms 끝나지만 빠르게 누적 될 수 있다.

 

4K 섹터 기반의 드라이브가 512byte 섹터 드라이브 보다 더 좋거나 나쁘다는 것은 아니다. 4K 섹터 드라이브에 대한 설계 ECC 메커니즘 때문에 어떤 면에서 512byte 섹터의 드라이브 보다 미디어 오류 조건에 탄력적으로 대응할 수 있다.

 

여기서 경고하는 것은 512e 모드에서 이루어지는 읽기-수정-쓰기 동작이다. SQL Server가 생각하기에 512byte 섹터의 로그 I/O를 512byte 경계에 정렬하는데 부분 4K 쓰기가 드라이브 레벨에서 발생 한다.

 

여기에서 R/M/W 운영의 단점은 장애에 대해서 복구할 수 없는 데이터 손실이 발생 한다는 것이다. 이 가능성은 논리 블록의 시작과 끝(경계 부분)의 두 부분 수정 섹터가 기록되고 있는 시점에서 각 R/M/W 작업을 수행하는 동안 발생한다.

 

대부분의 문서, 사진, 비디오와 같은 데이터들은 512byte보다 크기 때문에 512byte의 연속 공간이 4K 섹터를 구축하기에 충분하고 하드 드라이브 캐시에 이러한 쓰기 요청을 저장 할 수 있다.

 

런츠(runts)라고 하여 하드 드라이브에서 4K 보다 작거나 잘못된 데이터의 블록쓰기 명령을 실행 할 때 R/M/W 방지가 된다.

 

[4K의 섹터를 사용하기 위해서는]

  • 하드웨어 제조 업체에게 문의한다.
  • 4K 섹터 드라이브를 지원하는 운영체제 버전을 사용하고 있는지 확인 한다.

http://support.microsoft.com/kb/2510009

  • SQL Server 2008R2 PCU1 적용

 

[주의사항]

데이터베이스 이동 시 SQL Server는 섹터가 유효한 페이지와 로그버퍼를 지원하는지 확인 하지 않는다. 잘못된 섹터 크기가 발생한 경우에는 5178, 3268, 3269 또는 이와 유사한 오류가 발생 한다. 이 경우 FSUTIL 및 MSINFO 유틸리티를 사용하여 섹터 정보를 확인 한다.

 

 

[참고자료]

  • CSS SQL Server Engineer :

http://blogs.msdn.com/b/psssql/archive/2011/01/13/sql-server-new-drives-use-4k-sector-size.aspx

 

 

 


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

No. Subject Author Date Views
1831 SQL Server CREATE TABLE syntax diagrams jevida(강성욱) 2016.09.30 1421
1830 SQL Server 2012 Sp1 설치 이슈 및 해결 jevida(강성욱) 2016.09.30 1581
1829 SSD에서 DBCC CHECKDB 성능 벤치마킹 jevida(강성욱) 2016.09.30 1932
1828 Collation에 따른 ALTER DATABASE 실패 jevida(강성욱) 2016.09.30 1942
1827 LDF 파일이 잘리지 않는 이유 jevida(강성욱) 2016.09.30 2054
1826 Tempdb 경합 확인 및 해결 (Tempdb Contention) jevida(강성욱) 2016.09.30 2222
1825 SQL Server IO 병목 확인과 오해 jevida(강성욱) 2016.09.30 2512
1824 SQL Version에 따른 sp_prepare 정보 반환 jevida(강성욱) 2016.09.30 1717
1823 DReplay 활성 세션 초과 에러 jevida(강성욱) 2016.09.30 1543
1822 저장 프로시저 내 임시 테이블 사용과 프로시저 재컴파일 jevida(강성욱) 2016.09.30 1872
1821 NUMA 노드와 추척플래그 8048 jevida(강성욱) 2016.09.30 820
1820 온라인 인덱스 리빌드와 조각화 증가 jevida(강성욱) 2016.09.30 1608
1819 VARCHAR(MAX) and NTEXT 쿼리 성능 jevida(강성욱) 2016.09.30 4579
1818 CPU 리소스 상태에 따른 병렬 처리 제한 jevida(강성욱) 2016.09.30 1077
1817 매개변수 값의 변경과 SQL 서버 성능 저하 jevida(강성욱) 2016.09.30 1273
1816 IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료 jevida(강성욱) 2016.09.30 1060
1815 SQL 버전과 CLR (.NET Framework 버전에 따른 오류) jevida(강성욱) 2016.09.30 1191
1814 SWITCHOFFSET 내장함수의 잘 못된 예측 - 미리 계산한 값을 쿼리에 연결하여 최적화 하기 jevida(강성욱) 2016.09.30 1331
1813 테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능 jevida(강성욱) 2016.09.30 1233
» 디스크 섹터 크기와 데이터베이스 성능 jevida(강성욱) 2016.09.29 1638





XE Login