데이터베이스 검사점(SQL Server)Database Checkpoints (SQL Server)

검사점SQL Server 데이터베이스 엔진SQL Server Database Engine 이 예기치 않은 종료 또는 충돌 후 복구하는 과정에서 로그에 포함된 변경 내용의 적용을 시작할 수 있는 알려진 올바른 지점을 만듭니다.A checkpoint creates a known good point from which the SQL Server 데이터베이스 엔진SQL Server Database Engine can start applying changes contained in the log during recovery after an unexpected shutdown or crash.

개요 Overview

성능상의 이유로 데이터베이스 엔진Database Engine 은 변경 내용이 있을 때마다 메모리(버퍼 캐시)에서 데이터베이스 페이지를 수정하며 이러한 페이지를 디스크에 기록하지는 않습니다.For performance reasons, the 데이터베이스 엔진Database Engine performs modifications to database pages in memory—in the buffer cache—and does not write these pages to disk after every change. 대신 데이터베이스 엔진Database Engine 은 각 데이터베이스에서 정기적으로 검사점을 실행합니다.Rather, the 데이터베이스 엔진Database Engine periodically issues a checkpoint on each database. 검사점 은 현재 메모리 내의 수정된 페이지( 더티 페이지라고 함)와 메모리의 트랜잭션 로그 정보를 디스크에 쓰고 트랜잭션 로그에 대한 정보도 기록합니다.A checkpoint writes the current in-memory modified pages (known as dirty pages) and transaction log information from memory to disk and, also, records information about the transaction log.

데이터베이스 엔진Database Engine 에서는 자동, 간접, 수동 및 내부와 같은 여러 가지 유형의 검사점이 지원됩니다.The 데이터베이스 엔진Database Engine supports several types of checkpoints: automatic, indirect, manual, and internal. 다음 표에는 검사점의 유형이 요약되어 있습니다.The following table summarizes the types of checkpoints:

이름Name Transact-SQLTransact-SQL 인터페이스 Interface 설명Description
자동Automatic EXEC sp_configure '복구 간격',초''EXEC sp_configure 'recovery interval','seconds' recovery interval 서버 구성 옵션에 제안된 최대 제한 시간에 맞게 백그라운드에서 자동으로 실행됩니다.Issued automatically in the background to meet the upper time limit suggested by the recovery interval server configuration option. 자동 검사점은 완료될 때까지 실행됩니다.Automatic checkpoints run to completion. 자동 검사점은 진행 중인 쓰기 작업의 수와 쓰기 지연 시간이 50밀리초 이상으로 증가할 경우 데이터베이스 엔진Database Engine 이 이를 감지하는지에 따라 제한됩니다.Automatic checkpoints are throttled based on the number of outstanding writes and whether the 데이터베이스 엔진Database Engine detects an increase in write latency above 50 milliseconds.

자세한 내용은 Configure the recovery interval Server Configuration Option을(를) 참조하세요.For more information, see Configure the recovery interval Server Configuration Option.
간접Indirect ALTER DATABASE …ALTER DATABASE … SET TARGET_RECOVERY_TIME =target_recovery_time { SECONDS | MINUTES }SET TARGET_RECOVERY_TIME =target_recovery_time { SECONDS | MINUTES } 지정된 데이터베이스의 사용자 지정 대상 복구 시간에 맞게 백그라운드에서 실행됩니다.Issued in the background to meet a user-specified target recovery time for a given database. SQL Server 2016SQL Server 2016부터 기본값은 1분입니다.Beginning with SQL Server 2016SQL Server 2016, the default value is 1 minute. 이전 버전의 기본값 0은 데이터베이스가 자동 검사점을 사용함을 나타내며, 빈도는 서버 인스턴스의 복구 간격 설정에 따라 달라집니다.The default is 0 for older versions, which indicates that the database will use automatic checkpoints, whose frequency depends on the recovery interval setting of the server instance.

자세한 내용은 데이터베이스의 대상 복구 시간 변경(SQL Server)을(를) 참조하세요.For more information, see Change the Target Recovery Time of a Database (SQL Server).
수동Manual CHECKPOINT [ checkpoint_duration ]CHECKPOINT [ checkpoint_duration ] Transact-SQLTransact-SQL CHECKPOINT 명령을 실행할 때 실행됩니다.Issued when you execute a Transact-SQLTransact-SQL CHECKPOINT command. 수동 검사점은 현재 연결된 데이터베이스에서 발생합니다.The manual checkpoint occurs in the current database for your connection. 기본적으로 수동 검사점은 완료될 때까지 실행됩니다.By default, manual checkpoints run to completion. 또한 자동 검사점의 경우와 동일한 방식으로 조절됩니다.Throttling works the same way as for automatic checkpoints. 필요한 경우 checkpoint_duration 매개 변수는 수동 검사점을 완료하는 데 필요한 시간(초)을 지정합니다.Optionally, the checkpoint_duration parameter specifies a requested amount of time, in seconds, for the checkpoint to complete.

자세한 내용은 CHECKPOINT(Transact-SQL)을(를) 참조하세요.For more information, see CHECKPOINT (Transact-SQL).
내부Internal 없음None. 디스크 이미지가 현재 로그 상태와 일치하도록 하는 백업 및 데이터베이스 스냅숏 생성 등의 다양한 서버 작업에 의해 실행됩니다.Issued by various server operations such as backup and database-snapshot creation to guarantee that disk images match the current state of the log.

참고

데이터베이스 관리자는 일부 유형의 검사점에 대해 -k SQL ServerSQL Server 고급 설정 옵션을 사용하여 I/O 하위 시스템의 처리량에 따라 검사점 I/O 동작을 제한할 수 있습니다.The -k SQL ServerSQL Server advanced setup option enables a database administrator to throttle checkpoint I/O behavior based on the throughput of the I/O subsystem for some types of checkpoints. -k 설정 옵션은 자동 검사점과 그 밖의 조절되지 않는 모든 수동 및 내부 검사점에 적용됩니다.The -k setup option applies to automatic checkpoints and any otherwise unthrottled manual and internal checkpoints.

자동, 수동 및 내부 검사점의 경우 데이터베이스 복구 중에는 마지막 검사점 다음에 수정된 내용만 롤포워드해야 합니다.For automatic, manual, and internal checkpoints, only modifications made after the latest checkpoint need to be rolled forward during database recovery. 이렇게 하면 데이터베이스를 복구하는 데 필요한 시간이 줄어듭니다.This reduces the time required to recover a database.

중요

커밋되지 않은 장기 실행 트랜잭션의 경우 모든 검사점 유형에 대해 복구 시간이 늘어납니다.Long-running, uncommitted transactions increase recovery time for all checkpoint types.

TARGET_RECOVERY_TIME 옵션과 'recovery interval' 옵션의 상호 작용 Interaction of the TARGET_RECOVERY_TIME and 'recovery interval' Options

다음 테이블에서는 서버 차원의 sp_configure'복구 간격' 설정과 데이터베이스별 ALTER DATABASE …간의 상호 작용을 요약합니다.The following table summarizes the interaction between the server-wide sp_configure'recovery interval' setting and the database-specific ALTER DATABASE … TARGET_RECOVERY_TIME 설정 간의 상호 작용을 간략하게 보여 줍니다.TARGET_RECOVERY_TIME setting.

target_recovery_timeTARGET_RECOVERY_TIME 'recovery interval''recovery interval' 사용되는 검사점 유형Type of Checkpoint Used
00 00 대상 복구 간격이 1분인 자동 검사점automatic checkpoints whose target recovery interval is 1 minute.
00 >0>0 대상 복구 간격이 sp_configure 복구 간격 옵션의 사용자 정의 설정에 의해 지정되는 자동 검사점Automatic checkpoints whose target recovery interval is specified by the user defined setting of the sp_configurerecovery interval option.
>0>0 이 오류에는 이 작업을 적용할 수 없습니다.Not applicable. 대상 복구 간격이 TARGET_RECOVERY_TIME 설정에 의해 초 단위로 결정되는 간접 검사점Indirect checkpoints whose target recovery time is determined by the TARGET_RECOVERY_TIME setting, expressed in seconds.

자동 검사점 Automatic checkpoints

자동 검사점은 로그 레코드의 수가 데이터베이스 엔진Database Engine복구 간격 서버 구성 옵션에 지정된 시간 동안 처리할 수 있을 것으로 예상하는 수에 도달할 때마다 발생합니다.An automatic checkpoint occurs each time the number of log records reaches the number the 데이터베이스 엔진Database Engine estimates it can process during the time specified in the recovery interval server configuration option.

사용자 정의 대상 복구 시간이 없는 모든 데이터베이스에서 데이터베이스 엔진Database Engine 은 자동 검사점을 생성합니다.In every database without a user-defined target recovery time, the 데이터베이스 엔진Database Engine generates automatic checkpoints. 빈도는 특정 서버 인스턴스에서 시스템을 다시 시작하는 동안 데이터베이스를 복구하는 데 사용해야 하는 최대 시간을 지정하는 복구 간격 고급 서버 구성 옵션에 따라 달라집니다.The frequency depends on the recovery interval advanced server configuration option, which specifies the maximum time that a given server instance should use to recover a database during a system restart. 데이터베이스 엔진Database Engine 에서는 복구 간격 내에 처리할 수 있는 최대 로그 레코드 수를 예상합니다.The 데이터베이스 엔진Database Engine estimates the maximum number of log records it can process within the recovery interval. 자동 검사점을 사용하는 데이터베이스가 이 최대 로그 레코드 수에 도달하면 데이터베이스 엔진Database Engine 이 데이터베이스에 대해 검사점을 실행합니다.When a database using automatic checkpoints reaches this maximum number of log records, the 데이터베이스 엔진Database Engine issues an checkpoint on the database.

자동 검사점 사이의 시간 간격은 매우 가변적일 수 있습니다.The time interval between automatic checkpoints can be highly variable. 트랜잭션 작업이 많은 데이터베이스는 읽기 전용 작업에 주로 사용되는 데이터베이스보다 검사점이 더 많습니다.A database with a substantial transaction workload will have more frequent checkpoints than a database used primarily for read-only operations. 단순 복구 모델에서 자동 검사점은 로그의 70%가 찬 경우에도 큐에 들어갑니다.Under the simple recovery model, an automatic checkpoint is also queued if the log becomes 70 percent full.

단순 복구 모델에서는 어떤 요인으로 인해 로그 잘림이 지연되지 않는 한 자동 검사점에 의해 트랜잭션 로그의 사용되지 않는 부분이 잘립니다.Under the simple recovery model, unless some factor is delaying log truncation, an automatic checkpoint truncates the unused section of the transaction log. 반면 전체 및 대량 로그된 복구 모델에서 로그 백업 체인이 설정된 후에는 자동 검사점에 의해 로그 잘림이 발생하지 않습니다.By contrast, under the full and bulk-logged recovery models, once a log backup chain has been established, automatic checkpoints do not cause log truncation. 자세한 내용은 트랜잭션 로그(SQL Server)을(를) 참조하세요.For more information, see The Transaction Log (SQL Server).

시스템 충돌이 발생한 후 특정 데이터베이스를 복구하는 데 필요한 시간은 충돌 시 더티 상태였던 페이지를 다시 실행하는 데 필요한 임의 I/O의 양에 따라 크게 달라집니다.After a system crash, the length of time required to recover a given database depends largely on the amount of random I/O needed to redo pages that were dirty at the time of the crash. 따라서 recovery interval 설정은 안정적이지 않으며This means that the recovery interval setting is unreliable. 정확한 복구 기간을 결정할 수 없습니다.It cannot determine an accurate recovery duration. 또한 자동 검사점이 진행 중일 때는 데이터에 대한 일반적인 I/O 작업이 예측할 수 없게 상당히 늘어납니다.Furthermore, when an automatic checkpoint is in progress, the general I/O activity for data increases significantly and quite unpredictably.

복구 간격이 복구 성능에 미치는 영향 Impact of recovery interval on recovery performance

짧은 트랜잭션을 사용하는 OLTP(온라인 트랜잭션 처리) 시스템의 경우 복구 간격 은 복구 시간을 결정하는 기본 요소입니다.For an online transaction processing (OLTP) system using short transactions, recovery interval is the primary factor determining recovery time. 그러나 복구 간격 옵션은 장기 실행 트랜잭션의 실행을 취소하는 데 필요한 시간에는 영향을 주지 않습니다.However, the recovery interval option does not affect the time required to undo a long-running transaction. 장기 실행 트랜잭션이 있는 데이터베이스를 복구하는 데는 복구 간격 옵션에 지정된 것보다 오랜 시간이 걸릴 수 있습니다.Recovery of a database with a long-running transaction can take much longer than the specified in the recovery interval option.

예를 들어 서버 인스턴스가 비활성화되기 전에 장기 실행 트랜잭션에서 업데이트를 수행하는 데 2시간이 걸렸었다면 장기 실행 트랜잭션을 복구하기 위한 실제 복구 시간은 복구 간격 값보다 훨씬 길어집니다.For example, if a long-running transaction took two hours to perform updates before the server instance became disabled, the actual recovery takes considerably longer than the recovery interval value to recover the long transaction. 장기 실행 트랜잭션이 복구 시간에 미치는 영향에 대한 자세한 내용은 트랜잭션 로그(SQL Server)을(를) 참조하세요.For more information about the impact of a long running transaction on recovery time, see The Transaction Log (SQL Server).

일반적으로 기본값은 최적의 복구 성능을 제공합니다.Typically, the default values provides optimal recovery performance. 그러나 다음과 같은 경우에는 복구 간격을 변경하면 성능이 향상될 수 있습니다.However, changing the recovery interval might improve performance in the following circumstances:

  • 장기 실행 트랜잭션이 롤백되고 있지 않은 상태에서 복구하는 데 통상 1분이 훨씬 넘게 걸리는 경우If recovery routinely takes significantly longer than 1 minute when long-running transactions are not being rolled back.

  • 검사점이 많아 데이터베이스의 성능이 저하되고 있음을 발견한 경우If you notice that frequent checkpoints are impairing performance on a database.

    recovery interval 설정을 늘리려는 경우에는 값을 조금씩 늘려가며 그에 따라 복구 성능에 미치는 영향을 확인하는 것이 좋습니다.If you decide to increase the recovery interval setting, we recommend increasing it gradually by small increments and evaluating the effect of each incremental increase on recovery performance. recovery interval 설정이 늘어나면 데이터베이스 복구를 완료하는 데 몇 배 더 긴 시간이 걸릴 수 있으므로 이 방법은 중요합니다.This approach is important because as the recovery interval setting increases, database recovery takes that many times longer to complete. 예를 들어 복구 간격 을 10분으로 변경하면 복구 간격 이 1분으로 설정되었을 때보다 복구를 완료하는 데 약 10배 더 많은 시간이 걸립니다.For example, if you change recovery interval 10 minutes, recovery takes approximately 10 times longer to complete than when recovery interval is set to 1 minute.

간접 검사점 Indirect checkpoints

SQL Server 2012SQL Server 2012에 도입된 간접 검사점은 자동 검사점 대신 사용할 수 있는 구성 가능한 데이터베이스 수준 검사점을 제공합니다.Indirect checkpoints, introduced in SQL Server 2012SQL Server 2012, provide a configurable database-level alternative to automatic checkpoints. 시스템이 충돌할 경우 간접 검사점을 사용하면 자동 검사점을 사용할 때보다 복구 시간이 빠르고 보다 예측 가능합니다.In the event of a system crash, indirect checkpoints provide potentially faster, more predictable recovery time than automatic checkpoints. 간접 검사점은 다음과 같은 이점을 제공합니다.Indirect checkpoints offer the following advantages:

  • 간접 검사점이 구성된 데이터베이스의 온라인 트랜잭션 작업으로 인해 성능이 저하될 수 있습니다.An online transactional workload on a database configured for indirect checkpoints can experience performance degradation. 간접 검사점은 데이터베이스 복구가 대상 복구 시간 내에 완료되도록 더티 페이지 수가 특정 임계값보다 적어야 합니다.Indirect checkpoints ensure that the number of dirty pages are below a certain threshold so the database recovery completes within the target recovery time.

복구 간격 구성 옵션은 더티 페이지 수를 사용하는 간접 검사점과 달리 트랜잭션 수를 사용하여 복구 시간을 결정합니다.The recovery interval configuration option uses the number of transactions to determine the recovery time as opposed to indirect checkpoints which makes use of number of dirty pages. 많은 수의 DML 작업을 수신하는 데이터베이스에서 간접 검사점을 사용하도록 설정하는 경우 복구 수행에 필요한 시간이 데이터베이스의 대상 복구 시간 설정 내로 유지되도록 백그라운드 기록기가 더티 버퍼를 디스크로 적극적으로 플러시하기 시작할 수 있습니다.When indirect checkpoints are enabled on a database receiving a large number of DML operations, the background writer can start aggressively flushing dirty buffers to disk to ensure that the time required to perform recovery is within the target recovery time set of the database. 이로 인해 특정 시스템에서 추가 I/O 작업이 발생할 수 있으므로 디스크 하위 시스템이 I/O 임계값 위에서 또는 근처에서 작동하는 경우 성능 병목 현상에 영향을 줄 수 있습니다.This can cause additional I/O activity on certain systems which can contribute to a performance bottleneck if the disk subsystem is operating above or nearing the I/O threshold.

  • 간접 검사점을 사용하면 REDO 동안의 임의 I/O 비용을 줄여 데이터베이스 복구 시간을 안정적으로 제어할 수 있습니다.Indirect checkpoints enable you to reliably control database recovery time by factoring in the cost of random I/O during REDO. 이를 통해 서버 인스턴스를 특정 데이터베이스의 복구 시간 상한 내로 유지할 수 있습니다. 장기 실행 트랜잭션으로 인해 UNDO 시간이 과도하게 길어지는 경우에는 예외입니다.This enables a server instance to stay within an upper-bound on recovery times for a given database (except when a long-running transaction causes excessive UNDO times).

  • 간접 검사점은 백그라운드에서 더티 페이지를 디스크에 계속 기록하여 검사점 관련 I/O의 급격한 증가를 줄여 줍니다.Indirect checkpoints reduce checkpoint-related I/O spiking by continually writing dirty pages to disk in the background.

    그러나 간접 검사점이 구성된 데이터베이스의 온라인 트랜잭션 작업으로 인해 성능이 저하될 수 있습니다.However, an online transactional workload on a database configured for indirect checkpoints can experience performance degradation. 이는 간접 검사점에 사용되는 백그라운드 기록기로 인해 서버 인스턴스에 대한 총 쓰기 부하가 늘어날 수 있기 때문입니다.This is because the background writer used by indirect checkpoint sometimes increases the total write load for a server instance.

    중요

    간접 검사점은 SQL Server 2016SQL Server 2016에서 만든 새 데이터베이스에 대한 기본 동작입니다.Indirect checkpoint is the default behavior for new databases created in SQL Server 2016SQL Server 2016. 현재 위치에서 업그레이드되었거나 이전 버전의 SQL ServerSQL Server에서 복원된 데이터베이스는 명시적으로 간접 검사점을 사용하도록 변경되지 않은 경우 이전의 자동 검사점 동작을 사용합니다.Databases which were upgraded in place or restored from a previous version of SQL ServerSQL Server will use the previous automatic checkpoint behavior unless explicitly altered to use indirect checkpoint.

내부 검사점 Internal checkpoints

내부 검사점은 디스크 이미지가 현재 로그 상태와 일치하도록 다양한 서버 구성 요소에서 생성됩니다.Internal Checkpoints are generated by various server components to guarantee that disk images match the current state of the log. 내부 검사점은 다음 이벤트에 대한 응답으로 생성됩니다.Internal checkpoint are generated in response to the following events:

  • ALTER DATABASE를 사용하여 데이터베이스 파일을 추가 또는 제거한 경우Database files have been added or removed by using ALTER DATABASE.

  • 데이터베이스를 백업한 경우A database backup is taken.

  • DBCC CHECK를 위해 명시적으로 또는 내부적으로 데이터베이스 스냅숏이 생성된 경우A database snapshot is created, whether explicitly or internally for DBCC CHECK.

  • 데이터베이스를 종료해야 하는 작업을 수행한 경우.An activity requiring a database shutdown is performed. AUTO_CLOSE가 ON이고 데이터베이스에 대한 마지막 사용자 연결이 닫힌 경우 또는 데이터베이스를 다시 시작해야 하는 데이터베이스 옵션 변경을 수행한 경우를 예로 들 수 있습니다.For example, AUTO_CLOSE is ON and the last user connection to the database is closed, or a database option change is made that requires a restart of the database.

  • SQL ServerSQL Server (MSSQLSERVER) 서비스를 중지하여 SQL ServerSQL Server 인스턴스가 중지된 경우.An instance of SQL ServerSQL Server is stopped by stopping the SQL ServerSQL Server (MSSQLSERVER) service . 두 동작은 모두 SQL ServerSQL Server인스턴스의 각 데이터베이스에 검사점을 설정합니다.Either action causes a checkpoint in each database in the instance of SQL ServerSQL Server.

  • SQL ServerSQL Server FCI(장애 조치(Failover) 클러스터 인스턴스)를 오프라인으로 전환한 경우Bringing a SQL ServerSQL Server failover cluster instance (FCI) offline.

서버 인스턴스의 복구 간격을 변경하려면To change the recovery interval on a server instance

참고 항목See also