SQL Server 2016 LDF 생성 또는 증가 시 변경된 스탬프 패턴

 

  • Version : SQL Server 2016

 

SQL Server 데이터베이스에서 로그 파일(LDF)이 생성 또는 증가하는 경우 특정 바이트(0x00) 패턴의 스탬프가 기록된다. 이 패턴은 로그블록 레이아웃의 마지막 로그마커 표시이다.

SQL Server 7.0에 변경된 LDF 포맷 디자인은Sybase 데이터베이스의 2K 단위로 로그 블럭을 0(0x00)으로 섹터를 정렬하는 디자인을 따른 것으로, LDF 파일이 새로 생성되거나 확장할 경우 확장 로그에 대해 0x00 바이트 로그를 기록 한다.

 

SQL Server 2016에서는 0x00대신 0xC0로 스탬프를 변경하였다. (2014년 이후의 Azure SQL 경우 변경된 스탬프를 사용하고 있다.) 그렇다면 0x00에서 0xC0으로 변경되었을때 어떤 성능향상이 있을까?

 

새로운 하드웨어는 대부분 0x00 패턴으로 감지한다. 미디어 공간을 안정적으로 0으로 기록한 다음 백그라운드에서 하드웨어 기반의 가비지컬렉터를 통해 블록을 회수한다. SQL Server는 LDF확장하거나 생성할 때 트랜잭션 활동을 지원하기 위해 새로운 세그먼트를 생성해야 한다.

  • 지역 할당
  • 0x00 패턴으로스탬프 기록
  • 하드웨어는 새로 할당된 영역을 확보
  • SQL Server는 새로운 트랜잭션 레코드를 작성

 

하드웨어는 새로운 트랜잭션 로그 레코드가 공간을 반복적으로 획득하는 것을 강제로 회수할 수있다. 또 다른 사실은 스탬프 활동에 따른 비동기 I/O 간섭이다. SQL Server 는 게시(비동기 I/O핸드오프)와 작업자가 계속해서 처리할 수 있도록 설계되었다. 스탬프 활동은 자주 I/O 요청을 동기 방식으로 완료한다. 이 패턴은 SQL Server의 스케줄링에 방해를 주는 동작으로 성능 감소가 발생할 수 있다.

 

SQL Server 2016에서 변경된 0xC0 패턴 변경은 일반적인 스탬프 기법을 피하여 성능을 개선하는 것이다. 주의사항은 SQL Server 데이터파일을 저장하는데 사용되는 프로비저닝 환경이나 중복 제거 서브시스템 경우 성능에 미치는 영향을 검토해야 한다.

 

(개선된 디자인이 얼마나 성능 향상이 되었는지는 필자도 잘은 모르겠다. LDF는 메인터넌스 작업때 적절하게 미리 늘려서 할당하는것이 최선의 방법인 듯 하다.)

 

 

[참고자료]

https://blogs.msdn.microsoft.com/psssql/2016/03/22/sql-2016-it-just-runs-faster-ldf-stamped/




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





profile

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

Kakao Talk : SQLMVP

Line : jevida


현재 LA에 거주하고 있으며 SQL에 관심있는 분이면 언제든 친추 환영합니다.