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

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1291
2066 SQL Server 2016 Tempdb 환경 설정 jevida(강성욱) 2017.01.11 4464
2065 SQL Server 2016 향상된 즉시 파일 초기화 jevida(강성욱) 2017.01.11 2808
» SQL Server 2016 LDF 생성 또는 증가 시 변경된 스탬프 패턴 jevida(강성욱) 2017.01.11 2675
2063 SQL Server 2016 Tempdb 성능 향상 jevida(강성욱) 2017.01.11 4828
2062 SQL Server 2016 DBCC CHECK 작업 성능 향상 jevida(강성욱) 2017.01.11 2417
2061 Microsoft Azure - SQL Server가 포함된 가상 컴퓨터 생성하기 jevida(강성욱) 2017.01.11 1873
2060 데이터베이스에서 사용자 삭제 오류 jevida(강성욱) 2017.01.11 1339
2059 Sys.dm_exec_query_plan 에서 query_plan 컬럼의 NULL 값 반환 jevida(강성욱) 2017.01.11 1911
2058 SSMS에서 유효하지 않은 소유자로 데이터베이스 정보가 보이지 않는 증상 jevida(강성욱) 2017.01.11 1927
2057 SQLCMD 유틸리티 사용하기 jevida(강성욱) 2017.01.11 8080
2056 In-Memory 최적화 테이블을 사용하여 임시 테이블 및 테이블 변수 성능 향상 jevida(강성욱) 2017.01.11 5051
2055 SQL Server Job Agent는 몇 개까지 실행이 가능할까? jevida(강성욱) 2017.01.11 1795
2054 확장이벤트 사용시 주의사항 jevida(강성욱) 2017.01.11 1669
2053 Unix(Linux) timestamp(bigint) 형식을 datetime 으로 변경하기 jevida(강성욱) 2017.01.11 3290
2052 Query Rule Off를 사용한 SQL Server 옵티마이저 비활성화 jevida(강성욱) 2017.01.11 1618
2051 시스템 관리자 권한이 없는 특정 프로그램에서 Trace Flag 사용하기 jevida(강성욱) 2017.01.11 2539
2050 In-Memory OLTP 환경에서 체크포인트 작업과 디스크 부족 경고 jevida(강성욱) 2017.01.11 1313
2049 Spool 연산자와 추적 플래그 8690 jevida(강성욱) 2017.01.11 1969
2048 .NET 4.6.1에 변경된 Multisubnet 기본 수신기 동작 jevida(강성욱) 2017.01.11 1641
2047 함수 통계 정보 확인 (sys.dm_exec_function_stats) jevida(강성욱) 2017.01.11 1607





XE Login