소개
즉시 초기화(또는 인스턴트 파일 초기화, 이하 IFI)는 파일 크기 증가 시 일명 Zeroing이라고 부르는 새로운 공간의 초기화 작업을 생략하므로써 빠른 처리를 지원하는 동작입니다. 특히 대용량의 파일 생성이나 증가 시 빠른 시간에 처리가 되어서 관리 측면 뿐만 아니라 성능 면에서도 큰 도움이 될 수 있습니다.
아쉬운 점은 Data(mdf or ndf) 파일에만 이러한 동작이 지원되는 것입니다. SQL Server 2022(또는 는 Azure SQL)부터 드디어 Log 파일(ldf)에도 즉시 파일 초기화가 지원되기 시작했습니다. 물론 이제 시작이라 그런지 아쉬운 제한 사항도 있습니다, 최대 증가 크기가 64MB 라는 것인데요, 보시죠.
참고 자료
즉시 파일 초기화 확인
즉시 초기화는 파일 작업이라 OS 수준에서 권한 여부가 필요합니다. SQL Server 상위 버전은 Setup 시에 옵션으로 지정할 수 있지만 이전 버전은 Setup 후 별도로 구성을 해야하죠, 해당 방법은 위 MS 링크 문서를 참고하세요.
현재 SQL Server에서 즉시 초기화가 설정되어 있는지 확인해 봅니다. 방법은 여러가지가 있지만 간단히 아래와 같이 쿼리를 이용하겠습니다.
-- 서비스 권한 확인 SELECT instant_file_initialization_enabled, * FROM sys.dm_server_services;
[그림-1] IFI 여부 쿼리 결과
추적 플래그(TF)를 이용, Skip Zeroing 동작 확인
주의. 아래 추적 플래그는 테스트용으로 운영에서의 사용을 주의를 요합니다. 특히 3004는 Undocumented(비 지원) 기술입니다.
파일 크기 증가 시 Log(ldf) 파일에 Zeroing이 일어나는지 아니면 Skip이 되는지 확인하는 우회 방법도 있지만 명확히 하기 위해 아래와 같이 3004 추적 플래그를 사용하겠습니다.
TF 3004를 이용하면 Skip Zeroing 여부를 알 수 있으며, 3605는 메시지를 Error Log에 기록하기 위한 목적입니다. (-1은 Global 설정입니다)
-- TF: 초기화 동작, 오류 로그 기록 DBCC TRACEON(3004, 3605, -1) -- 테스트 후 OFF 시 DBCC TRACEOFF(3004, 3605, -1)
Skip Zeroing 여부 확인
아래와 같이 간단한 테스트용 코드를 이용해서 작업하고 각 단계에서 Zeroing, Skip Zeroing 여부를 SQL Server Error Log에서 확인했습니다.
- 초기 DB 생성, Log 파일 8MB
- Log 파일 +128MB 증가 후, Zeroing 확인
- Log 파일 +64MB 증가 후, Skip Zeroing 확인
-- 삭제 DROP DATABASE IF EXISTS [Test_Log] GO -- 테스트용 DB 생성 CREATE DATABASE [Test_Log] CONTAINMENT = NONE ON PRIMARY ( NAME = N'Test_Log', FILENAME = N'C:\Temp\Test_Log.mdf' , SIZE = 8MB , FILEGROWTH = 64MB ) LOG ON ( NAME = N'Test_Log_log', FILENAME = N'C:\Temp\Test_Log_log.ldf' , SIZE = 8MB , FILEGROWTH = 64MB ) GO /* 1) IFI 동작 여부 확인 --> 안되는 경우 */ ALTER DATABASE [Test_Log] MODIFY FILE ( NAME = N'Test_Log_log' , SIZE = 136MB -- + 128 ) GO
[그림-2] +128MB에서 Zeroing 메시지
/* 2) IFI 동작 여부 확인 --> 되는 경우, 최대 64MB 단위 (왜 64?) */ ALTER DATABASE [Test_Log] MODIFY FILE ( NAME = N'Test_Log_log' , SIZE = 200MB ) -- + 64
[그림-3] +64MB에서 Skip Zeroing 메시지
정리
드디어 Log 파일도 즉시 초기화가 지원된다는 것이 매우 반가운 소식이나 최대 64MB 크기로 제한된 부분은 조금 아쉽습니다. 실제 대용량 DB를 사용하는 고객들의 경우 Log 파일 증가는 수동으로 하는 것이 기본이고 이 때 64MB 단위를 사용하지는 않는다는 점이죠. 물론 관리가 되지 않는 중소 규모의 DB라면 자동 증가 크기가 64MB 이하여서 혜택을 받을 수도 있을 겁니다.
앞으로의 변화가 더 기대됩니다.
모두 즐거운 SQL하세요.
김정선 드림