CHECKPOINT(Transact-SQL)
현재 데이터베이스의 커밋되지 않은 페이지를 디스크에 모두 기록합니다. 커밋되지 않은 페이지란 버퍼 캐시에 입력되고 수정되었지만 아직 디스크에 기록되지 않은 데이터 페이지를 말합니다. 검사점은 커밋되지 않은 모든 페이지가 디스크에 기록되었음을 확인하는 지점을 만들어 나중에 복구하는 동안 시간을 절약할 수 있습니다.
구문
CHECKPOINT [ checkpoint_duration ]
인수
checkpoint_duration
검사점을 완료하기 위해 요청된 시간(초)을 지정합니다. checkpoint_duration을 지정하면 SQL Server 데이터베이스 엔진에서 요청된 기간 내에 검사점을 수행하려고 시도합니다. checkpoint_duration은 int 유형의 식이어야 하며 0보다 커야 합니다. 이 매개 변수를 생략하면 SQL Server 데이터베이스 엔진은 검사점 기간을 자동으로 조정하여 데이터베이스 응용 프로그램의 성능에 미치는 영향을 최소화합니다.[!참고]
SQL Server 2000에서는 검사점 프로세스의 시간대가 sp_configure RECOVERY INTERVAL 설정을 기반으로 했습니다.
주의
성능상의 이유로 데이터베이스 엔진은 메모리에서 데이터베이스 페이지를 수정하며, 변경 내용이 있더라도 항상 페이지를 디스크에 기록하지는 않습니다. 그러나 주기적으로 데이터베이스 엔진에서 검사점을 수행하여 이 커밋되지 않은 페이지를 디스크에 기록해야 합니다. 커밋되지 않은 페이지를 디스크에 기록하면 갑자기 종료되거나 손상된 후 복구하는 동안 데이터베이스 엔진에서 로그에 포함된 변경 내용을 적용하기 시작할 수 있는 알려진 효과적인 지점이 생성됩니다. 자세한 내용은 검사점 및 로그의 활성 부분을 참조하십시오.
여러 데이터베이스에서 검사점이 동시에 발생할 수 있습니다.
데이터베이스 엔진은 중단된 검사점에서 복구할 수 없습니다. 검사점이 중단된 후 복구해야 할 경우 데이터베이스 엔진은 이전의 성공적인 검사점에서 복구를 시작해야 합니다.
검사점이 발생하는 이벤트
데이터베이스를 백업하기 전에 데이터베이스 엔진에서는 데이터베이스 페이지의 모든 변경 내용이 백업에 포함될 수 있도록 자동으로 검사점을 수행합니다. 또한 다음과 같은 경우 자동으로 검사점이 발생합니다.
로그 활성 부분이 recoveryinterval 서버 구성 옵션에 지정된 시간 내에 복구할 수 있는 크기를 초과할 경우
데이터베이스가 로그 잘라내기 모드이고 로그가 70% 이상 찼을 경우
데이터베이스가 단순 복구 모델을 사용하며 이 데이터베이스를 참조하는 마지막 BACKUP DATABASE 문을 실행한 후 다음 이벤트 중 하나가 발생할 경우 데이터베이스는 로그 잘라내기 모드입니다.
최소한으로 기록되는 대량 복사 작업이나 최소한으로 기록되는 WRITETEXT 문을 실행하는 등 데이터베이스에서 최소 로그 작업을 수행한 경우
데이터베이스에서 파일을 추가 또는 삭제하는 ALTER DATABASE 문을 실행한 경우
또한 서버를 중지하면 서버의 각 데이터베이스에서 검사점이 실행됩니다. 다음과 같은 방법으로 SQL Server를 중지하면 각 데이터베이스에 대해 검사점이 수행됩니다.
SQL Server 구성 관리자 사용
SQL Server Management Studio 사용
SHUTDOWN 문 사용
[!참고]
SHUTDOWN WITH NOWAIT 문은 각 데이터베이스에서 검사점을 실행하지 않고 SQL Server를 종료합니다. 이런 경우 서버에서 데이터베이스를 복구하기 위해 평소보다 서버를 다시 시작하는 시간이 오래 걸립니다.
명령 프롬프트 창에서 net stop mssqlserver 명령 사용
제어판의 서비스를 사용하여 mssqlserver를 선택하고 중지 클릭
클러스터의 인스턴스를 오프라인 상태로 전환
검사점 작업 기간에 영향을 주는 요인
일반적으로 검사점 작업에 필요한 시간은 기록해야 할 커밋되지 않은 페이지 수에 따라 증가합니다. 다른 응용 프로그램의 성능에 미치는 영향을 최소화하기 위해 기본적으로 SQL Server에서는 검사점 작업이 기록하는 빈도를 조정합니다. SQL Server에서는 이 방법을 사용하여 자동 검사점을 실행하고 checkpoint_duration 값을 지정하지 않는 CHECKPOINT 문을 실행합니다. 기록 빈도를 줄이면 검사점 작업을 완료하는 데 필요한 시간이 늘어납니다.
checkpoint_duration을 사용하여 검사점 작업이 특정 시간 내에 완료되도록 요청할 수 있습니다. checkpoint_duration을 사용할 경우 성능에 미치는 영향은 커밋되지 않은 페이지 수, 시스템의 작업 및 지정한 실제 기간에 따라 다릅니다. 예를 들어 일반적으로 120초 내에 검사점이 완료되는 경우 checkpoint_duration을 45초로 설정하면 SQL Server에서는 기본적으로 할당된 리소스보다 많은 리소스를 검사점에 사용합니다. 이와 반대로 checkpoint_duration을 180초로 설정하면 SQL Server에서 기본적으로 할당된 리소스보다 적은 리소스를 검사점에 사용합니다. 일반적으로 checkpoint_duration을 짧게 설정하면 검사점에 사용되는 리소스가 증가하고 checkpoint_duration을 길게 설정하면 검사점에 사용되는 리소스가 감소합니다. SQL Server에서는 가능하면 항상 검사점을 완료하며 CHECKPOINT 문은 검사점이 완료되는 즉시 반환됩니다. 그러므로 지정한 기간보다 빨리 검사점이 완료되거나 지정한 기간보다 오래 실행될 수 있습니다.
사용 권한
CHECKPOINT 권한은 기본적으로 sysadmin 고정 서버 역할과 db_owner 및 db_backupoperator 고정 데이터베이스 역할의 멤버로 설정되며 양도할 수 없습니다.