페이지 쓰기Writing Pages

이 항목은 다음에 적용됩니다. 예SQL Server(2008부터)예Azure SQL Database예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

데이터베이스 엔진Database Engine 인스턴스의 I/O에는 논리적 읽기 수 및 물리적 읽기 수가 포함되어 있습니다.The I/O from an instance of the 데이터베이스 엔진Database Engine includes logical and physical writes. 논리적 쓰기는 버퍼 캐시에 있는 페이지의 데이터가 수정될 때 발생합니다.A logical write occurs when data is modified in a page in the buffer cache. 물리적 쓰기는 페이지를 버퍼 캐시 에서 디스크로 쓸 때 발생합니다.A physical write occurs when the page is written from the buffer cache to disk.

페이지가 버퍼 캐시에서 수정될 때 페이지는 디스크에 바로 다시 기록되지 않고 대신 더티로 표시됩니다.When a page is modified in the buffer cache, it is not immediately written back to disk; instead, the page is marked as dirty. 즉, 페이지는 물리적으로 디스크에 기록되기 전에 두 개 이상의 논리적 쓰기를 수행할 수 있습니다.This means that a page can have more than one logical write made before it is physically written to disk. 각 논리적 쓰기의 경우 트랜잭션 로그 레코드는 수정 사항을 기록하는 로그 캐시에 삽입됩니다.For each logical write, a transaction log record is inserted in the log cache that records the modification. 로그 레코드는 관련된 더티 페이지가 버퍼 캐시에서 디스크로 제거되기 전에 디스크에 기록되어야 합니다.The log records must be written to disk before the associated dirty page is removed from the buffer cache and written to disk. SQL Server는 연결된 로그 레코드가 디스크에 작성되기 전에 더티 페이지 작성을 방지하는 미리 쓰기 로깅이라는 기술을 사용합니다.SQL Server uses a technique known as write-ahead logging that prevents writing a dirty page before the associated log record is written to disk. 이는 복구 관리자가 정확하게 작업하는 데 필수적입니다.This is essential to the correct working of the recovery manager. 자세한 내용은 미리 쓰기 트랜잭션 로그를 참조하세요.For more information, see Write-Ahead Transaction Log.

다음 그림에서는 수정한 데이터 페이지를 쓰는 프로세스를 보여 줍니다.The following illustration shows the process for writing a modified data page.

Writing_Pages

버퍼 관리자가 페이지를 쓸 때 단일 수집-쓰기 작업에 포함될 수 있는 인접한 더티 페이지를 검색합니다.When the buffer manager writes a page, it searches for adjacent dirty pages that can be included in a single gather-write operation. 인접한 페이지는 연속되는 페이지 ID를 포함하며 같은 파일에서 가져온 것입니다. 이러한 페이지는 메모리에서 연속되지 않아도 됩니다.Adjacent pages have consecutive page IDs and are from the same file; the pages do not have to be contiguous in memory. 다음 이벤트 중 하나가 발생할 때까지 앞뒤로 계속 검색합니다.The search continues both forward and backward until one of the following events occurs:

  • 커밋된 페이지를 찾았습니다.A clean page is found.
  • 32개의 페이지를 찾았습니다.32 pages have been found.
  • LSN(로그 시퀀스 번호)이 로그에 아직 플러시되지 않은 커밋되지 않은 페이지를 찾았습니다.A dirty page is found whose log sequence number (LSN) has not yet been flushed in the log.
  • 즉시 래치할 수 없는 페이지를 찾았습니다.A page is found that cannot be immediately latched.

이렇게 단일 수집 쓰기 작업으로 전체 페이지 집합을 디스크에 쓸 수 있습니다.In this way, the entire set of pages can be written to disk with a single gather-write operation.

페이지를 쓰기 직전에 데이터베이스에 지정된 페이지 보호 형식이 페이지에 추가됩니다.Just before a page is written, the form of page protection specified in the database is added to the page. 조각난 페이지 보호가 추가되면 페이지는 I/O에 대해 배타적으로 래치되어야 합니다.If torn page protection is added, the page must be latched EX(clusively) for the I/O. 이는 조각난 페이지 보호가 페이지를 수정하여 다른 스레드가 읽기에 적합하지 않은 페이지로 만들기 때문입니다.This is because the torn page protection modifies the page, making it unsuitable for any other thread to read. 체크섬 페이지 보호가 추가되거나 데이터베이스가 페이지 보호를 사용하지 않으면 페이지는 I/O에 대해 UP(업데이트) 래치됩니다.If checksum page protection is added, or the database uses no page protection, the page is latched with an UP(date) latch for the I/O. 이렇게 래치하면 쓰는 동안 다른 사람은 페이지를 수정할 수 없지만 읽는 사람은 페이지를 계속 사용할 수 있습니다.This latch prevents anyone else from modifying the page during the write, but still allows readers to use it. 디스크 I/O 페이지 보호 옵션에 대한 자세한 내용은 버퍼 관리를 참조하세요.For more information about disk I/O page protection options, see Buffer Management.

커밋되지 않은 페이지가 다음 3가지 방법 중 하나로 디스크에 기록됩니다.A dirty page is written to disk in one of three ways:

  • 지연 기록Lazy writing
    지연 기록기는 버퍼 캐시에서 자주 사용하지 않는 페이지를 제거하여 사용 가능한 버퍼를 제공하는 시스템 프로세스입니다.The lazy writer is a system process that keeps free buffers available by removing infrequently used pages from the buffer cache. 더티 페이지가 맨 처음으로 디스크에 기록됩니다.Dirty pages are first written to disk.

  • 고속 기록Eager writing
    고속 기록 프로세스에서는 대량 삽입(Bulk Insert) 또는 선택(Select Into)과 같은 기록되지 않은 작업과 관련된 커밋되지 않은 데이터 페이지를 기록합니다.The eager write process writes dirty data pages associated with nonlogged operations such as bulk insert and select into. 이 프로세스를 통해 병렬로 새 페이지를 만들고 기록할 수 있습니다.This process allows creating and writing new pages to take place in parallel. 즉, 디스크에 페이지를 기록하기 전에 전체 작업을 완료할 때까지 호출 작업이 대기할 필요가 없습니다.That is, the calling operation does not have to wait until the entire operation finishes before writing the pages to disk.

  • 검사점Checkpoint
    검사점 프로세스는 주기적으로 버퍼 캐시에서 지정된 특정 데이터베이스의 페이지를 포함하는 버퍼를 검색한 다음 모든 더티 페이지를 디스크에 기록합니다.The checkpoint process periodically scans the buffer cache for buffers with pages from a specified database and writes all dirty pages to disk. 검사점은 모든 더티 페이지가 디스크에 기록되었음을 확인하는 지점을 만들어 나중에 복구하는 동안 시간을 절약할 수 있습니다.Checkpoints save time during a later recovery by creating a point at which all dirty pages are guaranteed to have been written to disk. 사용자가 CHECKPOINT 명령을 사용하여 검사점 작업을 요청하거나 데이터베이스 엔진Database Engine 에서 마지막 검사점 이후 경과된 시간 및 사용된 로그 공간에 따라 자동 검사점을 생성할 수 있습니다.The user may request a checkpoint operation by using the CHECKPOINT command, or the 데이터베이스 엔진Database Engine may generate automatic checkpoints based on the amount of log space used and time elapsed since the last checkpoint. 또한In addition, a checkpoint is generated when certain activities occur. 검사점은 데이터 또는 로그 파일이 데이터베이스에서 제거 또는 추가되는 경우나 SQL Server 인스턴스가 중지되는 경우 등의 특정 작업이 수행될 때 생성됩니다.For example, when a data or log file is added or removed from a database, or when the instance of SQL Server is stopped. 자세한 내용은 검사점 및 로그의 활성 부분을 참조하세요.For more information, see Checkpoints and the Active Portion of the Log.

지연 기록, 고속 기록 및 검사점 프로세스는 I/O 작업이 완료할 때까지 대기하지 않습니다.The lazy writing, eager writing, and checkpoint processes do not wait for the I/O operation to complete. 이 프로세스는 항상 비동기 또는 겹친 I/O를 사용하고 기타 작업을 계속 진행하여 이후에 I/O 성공을 확인합니다.They always use asynchronous (or overlapped) I/O and continue with other work, checking for I/O success later. 이에 따라 SQL Server에서 해당하는 태스크에 대해 CPU 리소스와 I/O 리소스를 모두 최대화할 수 있습니다.This allows SQL Server to maximize both CPU and I/O resources for the appropriate tasks.

관련 항목:See Also

페이지 및 익스텐트 아키텍처 가이드 Pages and Extents Architecture Guide
페이지 읽기 Reading Pages