SQL Server 오류 30 일 상담 14 일 째 로 그 를 지우 면 관련 LSN 을 초기 화 합 니 다.
3861 단어 LSN 입력 초기 화
잘못
로그 파일 이 수 동 으로 증가 하면 자동 으로 증가 하고 생 성 될 때 0 을 채 우 고 초기 화 합 니 다.하지만 이 과정 과 정기 적 으로 로 그 를 지 우 는 과정 을 헷 갈 리 지 마 세 요.로그 차단 은 한 개 이상 의 VLF 를 반복 적 으로 사용 할 수 있 도록 활동 하지 않 는 것 으로 표시 하 는 것 을 의미 합 니 다.로 그 를 지 우 는 과정 에서 로 그 를 지우 거나 0 을 채 우 는 일 은 없 었 습 니 다."로 그 를 지우 기'와'로 그 를 끊 기'는 뜻 은 같 지만 단어 사용 이 부적 절 합 니 다.이 과정 에서 로그 의 크기 는 변 하지 않 기 때 문 입 니 다.
내 블 로그 에서 로그 파일 작성 초기 화 에 관 한 블 로그 글 을 볼 수 있 습 니 다.Search Engine Q&A #24: Why can't the transaction log use instant initialization?그리고 제 가 TechNet 잡지 에 발표 한 글 은Understanding Logging and Recovery in SQL Server입 니 다.
SQL Server 가 로그 파일 을 0 으로 초기 화 하 는 과정 을 추적 표시 3004 를 통 해 볼 수 있 습 니 다.로그 파일 이 증가 할 때 이 추적 표 시 를 열 면 SQL Server 로그 에서 관련 정 보 를 볼 수 있 습 니 다.다음은 테스트 코드 입 니 다.
DBCC TRACEON (3004, 3605);
GO
-- Create database and put in SIMPLE recovery model so the log will clear on checkpoint
CREATE DATABASE LogClearTest ON PRIMARY (
NAME = 'LogClearTest_data',
FILENAME = N'D:\SQLskills\LogClearTest_data.mdf')
LOG ON (
NAME = 'LogClearTest_log',
FILENAME = N'D:\SQLskills\LogClearTest_log.ldf',
SIZE = 20MB);
GO
-- Error log mark 1
ALTER DATABASE LogClearTest SET RECOVERY SIMPLE;
GO
USE LogClearTest;
GO
-- Create table and fill with 10MB - so 10MB in the log
CREATE TABLE t1 (c1 INT IDENTITY, c2 CHAR (8000) DEFAULT 'a');
GO
INSERT INTO t1 DEFAULT VALUES;
GO 1280
-- Clear the log
CHECKPOINT;
GO
-- Error log mark 2
ALTER DATABASE LogClearTest SET RECOVERY SIMPLE;
GO
해당 하 는 것 입 니 다.로그 에서 볼 수 있 습 니 다.
2010-04-13 13:20:27.55 spid53 DBCC TRACEON 3004, server process ID (SPID) 53. This is an informational message only; no user action is required.
2010-04-13 13:20:27.55 spid53 DBCC TRACEON 3605, server process ID (SPID) 53. This is an informational message only; no user action is required.
2010-04-13 13:20:27.63 spid53 Zeroing D:\SQLskills\LogClearTest_log.ldf from page 0 to 2560 (0x0 to 0x1400000)
2010-04-13 13:20:28.01 spid53 Zeroing completed on D:\SQLskills\LogClearTest_log.ldf
2010-04-13 13:20:28.11 spid53 Starting up database 'LogClearTest'.
2010-04-13 13:20:28.12 spid53 FixupLogTail() zeroing D:\SQLskills\LogClearTest_log.ldf from 0x5000 to 0x6000.
2010-04-13 13:20:28.12 spid53 Zeroing D:\SQLskills\LogClearTest_log.ldf from page 3 to 63 (0x6000 to 0x7e000)
2010-04-13 13:20:28.14 spid53 Zeroing completed on D:\SQLskills\LogClearTest_log.ldf
2010-04-13 13:20:28.16 spid53 Setting database option RECOVERY to SIMPLE for database LogClearTest.
2010-04-13 13:20:29.49 spid53 Setting database option RECOVERY to SIMPLE for database LogClearTest.
위의 테스트 코드 에서 ALTER DATABASE 는 로그 의 시작 과 끝 표시 입 니 다.두 개의 Alter Database 명령 에 있 는 CheckPoint 는 0 을 채 우 는 동작 을 일 으 키 지 않 습 니 다.이 점 을 더 검증 할 필요 가 있다 면 Checkpoint 이전 과 이후 에 각각 DBCC SQLPERF(LOGSPACE)를 사용 하여 로그 파일 의 크기 를 볼 수 있 습 니 다.로그 파일 의 크기 는 변 하지 않 았 지만 로그 의 사용 공간 비율 은 크게 줄 어 들 것 입 니 다.(다음 그림 은 번역자 테스트 결과 입 니 다):