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

이 항목은 다음에 적용됩니다. 예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

페이지는 SQL Server의 기본 데이터 저장 단위입니다.The page is the fundamental unit of data storage in SQL Server. 익스텐트는 물리적인 연속 페이지 8개의 모음입니다.An extent is a collection of eight physically contiguous pages. 익스텐트는 효과적인 페이지 관리에 도움이 됩니다.Extents help efficiently manage pages. 이 가이드에서는 모든 SQL Server 버전에서 페이지 및 익스텐트를 관리하는 데 사용되는 데이터 구조에 대해 설명합니다.This guide describes the data structures that are used to manage pages and extents in all versions of SQL Server. 페이지 및 익스텐트의 아키텍처에 대한 이해는 효율적으로 동작하는 데이터베이스를 디자인하고 개발하는 데 있어 중요합니다.Understanding the architecture of pages and extents is important for designing and developing databases that perform efficiently.

페이지 및 익스텐트Pages and Extents

SQL Server의 기본 데이터 저장 단위는 페이지입니다.The fundamental unit of data storage in SQL Server is the page. 데이터베이스에서 데이터 파일(.mdf 또는 .ndf)에 할당되는 디스크 공간은 논리적인 페이지로 나뉘어지며 0에서 n 사이의 숫자가 연속으로 페이지에 매겨집니다.The disk space allocated to a data file (.mdf or .ndf) in a database is logically divided into pages numbered contiguously from 0 to n. 디스크 I/O 작업은 페이지 수준에서 수행됩니다.Disk I/O operations are performed at the page level. 즉, SQL Server가 전체 데이터 페이지를 읽거나 씁니다.That is, SQL Server reads or writes whole data pages.

익스텐트는 실제로 연속하는 8페이지를 모은 것으로 페이지를 효율적으로 관리하는 데 사용됩니다.Extents are a collection of eight physically contiguous pages and are used to efficiently manage the pages. 모든 페이지는 익스텐트로 저장됩니다.All pages are stored in extents.

페이지Pages

SQL Server에서 페이지 크기는 8KB입니다.In SQL Server, the page size is 8 KB. 즉, SQL Server 데이터베이스는 메가바이트당 페이지 128개를 저장합니다.This means SQL Server databases have 128 pages per megabyte. 각 페이지는 96바이트 머리글로 시작하는데 이 머리글은 페이지에 대한 시스템 정보를 저장하는 데 사용됩니다.Each page begins with a 96-byte header that is used to store system information about the page. 페이지 번호, 페이지 유형, 해당 페이지의 사용 가능한 공간 크기 그리고 해당 페이지를 소유하고 있는 개체의 할당 단위 ID와 같은 정보를 저장합니다.This information includes the page number, page type, the amount of free space on the page, and the allocation unit ID of the object that owns the page.

다음 표에서는 SQL Server 데이터베이스의 데이터 파일에서 사용되는 페이지 유형을 보여 줍니다.The following table shows the page types used in the data files of a SQL Server database.

페이지 유형Page type 내용Contents
DataData text in row를 ON으로 설정한 경우 온갖 데이터를 포함한 데이터 행. 단, 텍스트, ntext, 이미지, nvarchar(max), varchar(max), varbinary(max), xml 데이터 제외.Data rows with all data, except text, ntext, image, nvarchar(max), varchar(max), varbinary(max), and xml data, when text in row is set to ON.
인덱스Index 인덱스 항목Index entries.
텍스트/이미지Text/Image LOB(Large Object) 데이터 유형: (텍스트, ntext, 이미지, nvarchar(max), varchar(max), varbinary(max), xml 데이터)Large object data types: (text, ntext, image, nvarchar(max), varchar(max), varbinary(max), and xml data)
데이터 행이 8KB를 초과하는 경우 가변 길이 열: (varchar, nvarchar, varbinary, and sql_variant)Variable length columns when the data row exceeds 8 KB: (varchar, nvarchar, varbinary, and sql_variant)
전역 할당 맵, 공유 전역 할당 맵Global Allocation Map, Shared Global Allocation Map 익스텐트가 할당되었는지 여부에 대한 정보Information about whether extents are allocated.
페이지의 사용 가능한 공간(PFS)Page Free Space (PFS) 페이지 할당 및 페이지의 사용 가능한 공간에 대한 정보Information about page allocation and free space available on pages.
IAM(Index Allocation Map)Index Allocation Map 테이블 또는 인덱스에서 할당 단위당 사용하는 익스텐트에 대한 정보Information about extents used by a table or index per allocation unit.
대량 변경 맵Bulk Changed Map 마지막 BACKUP LOG 문 이후에 할당 단위당 대량 작업에 의해 수정된 익스텐트에 대한 정보Information about extents modified by bulk operations since the last BACKUP LOG statement per allocation unit.
차등 변경 맵Differential Changed Map 마지막 BACKUP DATABASE 문 이후에 할당 단위당 변경된 익스텐트에 대한 정보Information about extents that have changed since the last BACKUP DATABASE statement per allocation unit.

참고

로그 파일은 페이지는 포함하지 않으며 일련의 로그 레코드를 포함합니다.Log files do not contain pages; they contain a series of log records.

데이터 행은 머리글 바로 다음부터 시작하여 페이지에 차례로 나옵니다.Data rows are put on the page serially, starting immediately after the header. 행 오프셋 테이블은 페이지 끝에서 시작하는데 각 행 오프셋 테이블에는 해당 페이지에 있는 각 행에 대한 항목이 하나씩 있습니다.A row offset table starts at the end of the page, and each row offset table contains one entry for each row on the page. 각 항목은 해당 행의 첫째 바이트가 페이지 시작 지점에서 얼마나 떨어져 있는지를 기록합니다.Each entry records how far the first byte of the row is from the start of the page. 행 오프셋 테이블의 항목 순서는 페이지의 행 순서의 역순입니다.The entries in the row offset table are in reverse sequence from the sequence of the rows on the page.

page_architecture

대용량 행 지원Large Row Support

행들이 여러 페이지에 걸쳐 있을 수 없지만 그러한 행 부분들이 해당 행의 페이지를 벗어나서 해당 행이 실제로는 아주 커질 수 있습니다.Rows cannot span pages, however portions of the row may be moved off the row's page so that the row can actually be very large. 한 페이지의 단일 행에 데이터와 오버헤드가 최대 8,060바이트(8KB)까지 저장됩니다.The maximum amount of data and overhead that is contained in a single row on a page is 8,060 bytes (8 KB). 그러나 텍스트/이미지 페이지 유형에 저장되는 데이터는 여기에 포함되지 않습니다.However, this does not include the data stored in the Text/Image page type. 이 제한은 varchar, nvarchar, varbinary 또는 sql_variant 열이 있는 테이블에는 제한적으로 적용됩니다.This restriction is relaxed for tables that contain varchar, nvarchar, varbinary, or sql_variant columns. 테이블에 있는 모든 고정 및 변수 열의 전체 행 크기가 8,060바이트 한계를 초과하면 SQL Server는 하나 이상의 가변 길이 열을 가장 너비가 넓은 열부터 시작하여 ROW_OVERFLOW_DATA 할당 단위에 있는 페이지로 동적으로 옮깁니다.When the total row size of all fixed and variable columns in a table exceeds the 8,060 byte limitation, SQL Server dynamically moves one or more variable length columns to pages in the ROW_OVERFLOW_DATA allocation unit, starting with the column with the largest width. 삽입 또는 업데이트 작업으로 행의 전체 크기가 8060바이트 한계를 초과하면 이러한 작업이 수행됩니다.This is done whenever an insert or update operation increases the total size of the row beyond the 8060 byte limit. 열이 ROW_OVERFLOW_DATA 할당 단위의 페이지로 이동하면 IN_ROW_DATA 할당 단위에 있는 원래 페이지의 24바이트 포인터가 그대로 유지됩니다.When a column is moved to a page in the ROW_OVERFLOW_DATA allocation unit, a 24-byte pointer on the original page in the IN_ROW_DATA allocation unit is maintained. 후속 작업으로 행 크기가 줄면 SQL Server가 동적으로 열을 다시 원래 데이터 페이지로 이동합니다.If a subsequent operation reduces the row size, SQL Server dynamically moves the columns back to the original data page.

ExtentsExtents

익스텐트는 공간 관리의 기본 단위입니다.Extents are the basic unit in which space is managed. 하나의 익스텐트는 실제로 연속하는 8페이지 또는 64KB입니다.An extent is eight physically contiguous pages, or 64 KB. 즉, SQL Server 데이터베이스는 메가바이트당 익스텐트 16개를 저장합니다.This means SQL Server databases have 16 extents per megabyte.

SQL Server은 효율적인 공간 할당을 위해 적은 양의 데이터를 포함하는 테이블에 전체 익스텐트를 할당하지 않습니다.To make its space allocation efficient, SQL Server does not allocate whole extents to tables with small amounts of data. SQL Server의 익스텐트는 두 가지 유형입니다.SQL Server has two types of extents:

  • 균일 익스텐트는 단일 개체가 소유합니다. 또한 익스텐트의 전체 8페이지는 소유하는 개체만 사용할 수 있습니다.Uniform extents are owned by a single object; all eight pages in the extent can only be used by the owning object.
  • 혼합 익스텐트는 최대 8개의 개체가 공유할 수 있습니다.Mixed extents are shared by up to eight objects. 익스텐트의 8페이지를 각각 다른 개체가 소유할 수 있습니다.Each of the eight pages in the extent can be owned by a different object.

일반적으로 새 테이블이나 인덱스에는 혼합 익스텐트의 페이지가 할당됩니다.A new table or index is generally allocated pages from mixed extents. 테이블이나 인덱스의 페이지가 8페이지로 증가하면 후속 할당을 위해 균일 익스텐트를 사용하도록 전환됩니다.When the table or index grows to the point that it has eight pages, it then switches to use uniform extents for subsequent allocations. 인덱스에 8개의 페이지를 생성하는 데 충분한 행을 가진 기존 테이블에서 인덱스를 만드는 경우 인덱스에 대한 모든 할당 항목은 균일 익스텐트에 있습니다.If you create an index on an existing table that has enough rows to generate eight pages in the index, all allocations to the index are in uniform extents.

Extents

익스텐트 할당 및 빈 공간 관리Managing Extent Allocations and Free Space

익스텐트 할당을 관리하고 빈 공간을 추적하는 SQL Server 데이터 구조는 비교적 단순합니다.The SQL Server data structures that manage extent allocations and track free space have a relatively simple structure. 이 데이터 구조를 사용하면 다음과 같은 이점이 있습니다.This has the following benefits:

  • 빈 공간 정보는 빽빽하게 묶여 있으므로 이 정보를 포함하는 페이지의 수는 비교적 적습니다.The free space information is densely packed, so relatively few pages contain this information.
    따라서 할당 정보 검색에 필요한 디스크 읽기 횟수가 줄어들어 속도가 빨라집니다.This increases speed by reducing the amount of disk reads that are required to retrieve allocation information. 더 이상의 읽기가 필요하지 않으므로 할당 페이지가 메모리에 남아 있게 될 확률도 높아집니다.This also increases the chance that the allocation pages will remain in memory and not require more reads.

  • 대부분의 할당 정보는 서로 연결되어 있지 않으므로Most of the allocation information is not chained together. 유지 관리가 간편합니다.This simplifies the maintenance of the allocation information.
    각 페이지 할당 또는 할당 취소 작업을 신속하게 수행할 수 있으므로Each page allocation or deallocation can be performed quickly. 페이지를 할당 또는 할당 취소해야 하는 동시 태스크 간의 경합이 줄어듭니다.This decreases the contention between concurrent tasks having to allocate or deallocate pages.

익스텐트 할당 관리Managing Extent Allocations

SQL Server는 다음의 두 가지 형식의 할당 맵을 사용하여 익스텐트의 할당을 기록합니다.SQL Server uses two types of allocation maps to record the allocation of extents:

  • 전역 할당 맵(GAM)Global Allocation Map (GAM)
    GAM 페이지는 어떤 익스텐트가 할당되었는지 기록합니다.GAM pages record what extents have been allocated. 각 GAM은 64,000개의 익스텐트 또는 거의 4GB의 데이터를 처리합니다.Each GAM covers 64,000 extents, or almost 4 GB of data. GAM은 처리 간격으로 각 익스텐트에 대해 한 비트를 갖습니다.The GAM has one bit for each extent in the interval it covers. 이 비트가 1인 경우 익스텐트는 비어 있고 이 비트가 0인 경우 익스텐트는 할당된 상태입니다.If the bit is 1, the extent is free; if the bit is 0, the extent is allocated.

  • 공유 전역 할당 맵(SGAM)Shared Global Allocation Map (SGAM)
    SGAM 페이지는 어떤 익스텐트가 현재 혼합 익스텐트로 사용되고 있는지와 적어도 하나 이상의 사용되지 않은 페이지를 가지는지 기록합니다.SGAM pages record which extents are currently being used as mixed extents and also have at least one unused page. 각 SGAM은 64,000개의 익스텐트 또는 거의 4GB의 데이터를 처리합니다.Each SGAM covers 64,000 extents, or almost 4 GB of data. SGAM은 처리 간격으로 각 익스텐트에 대해 한 비트를 갖습니다.The SGAM has one bit for each extent in the interval it covers. 이 비트가 1인 경우 익스텐트가 혼합 익스텐트로 사용되고 있고 빈 페이지를 가지고 있는 상태입니다.If the bit is 1, the extent is being used as a mixed extent and has a free page. 이 비트가 0인 경우 익스텐트가 혼합 익스텐트로 사용되지 않거나, 혼합 익스텐트이고 모든 페이지가 사용되는 상태입니다.If the bit is 0, the extent is not used as a mixed extent, or it is a mixed extent and all its pages are being used.

각 익스텐트는 현재 사용 상태에 기반하여 GAM 및 SGAM에 설정된 다음의 비트 패턴을 갖습니다.Each extent has the following bit patterns set in the GAM and SGAM, based on its current use.

현재 익스텐트의 사용Current use of extent GAM 비트 설정GAM bit setting SGAM 비트 설정SGAM bit setting
비어 있음, 사용 중이지 않음Free, not being used 11 00
단일 익스텐트 또는 완전 혼합 익스텐트Uniform extent, or full mixed extent 00 00
빈 페이지가 있는 혼합 익스텐트Mixed extent with free pages 00 11

이러한 복잡함 때문에 단순한 익스텐트 관리 알고리즘의 필요성이 부각되었습니다.This causes simple extent management algorithms. 데이터베이스 엔진은 단일 익스텐트를 할당하기 위해 1비트에 해당하는 GAM을 검색하고 이를 0으로 설정합니다.To allocate a uniform extent, the Database Engine searches the GAM for a 1 bit and sets it to 0. 또한 빈 페이지가 있는 혼합 익스텐트를 찾기 위해 데이터베이스 엔진은 1비트에 해당하는 SGAM을 검색합니다.To find a mixed extent with free pages, the Database Engine searches the SGAM for a 1 bit. 데이터베이스 엔진은 혼합 익스텐트를 할당하기 위해 1비트에 해당하는 GAM을 검색하고 이를 0으로 설정한 다음 SGAM의 해당 비트를 1로 설정합니다.To allocate a mixed extent, the Database Engine searches the GAM for a 1 bit, sets it to 0, and then also sets the corresponding bit in the SGAM to 1. 또한 익스텐트 할당을 취소하기 위해 데이터베이스 엔진은 GAM 비트를 1로 설정하고 SGAM 비트를 0으로 설정합니다.To deallocate an extent, the Database Engine makes sure that the GAM bit is set to 1 and the SGAM bit is set to 0. 데이터베이스 엔진은 데이터베이스 내에서 균일하게 데이터를 분산시키므로 실제로 데이터베이스 엔진 내부에서 사용하는 알고리즘은 이 항목에서 설명하는 알고리즘보다 더 복잡합니다.The algorithms that are actually used internally by the Database Engine are more sophisticated than what is described in this topic, because the Database Engine distributes data evenly in a database. 그러나 실제 알고리즘의 경우 익스텐트 할당 정보 체인을 관리하지 않아도 되므로 이보다 더 단순합니다.However, even the real algorithms are simplified by not having to manage chains of extent allocation information.

빈 공간 추적Tracking Free Space

PFS(Page Free Space) 페이지는 개별 페이지의 할당 여부 및 각 페이지에 있는 빈 공간의 양과 같은 페이지의 할당 상태를 기록합니다.Page Free Space (PFS) pages record the allocation status of each page, whether an individual page has been allocated, and the amount of free space on each page. PFS는 각 페이지에 1바이트를 사용하여 페이지의 할당 여부를 기록하고 할당된 경우 페이지의 상태를 비어 있음, 1~50% 채워짐, 51~80% 채워짐, 81~95% 채워짐 또는 96~100% 채워짐으로 기록합니다.The PFS has one byte for each page, recording whether the page is allocated, and if so, whether it is empty, 1 to 50 percent full, 51 to 80 percent full, 81 to 95 percent full, or 96 to 100 percent full.

개체에 익스텐트가 할당된 후에는 데이터베이스 엔진에서 PFS 페이지를 사용하여 익스텐트의 할당된 페이지 또는 빈 페이지를 기록합니다.After an extent has been allocated to an object, the Database Engine uses the PFS pages to record which pages in the extent are allocated or free. 이 정보는 데이터베이스 엔진에서 새 페이지를 할당해야 할 때 사용됩니다.This information is used when the Database Engine has to allocate a new page. 힙 및 텍스트/이미지 페이지에 대해서만 페이지 내의 빈 공간의 양이 관리됩니다.The amount of free space in a page is only maintained for heap and Text/Image pages. PFS 페이지는 데이터베이스 엔진에서 새로 삽입된 행을 보관할 수 있는 빈 공간이 있는 페이지를 찾아야 할 때 사용됩니다.It is used when the Database Engine has to find a page with free space available to hold a newly inserted row. 인덱스의 경우 새 행을 삽입할 지점이 인덱스 키 값에 의해 설정되므로 페이지의 빈 공간을 추적할 필요가 없습니다.Indexes do not require that the page free space be tracked, because the point at which to insert a new row is set by the index key values.

PFS 페이지는 데이터 파일에서 파일 헤더 페이지 뒤의 첫째 페이지(페이지 번호 1)입니다.A PFS page is the first page after the file header page in a data file (page number 1). 이 페이지 다음에는 GAM 페이지(페이지 번호 2)와 SGAM 페이지(페이지 번호 3)가 있습니다.This is followed by a GAM page (page number 2), and then an SGAM page (page 3). 처음 PFS 페이지 다음에 각 8,000페이지의 PFS가 있습니다.There is a PFS page approximately 8,000 pages in size after the first PFS page. 2페이지의 첫 번째 GAM 페이지 다음에 64,000개의 익스텐트가 있는 다른 GAM 페이지가 있고 3페이지의 첫 번째 SGAM 페이지 다음에 64,000개의 익스텐트가 있는 다른 SGAM 페이지가 있습니다.There is another GAM page 64,000 extents after the first GAM page on page 2, and another SGAM page 64,000 extents after the first SGAM page on page 3. 다음 그림은 익스텐트 할당 및 관리를 위해 데이터베이스 엔진에서 사용하는 페이지 순서를 보여 줍니다.The following illustration shows the sequence of pages used by the Database Engine to allocate and manage extents.

manage_extents

개체에서 사용하는 공간 관리Managing Space Used by Objects

IAM(Index Allocation Map) 페이지는 할당 단위에 사용되는 데이터베이스 파일의 4GB 부분에 익스텐트를 매핑합니다.An Index Allocation Map (IAM) page maps the extents in a 4-gigabyte (GB) part of a database file used by an allocation unit. 할당 단위의 유형은 다음 3가지가 있습니다.An allocation unit is one of three types:

  • IN_ROW_DATAIN_ROW_DATA
    힙 또는 인덱스의 파티션을 포함합니다.Holds a partition of a heap or index.

  • LOB_DATALOB_DATA
    xml, varbinary(max), varchar(max) 같은 LOB(Large Object) 데이터 유형에 적용됩니다.Holds large object (LOB) data types, such as xml, varbinary(max), and varchar(max).

  • ROW_OVERFLOW_DATAROW_OVERFLOW_DATA
    varchar, nvarchar, varbinary 또는 sql_variant 열에 저장된 가변 길이 데이터 중 행 크기 제한인 8,060바이트를 초과하는 가변 길이 데이터에 적용됩니다.Holds variable length data stored in varchar, nvarchar, varbinary, or sql_variant columns that exceed the 8,060 byte row size limit.

힙 또는 인덱스의 각 파티션에는 적어도 하나의 IN_ROW_DATA 할당 단위가 있습니다.Each partition of a heap or index contains at least an IN_ROW_DATA allocation unit. 또한 힙 또는 인덱스 스키마에 따라 LOB_DATA 또는 ROW_OVERFLOW_DATA 할당 단위도 포함될 수 있습니다.It may also contain a LOB_DATA or ROW_OVERFLOW_DATA allocation unit, depending on the heap or index schema. 할당 단위에 대한 자세한 내용은 Table and Index Organization(테이블 및 인덱스 구성)을 참조하세요.For more information about allocation units, see Table and Index Organization.

IAM 페이지는 파일에서 4GB 범위를 처리하며 이는 GAM 또는 SGAM 페이지와 동일합니다.An IAM page covers a 4-GB range in a file and is the same coverage as a GAM or SGAM page. 할당 단위에 하나 이상의 파일에서 매핑된 익스텐트가 포함되어 있거나 4GB를 넘는 파일 범위가 포함되어 있으면 하나의 IAM 체인에 여러 IAM 페이지가 연결됩니다.If the allocation unit contains extents from more than one file, or more than one 4-GB range of a file, there will be multiple IAM pages linked in an IAM chain. 따라서 각 할당 단위에는 익스텐트가 매핑된 각 파일에 대해 하나 이상의 IAM 페이지가 포함됩니다.Therefore, each allocation unit has at least one IAM page for each file on which it has extents. 또한 할당 단위에 할당된 파일의 익스텐트 범위가 단일 IAM 페이지가 기록할 수 있는 범위를 초과하는 경우 파일에 IAM 페이지가 두 개 이상 있을 수 있습니다.There may also be more than one IAM page on a file, if the range of the extents on the file allocated to the allocation unit exceeds the range that a single IAM page can record.

iam_pages

IAM 페이지는 필요에 따라 각 할당 단위에 대해 할당되고 파일에서 임의의 위치에 배치됩니다.IAM pages are allocated as required for each allocation unit and are located randomly in the file. 시스템 뷰(sys.system_internals_allocation_units)는 할당 단위에 대한 첫 번째 IAM 페이지를 가리킵니다.The system view, sys.system_internals_allocation_units, points to the first IAM page for an allocation unit. 해당 할당 단위에 대한 모든 IAM 페이지는 체인으로 연결됩니다.All the IAM pages for that allocation unit are linked in a chain.

중요

sys.system_internals_allocation_units 시스템 뷰는 내부 전용이며 변경될 수 있습니다.The sys.system_internals_allocation_units system view is for internal use only and is subject to change. 호환성은 보장되지 않습니다.Compatibility is not guaranteed.

iam_chain

할당 단위별로 한 체인에 연결된 IAM 페이지 IAM 페이지에는 IAM 페이지에서 매핑하는 익스텐트 범위 중 시작 익스텐트를 표시하는 헤더가 있습니다.IAM pages linked in a chain per allocation unit An IAM page has a header that indicates the starting extent of the range of extents mapped by the IAM page. 또한 IAM 페이지는 각 비트가 하나의 익스텐트를 나타내는 대형 비트맵을 갖습니다.The IAM page also has a large bitmap in which each bit represents one extent. 맵의 첫째 비트는 범위의 첫째 익스텐트를 나타내고 둘째 비트는 둘째 익스텐트를 나타냅니다.The first bit in the map represents the first extent in the range, the second bit represents the second extent, and so on. 비트가 0인 경우 해당 익스텐트는 IAM을 소유하는 할당 단위에 할당되지 않은 것입니다.If a bit is 0, the extent it represents is not allocated to the allocation unit owning the IAM. 비트가 1인 경우 해당 익스텐트는 IAM 페이지를 소유하는 할당 단위에 할당된 것입니다.If the bit is 1, the extent it represents is allocated to the allocation unit owning the IAM page.

SQL Server 데이터베이스 엔진에서 새 행을 삽입해야 하는데 현재 페이지에 사용 가능한 공간이 없으면 IAM 및 PFS 페이지를 사용하여 할당할 페이지를 찾거나 힙 또는 텍스트/이미지 페이지의 경우 행을 보관하기에 충분한 공간이 있는 페이지를 찾습니다.When the SQL Server Database Engine has to insert a new row and no space is available in the current page, it uses the IAM and PFS pages to find a page to allocate, or, for a heap or a Text/Image page, a page with sufficient space to hold the row. 데이터베이스 엔진은 IAM 페이지를 사용하여 할당 단위에 할당된 익스텐트를 찾습니다.The Database Engine uses the IAM pages to find the extents allocated to the allocation unit. 각 익스텐트에 대해 데이터베이스 엔진은 PFS 페이지를 검색하여 사용할 수 있는 페이지가 있는지 확인합니다.For each extent, the Database Engine searches the PFS pages to see if there is a page that can be used. 각 IAM 및 PFS 페이지는 많은 수의 데이터 페이지를 포함하므로 데이터베이스에는 IAM 및 PFS 페이지가 거의 없습니다.Each IAM and PFS page covers lots of data pages, so there are few IAM and PFS pages in a database. 이는 IAM 및 PFS 페이지가 대개 SQL Server 버퍼 풀의 메모리에 있으므로 빠르게 검색할 수 있음을 의미합니다.This means that the IAM and PFS pages are generally in memory in the SQL Server buffer pool, so they can be searched quickly. 인덱스의 경우 새 행의 삽입 지점은 인덱스 키에 의해 설정됩니다.For indexes, the insertion point of a new row is set by the index key. 이 경우 앞서 설명한 검색 프로세스가 실행되지 않습니다.In this case, the search process previously described does not occur.

데이터베이스 엔진은 삽입되는 행을 보관하기에 충분한 공간을 가진 기존 익스텐트에서 페이지를 빠르게 찾을 수 없을 때만 할당 단위에 새 익스텐트를 할당합니다.The Database Engine allocates a new extent to an allocation unit only when it cannot quickly find a page in an existing extent with sufficient space to hold the row being inserted. 데이터베이스 엔진은 비례 할당 알고리즘을 사용하여 파일 그룹에서 사용할 수 있는 파일의 익스텐트를 할당합니다.The Database Engine allocates extents from those available in the filegroup using a proportional allocation algorithm. 하나의 파일 그룹에 두 개의 파일이 있고 이 중 한 파일이 다른 파일에 비해 2배의 빈 공간을 가지는 경우 빈 공간이 더 많은 파일에서 두 페이지가 할당되고 빈 공간이 적은 다른 파일에서 한 페이지가 할당되는 방식으로 할당이 수행됩니다.If a filegroup has two files and one has two times the free space as the other, two pages will be allocated from the file with the available space for every one page allocated from the other file. 따라서 파일 그룹의 모든 파일이 유사한 공간 비율을 사용하게 됩니다.This means that every file in a filegroup should have a similar percentage of space used.

수정된 익스텐트 추적Tracking Modified Extents

데이터베이스 엔진에서는 두 개의 내부 데이터 구조를 사용하여 대량 복사 작업에 의해 수정된 익스텐트와 마지막 전체 백업 이후에 수정된 익스텐트를 추적할 수 있습니다.SQL Server uses two internal data structures to track extents modified by bulk copy operations and extents modified since the last full backup. 이 두 데이터 구조를 사용하면 차등 백업의 속도가 크게 향상됩니다.These data structures greatly speed up differential backups. 또한 데이터베이스가 대량 로그 복구 모델을 사용할 경우 대량 복사 작업의 로깅 속도도 향상됩니다.They also speed up the logging of bulk copy operations when a database is using the bulk-logged recovery model. 이러한 구조들은 GAM(전역 할당 맵)과 SGAM(공유 전역 할당 맵) 페이지처럼 각 비트가 단일 익스텐트를 표시하는 비트맵에 해당합니다.Like the Global Allocation Map (GAM) and Shared Global Allocation Map (SGAM) pages, these structures are bitmaps in which each bit represents a single extent.

  • DCM(차등 변경 맵)Differential Changed Map (DCM)
    마지막 BACKUP DATABASE 문 이후에 변경된 익스텐트를 추적합니다.This tracks the extents that have changed since the last BACKUP DATABASE statement. 익스텐트의 비트가 1인 경우 익스텐트는 마지막 BACKUP DATABASE 문 이후에 수정된 것입니다.If the bit for an extent is 1, the extent has been modified since the last BACKUP DATABASE statement. 이 비트가 0인 경우 익스텐트는 수정되지 않은 것입니다.If the bit is 0, the extent has not been modified. 차등 백업의 경우 DCM 페이지만 읽고도 어떤 익스텐트가 수정되었는지 알 수 있습니다.Differential backups read just the DCM pages to determine which extents have been modified. 이를 통해 차등 백업이 검색해야 하는 페이지의 수가 상당히 줄어듭니다.This greatly reduces the number of pages that a differential backup must scan. 차등 백업이 실행되는 시간의 길이는 데이터베이스의 전체 크기가 아니라 마지막 BACKUP DATABASE 문 이후에 수정된 익스텐트의 수에 비례합니다.The length of time that a differential backup runs is proportional to the number of extents modified since the last BACKUP DATABASE statement and not the overall size of the database.

  • BCM(대량 변경 맵)Bulk Changed Map (BCM)
    마지막 BACKUP LOG 문 이후에 대량 로그 작업에 의해 수정된 익스텐트를 추적합니다.This tracks the extents that have been modified by bulk logged operations since the last BACKUP LOG statement. 익스텐트의 비트가 1인 경우 익스텐트는 마지막 BACKUP LOG 문 이후에 대량 기록 작업에 의해 수정된 것입니다.If the bit for an extent is 1, the extent has been modified by a bulk logged operation after the last BACKUP LOG statement. 이 비트가 0인 경우 익스텐트는 대량 로그 작업에 의해 수정되지 않은 것입니다.If the bit is 0, the extent has not been modified by bulk logged operations. BCM 페이지가 모든 데이터베이스에 표시되더라도 데이터베이스가 대량 로그 복구 모델을 사용할 때만 적절합니다.Although BCM pages appear in all databases, they are only relevant when the database is using the bulk-logged recovery model. 이러한 복구 모델에서 BACKUP LOG가 수행되면 백업 프로세스는 수정된 익스텐트의 BCM을 검색하고In this recovery model, when a BACKUP LOG is performed, the backup process scans the BCMs for extents that have been modified. 이런 익스텐트를 로그 백업에 포함시킵니다.It then includes those extents in the log backup. 따라서 데이터베이스가 데이터베이스 백업과 일련의 트랜잭션 로그 백업에서 복원될 경우 대량 로그 작업이 복구될 수 있습니다.This lets the bulk logged operations be recovered if the database is restored from a database backup and a sequence of transaction log backups. 단순 복구 모델을 사용 중인 데이터베이스에서는 대량 로그 작업이 기록되지 않으므로 BCM 페이지가 적절하지 않습니다.BCM pages are not relevant in a database that is using the simple recovery model, because no bulk logged operations are logged. 이 복구 모델은 대량 로그 작업을 전체 로그 작업으로 취급하므로 전체 복구 모델을 사용하는 데이터베이스에서도 BCM 페이지는 적절하지 않습니다.They are not relevant in a database that is using the full recovery model, because that recovery model treats bulk logged operations as fully logged operations.

DCM 페이지와 BCM 페이지 사이의 간격은 GAM 페이지와 SGAM 페이지의 간격인 64,000개의 익스텐트와 동일합니다.The interval between DCM pages and BCM pages is the same as the interval between GAM and SGAM page, 64,000 extents. DCM 및 BCM 페이지는 물리적 파일에서 GAM 및 SGAM 페이지의 뒤에 있습니다.The DCM and BCM pages are located behind the GAM and SGAM pages in a physical file:

special_page_order