메모리 액세스에 최적화된 테이블에 대한 내구성Durability for Memory-Optimized Tables

이 항목은 다음에 적용됩니다.예SQL Server(2014부터 시작)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

메모리 내 OLTPIn-Memory OLTP 는 메모리 액세스에 최적화된 테이블에 대한 완전한 내구성을 제공합니다. provides full durability for memory-optimized tables. 메모리 액세스에 최적화된 테이블을 변경한 트랜잭션을 커밋할 때 SQL ServerSQL Server 를 사용하면 (디스크 기반 테이블과 마찬가지로) 기본 저장소를 사용할 수 있는 경우 변경 내용이 영구적이 됩니다(데이터베이스 다시 시작 유지).When a transaction that changed a memory-optimized table commits, SQL ServerSQL Server (as it does for disk-based tables), guarantees that the changes are permanent (will survive a database restart), provided the underlying storage is available. 내구성의 두 가지 주요 구성 요소는 트랜잭션 로깅 및 디스크상 저장소에 데이터 변경 내용 저장입니다.There are two key components of durability: transaction logging and persisting data changes to on-disk storage.

내구성이 있는 테이블의 크기 제한에 대한 자세한 내용은 메모리 액세스에 최적화된 테이블에 필요한 메모리 예측을 참조하세요.For details on any size limitations for durable tables see Estimate Memory Requirements for Memory-Optimized Tables.

트랜잭션 로그Transaction Log

디스크 기반 테이블 또는 메모리 액세스에 최적화된 내구성이 있는 테이블에 대한 모든 변경은 하나 이상의 트랜잭션 로그 레코드에 캡처됩니다.All changes made to disk-based tables or durable memory-optimized tables are captured in one or more transaction log records. 트랜잭션이 커밋될 때 SQL ServerSQL Server 는 트랜잭션이 커밋된 응용 프로그램 또는 사용자 세션과 통신하기 전에 디스크에 트랜잭션과 관련된 로그 레코드를 씁니다.When a transaction commits, SQL ServerSQL Server writes the log records associated with the transaction to disk before communicating to the application or user session that the transaction has committed. 이렇게 하면 트랜잭션에 의한 변경 사항이 내구성을 가집니다.This guarantees that changes made by the transaction are durable. 메모리 액세스에 최적화된 테이블에 대한 트랜잭션 로그는 디스크 기반 테이블에서 사용되는 동일한 로그 스트림과 완전히 통합되어 있습니다.The transaction log for memory-optimized tables is fully integrated with the same log stream used by disk-based tables. 이러한 통합에 따라 기존 트랜잭션 로그 백업, 복구 및 복원 작업이 추가 단계를 필요로 하지 않고 계속 수행될 수 있습니다.This integration allows existing transaction log backup, recover, and restore operations to continue to work without requiring any additional steps. 그러나 메모리 내 OLTPIn-Memory OLTP 가 워크로드의 트랜잭션 처리량을 크게 늘릴 수 있기 때문에 로그 IO에 성능 병목 현상이 발생할 수 있습니다.However, since 메모리 내 OLTPIn-Memory OLTP can increase transaction throughput of your workload significantly, log IO may become a performance bottleneck. 이 증가한 처리량을 견디기 위해 로그 IO 하위 시스템에서 증가한 로드를 처리할 수 있습니다.To sustain this increased throughput, ensure the log IO subsystem can handle the increased load.

데이터 및 델타 파일Data and Delta Files

메모리 액세스에 최적화된 테이블의 데이터는 하나 이상의 인덱스를 통해 연결된 메모리 내 힙 데이터 구조의 자유 형식 데이터 행으로 메모리에 저장됩니다.The data in memory-optimized tables is stored as free-form data rows in an in-memory heap data structure, and are linked through one or more indexes in memory. 디스크 기반 테이블에 사용되는 페이지 구조와 같이 데이터 행에 대한 페이지 구조는 없습니다.There are no page structures for data rows, such as those used for disk-based tables. 장기 지속성을 위해 그리고 트랜잭션 로그의 잘림을 허용하기 위해 메모리 액세스에 최적화된 테이블은 데이터 및 델타 파일 집합에서 유지됩니다.For long term persistence and to allow truncation of the transction log, operations on memory-optimized tables are persisted in a set of data and delta files. 이러한 파일은 비동기 백그라운드 프로세스를 사용하여 트랜잭션 로그를 기반으로 생성됩니다.These files are generated based on the transaction log, using an asynchronous background process. 데이터 및 델타 파일은 (FILESTREAM 데이터에 사용되는 동일한 메커니즘을 사용하는) 하나 이상의 컨테이너에 있습니다.The data and delta files are located in one or more containers (using the same mechanism used for FILESTREAM data). 이러한 컨테이너는 메모리 액세스에 최적화된 파일 그룹의 일부입니다.These containers are part of a memory-optimized filegroup.

데이터는 이 파일에 기록될 때 회전 미디어의 디스크 대기 시간을 최소화하는 엄격한 순차적 방식으로 기록됩니다.Data is written to these files in a strictly sequential fashion, which minimizes disk latency for spinning media. 서로 다른 디스크의 여러 컨테이너를 사용하여 I/O 작업을 분산할 수 있습니다.You can use multiple containers on different disks to distribute the I/O activity. 서로 다른 디스크의 여러 컨테이너에 있는 데이터 및 델타 파일은 디스크의 데이터 및 델타 파일에서 메모리로 데이터를 읽을 때 데이터베이스 복원/복구 성능을 향상시킵니다.Data and delta files in multiple containers on different disks will increase database restore/recovery performance when data is read from the data and delta files on disk, into memory.

사용자 트랜잭션은 데이터 및 델타 파일에 직접 액세스하지 않습니다.User transactions do not directly access data and delta files. 모든 데이터 읽기 및 쓰기에서는 메모리 내 데이터 구조를 사용합니다.All data reads and writes use in-memory data structures.

데이터 파일The Data File

데이터 파일에는 여러 트랜잭션에서 삽입 또는 업데이트 작업 중에 삽입된 하나 이상의 메모리 액세스에 최적화된 테이블에서 가져온 행이 포함되어 있습니다.A data file contains rows from one or more memory-optimized tables that were inserted by multiple transactions as part of INSERT or UPDATE operations. 예를 들어, 메모리 액세스에 최적화된 테이블 T1에서 한 행을 가져오고 메모리 액세스에 최적화된 테이블 T2에서 다음 행을 가져올 수 있습니다.For example, one row can be from memory-optimized table T1 and the next row can be from memory-optimized table T2. 트랜잭션 로그의 트랜잭션 순서로 데이터 파일에 행을 추가하여 데이터 액세스를 순차적으로 지정합니다.The rows are appended to the data file in the order of transactions in the transaction log, making data access sequential. 이렇게 하면 임의 I/O와 비교할 때 상당히 나은 I/O 처리량이 가능합니다.This enables an order of magnitude better I/O throughput compared to random I/O.

데이터 파일이 꽉 차면 새 트랜잭션에서 삽입되는 행은 다른 데이터 파일에 저장됩니다.Once the data file is full, the rows inserted by new transactions are stored in another data file. 시간이 지날수록 메모리 액세스에 최적화된 영구 테이블의 행은 많은 데이터 파일 중 하나에 저장되고 결합되지 않았지만 연속하는 트랜잭션 범위에서 가져온 행이 각 데이터 파일에 포함됩니다.Over time, the rows from durable memory-optimized tables are stored in one of more data files and each data file containing rows from a disjoint but contiguous range of transactions. 예를 들어, 트랜잭션 커밋 타임스탬프 범위가 (100, 200)인 데이터 파일에는 커밋 타임스탬프가 100보다 크고 200보다 작거나 같은 트랜잭션에 의해 삽입된 모든 행이 포함됩니다.For example a data file with transaction commit timestamp in the range of (100, 200) has all the rows inserted by transactions that have commit timestamp greater than 100 and less than or equal to 200. 커밋 타임스탬프는 커밋 준비가 되면 트랜잭션에 할당되는 단순하게 증가하는 숫자입니다.The commit timestamp is a monotonically increasing number assigned to a transaction when it is ready to commit. 각 트랜잭션에는 고유한 커밋 타임스탬프가 있습니다.Each transaction has a unique commit timestamp.

행을 삭제하거나 업데이트해도 해당 행은 데이터 파일에서 제거되거나 변경되지 않지만 삭제된 행은 다른 파일 형식인 델타 파일로 추적됩니다.When a row is deleted or updated, the row is not removed or changed in-place in the data file but the deleted rows are tracked in another type of file: the delta file. 업데이트 작업은 각 행에 대한 삭제 및 삽입 작업의 튜플로 처리됩니다.Update operations are processed as a tuple of delete and insert operations for each row. 따라서 데이터 파일에서 임의의 IO가 제거됩니다.This eliminates random IO on the data file.

크기: 각 데이터 파일의 크기는 16GB보다 메모리가 더 큰 컴퓨터의 경우 약 128MB, 16GB보다 메모리가 더 작거나 같은 컴퓨터의 경우 약 16MB입니다.Size: Each data file is sized approximately to 128MB for computers with memory greater than 16GB, and 16MB for computers with less than or equal to 16GB. SQL Server 2016SQL Server 2016 에서 SQL Server는 저장소 하위 시스템 속도가 충분하다고 판단되는 경우 큰 검사점 모드를 사용할 수 있습니다.In SQL Server 2016SQL Server 2016 SQL Server can use large checkpoint mode if it deems the storage subsystem is fast enough. 큰 검사점 모드에서 데이터 파일 크기는 1GB로 조정됩니다.In large checkpoint mode, data files are sized at 1GB. 이렇게 하면 처리량이 높은 워크로드에 대한 저장소 하위 시스템의 효율성을 높일 수 있습니다.This allows for greater efficiency in the storage subsystem for high-throughput workloads.

델타 파일The Delta File

각 데이터 파일은 트랜잭션 범위가 동일하고 해당 트랜잭션 범위에서 트랜잭션에 의해 삽입된 삭제된 행을 추적하는 델타 파일과 쌍을 이룹니다.Each data file is paired with a delta file that has the same transaction range and tracks the deleted rows inserted by transactions in the transaction range. 이 데이터 및 델타 파일은 CFP(검사점 파일 쌍)이라고 하며, 병합 작업을 위한 단위는 물론 할당 및 할당 취소 작업의 단위이기도 합니다.This data and delta file is referred to as a Checkpoint File Pair (CFP) and it is the unit of allocation and deallocation as well as the unit for Merge operations. 예를 들어, 트랜잭션 범위 (100, 200)에 해당하는 델타 파일은 범위 (100, 200)의 트랜잭션에 의해 삽입된 삭제된 행을 저장합니다.For example, a delta file corresponding to transaction range (100, 200) will store deleted rows that were inserted by transactions in the range (100, 200). 데이터 파일과 마찬가지로 델타 파일은 순차적으로 액세스됩니다.Like data files, the delta file is accessed sequentially.

행이 삭제되면 해당 행은 데이터 파일에서 제거되지 않지만 이 데이터 행이 삽입된 트랜잭션 범위에 연결된 델타 파일에 행에 대한 참조가 추가됩니다.When a row is deleted, the row is not removed from the data file but a reference to the row is appended to the delta file associated with the transaction range where this data row was inserted. 삭제할 행이 데이터 파일에 이미 있기 때문에 델타 파일은 참조 정보 {inserting_tx_id, row_id, deleting_tx_id } 만 원래 삭제 또는 업데이트 작업의 트랜잭션 로그 순서에 따라 저장합니다.Since the row to be deleted already exists in the data file, the delta file only stores the reference information {inserting_tx_id, row_id, deleting_tx_id } and it follows the transactional log order of the originating delete or update operations.

크기: 각 데이터 파일의 크기는 16GB보다 메모리가 더 큰 컴퓨터의 경우 약 16MB, 16GB보다 메모리가 더 작거나 같은 컴퓨터의 경우 약 1MB입니다.Size: Each delta file is sized approximately to 16MB for computers with memory greater than 16GB, and 1MB for computers with less than or equal to 16GB. SQL Server 2016SQL Server 2016 부터 SQL Server는 저장소 하위 시스템 속도가 충분하다고 판단되는 경우 큰 검사점 모드를 사용할 수 있습니다.Starting SQL Server 2016SQL Server 2016 SQL Server can use large checkpoint mode if it deems the storage subsystem is fast enough. 큰 검사점 모드에서 델타 파일 크기는 128MB로 조정됩니다.In large checkpoint mode, delta files are sized at 128MB.

데이터 및 델타 파일 채우기Populating Data and Delta Files

데이터 및 델타 파일은 메모리 액세스에 최적화된 테이블에서 커밋된 트랜잭션에 의해 생성되는 트랜잭션 로그 레코드를 기준으로 채워지고 삽입된 행과 삭제된 행에 대한 정보를 해당 데이터 및 델타 파일에 추가합니다.Data and delta file are populated based on the transaction log records generated by committed transactions on memory-optimized tables and appends information about the inserted and deleted rows into appropriate data and delta files. 검사점이 완료되면 데이터/인덱스 페이지가 임의 I/O로 플러시되는 디스크 기반 테이블과 달리 메모리 액세스에 최적화된 테이블은 계속해서 백그라운드 작업으로 지속됩니다.Unlike disk-based tables where data/index pages are flushed with random I/O when checkpoint is done, the persistence of memory-optimized table is continuous background operation. 트랜잭션을 삭제하거나 이전 트랜잭션에 의해 삽입된 모든 행을 업데이트하기 때문에 여러 개의 델타 파일이 액세스됩니다.Multiple delta files are accessed because a transaction can delete or update any row that was inserted by any previous transaction. 삭제 정보는 항상 델타 파일의 끝에 추가됩니다.Deletion information is always appended at the end of the delta file. 예를 들어, 커밋 타임스탬프가 600인 트랜잭션은 한 행을 삽입하고 아래 그림처럼 150, 250 및 450의 커밋 타임스탬프를 갖는 트랜잭션에 의해 삽입된 행을 삭제합니다.For example, a transaction with a commit timestamp of 600 inserts one new row and deletes rows inserted by transactions with a commit timestamp of 150, 250 and 450 as shown in the picture below. 모두 4번의 파일 I/O 작업(삭제된 행에 3번, 새로 삽입된 행에 1번)이 해당 델타 및 데이터 파일에 대한 추가 전용 작업입니다.All 4 file I/O operations (three for deleted rows and 1 for the newly inserted rows), are append-only operations to the corresponding delta and data files.

메모리 액세스에 최적화된 테이블의 로그 레코드를 읽습니다.Read log records for memory-optimized tables.

데이터 및 델타 파일 액세스Accessing Data and Delta Files

데이터 및 델타 파일 쌍은 다음이 발생할 때 액세스됩니다.Data and delta file pairs are accessed when the following occurs.

오프라인 검사점 작업자Offline checkpoint worker(s)
이 스레드는 메모리 액세스에 최적화된 데이터 행을 해당 데이터 및 델타 파일 쌍에 삽입하고 삭제합니다.This thread appends inserts and deletes to memory-optimized data rows, to the corresponding data and delta file pairs. SQL Server 2014SQL Server 2014 에는 오프라인 검사점 작업자가 하나이며 SQL Server 2016SQL Server 2016 부터는 여러 오프라인 검사점 작업자가 있습니다.In SQL Server 2014SQL Server 2014 there is one offline checkpoint worker; starting SQL Server 2016SQL Server 2016 there are multiple checkpoint workers.

병합 작업Merge operation
작업은 하나 이상의 데이터 및 델타 파일 쌍을 병합하고 새로운 데이터 및 델타 파일 쌍을 만듭니다.The operation merges one or more data and delta file pairs and creates a new data and delta file pair.

충돌 복구 동안During crash recovery
SQL ServerSQL Server 을 다시 시작하거나 데이터베이스가 다시 온라인이 되면 데이터 및 델타 파일 쌍을 사용하여 메모리 액세스에 최적화된 데이터가 채워집니다.When SQL ServerSQL Server is restarted or the database is brought back online, the memory-optimized data is populated using the data and delta file pairs. 델타 파일은 해당 데이터 파일에서 행을 읽을 때 삭제된 행에 대한 필터의 역할을 합니다.The delta file acts as a filter for the deleted rows when reading the rows from the corresponding data file. 각 데이터 및 델타 파일 쌍은 서로 독립적이기 때문에 이러한 파일은 메모리에 데이터를 채우는 데 걸리는 시간을 줄이기 위해 병렬로 로드됩니다.Because each data and delta file pair is independent, these files are loaded in parallel to reduce the time taken to populate data into memory. 데이터가 메모리로 로드되면 메모리 내 OLTP 엔진은 메모리 액세스에 최적화된 데이터가 완전하도록 검사점 파일에 아직 포함되지 않은 활성 트랜잭션 로그 레코드를 적용합니다.Once the data has been loaded into memory, the In-Memory OLTP engine applies the active transaction log records not yet covered by the checkpoint files so that the memory-optimized data is complete.

복원 작업 동안During restore operation
메모리 내 OLTP 검사점 파일이 데이터베이스 백업에서 만들어진 다음 하나 이상의 트랜잭션 로그 백업이 적용됩니다.The In-Memory OLTP checkpoint files are created from the database backup, and then one or more transaction log backups are applied. 충돌 복구와 마찬가지로 메모리 내 OLTP 엔진은 데이터를 병렬로 메모리로 로드하여 복구 시간에 미치는 영향을 최소화합니다.As with crash recovery, the In-Memory OLTP engine loads data into memory in parallel, to minimize the impact on recovery time.

데이터 및 델타 파일 병합Merging Data and Delta Files

메모리 액세스에 최적화된 테이블에 대한 데이터는 하나 이상의 데이터 및 델타 파일 쌍(검사점 파일 쌍 또는 CFP 라고도 함)에 저장됩니다.The data for memory optimized tables is stored in one or more data and delta file pairs (also called a checkpoint file pair, or CFP). 데이터 파일에는 삽입된 행이 저장되고 델타 파일은 삭제된 행을 참조합니다.Data files store inserted rows and delta files reference deleted rows. OLTP 작업을 실행하는 동안 DML 작업에서는 행을 업데이트, 삽입 및 삭제하고, 새 행을 유지하기 위한 새 CFP가 만들어지고, 삭제된 행에 대한 참조가 델타 파일에 추가됩니다.During the execution of an OLTP workload, as the DML operations update, insert, and delete rows, new CFPs are created to persist the new rows, and the reference to the deleted rows is appended to delta files.

시간이 지날수록 DML 작업으로 데이터 및 델타 파일 수가 증가되어 디스크 공간 사용량이 늘어나고 복구 시간이 증가됩니다.Over time, with DML operations, the number of data and delta files grow causing, causing increased disk space usage and increased recovery time..

이러한 비효율성을 방지하려면 아래에 설명된 병합 정책에 따라 오래된 닫힌 데이터 및 델타 파일을 병합하여 더 적은 수의 파일로 동일한 데이터 집합을 나타내도록 저장소 배열을 압축합니다.To help prevent these inefficiencies, the older closed data and delta files are merged, based on a merge policy described below, so the storage array is compacted to represent the same set of data, with a reduced number of files.

병합 작업에서는 내부적으로 정의된 병합 정책에 따라 하나 이상의 인접한 닫힌 CFP(검사점 파일 쌍), 즉 병합 원본이라고 하는 데이터 및 델타 파일 쌍을 입력으로 사용하여 병합 대상이라는 단일 결과 CFP를 생성합니다.The merge operation takes as input one or more adjacent closed checkpoint file pairs (CFPs), which are pairs of data and delta files, (called merge source) based on an internally defined merge policy, and produces one resultant CFP, called the merge target. 원본 CFP의 각 델타 파일에 있는 항목은 해당 데이터 파일에서 행을 필터링하여 필요 없는 데이터 행을 제거하는 데 사용됩니다.The entries in each delta file of the source CFPs are used to filter rows from the corresponding data file to remove the data rows that are not needed. 원본 CFP의 나머지 행은 하나의 대상 CFP로 통합됩니다.The remaining rows in the source CFPs are consolidated into one target CFP. 병합이 완료되면 원본 CFP(병합 원본)가 결과 병합 대상 CFP로 대체됩니다.After the merge is complete, the resultant merge-target CFP replaces the source CFPs (merge sources). 병합 원본 CFP는 전환 단계를 완료한 후 저장소에서 제거됩니다.The merge-source CFPs go through a transition phase before they are removed from storage.

아래 예제에서 메모리 액세스에 최적화된 테이블 파일 그룹에는 이전 트랜잭션의 데이터를 포함하는 타임스탬프 500에 4개의 데이터와 델타 파일 쌍이 있습니다.In the example below, the memory-optimized table file group has four data and delta file pairs at timestamp 500 containing data from previous transactions. 예를 들어, 첫 번째 데이터 파일의 행은 타임스탬프가 100보다 크고 200보다 작거나 같은 트랜잭션에 해당하며 (100, 200]으로 표시됩니다.For example, the rows in the first data file correspond to transactions with timestamp greater than 100 and less than or equal to 200; alternatively represented as (100, 200]. 두 번째 및 세 번째 데이터 파일은 삭제된 것으로 표시된 행이 채워진 비율이 50% 미만으로 표시됩니다.The second and third data files are shown to be less than 50 percent full after accounting for the rows marked as deleted. 병합 작업에서는 이 두 CFP를 결합하고 타임스탬프가 200보다 크고 400보다 작거나 같은(이 두 CFP의 결합 범위) 트랜잭션을 포함하는 새 CFP를 만듭니다.The merge operation combines these two CFPs and creates a new CFP containing transactions with timestamp greater than 200 and less than or equal to 400, which is the combined range of these two CFPs. 범위가 CFP (500, 600]인 다른 CFP가 표시되고 트랜잭션 범위 (200, 400]에 대한 비어 있지 않은 델타 파일은 원본 CFP에서 여러 행 삭제와 같은 트랜잭션 활동과 병합 작업을 동시에 수행할 수 있음을 나타냅니다.You see another CFP with range (500, 600] and non-empty delta file for transaction range (200, 400] shows that merge operation can be done concurrently with transactional activity including deleting more rows from the source CFPs.

다이어그램에서는 메모리 액세스에 최적화된 테이블 파일 그룹을 보여 줍니다.Diagram shows memory optimized table file group

백그라운드 스레드는 병합 정책에 따라 모든 닫힌 CFP를 평가한 다음 조건에 맞는 CFP에 대한 하나 이상의 병합 요청을 시작합니다.A background thread evaluates all closed CFPs using a merge policy and then initiates one or more merge requests for the qualifying CFPs. 이러한 병합 요청은 오프라인 검사점 스레드에서 처리됩니다.These merge requests are processed by the offline checkpoint thread. 병합 정책 평가는 주기적으로 수행되며 검사점을 닫을 때에도 수행됩니다.The evaluation of merge policy is done periodically and also when a checkpoint is closed.

SQL ServerSQL Server 병합 정책 Merge Policy

SQL ServerSQL Server 에서는 다음과 같은 병합 정책을 구현합니다. implements the following merge policy:

  • 두 개 이상의 연속하는 CFP를 통합할 수 있는 경우 삭제된 행을 고려한 후 대상 크기의 CFP 하나에 결과 행을 모두 넣을 수 있도록 병합을 예약합니다.A merge is scheduled if 2 or more consecutive CFPs can be consolidated, after accounting for deleted rows, such that the resultant rows can fit into 1 CFP of target size. 데이터 및 델타 파일의 대상 크기는 위에서 설명한 것처럼 원래 크기에 해당합니다.The target size of data and delta files corresponds to the original sizing, as described above.

  • 데이터 파일이 대상 크기를 두 배 초과하고 행이 절반 넘게 삭제된 경우 단일 CFP가 자체적으로 병합될 수 있습니다.A single CFP can be self-merged if the data file exceeds double the target size and more than half of the rows are deleted. 예를 들어 단일 트랜잭션 또는 여러 동시 트랜잭션이 많은 양의 데이터를 삽입하거나 업데이트하는 경우 트랜잭션이 여러 CFP에 걸쳐 있을 수 없기 때문에 데이터 파일이 대상 크기를 초과하게 되면 데이터 파일이 대상 크기보다 커질 수 있습니다.A data file can grow larger than the target size if, for example, a single transaction or multiple concurrent transactions inserts or updates a large amount of data, forcing the data file to grow beyond its target size, because a transaction cannot span multiple CFPs.

    다음은 병합 정책에 따라 병합될 CFP를 보여 주는 몇 가지 예입니다.Here are some examples that show the CFPs that will be merged under the merge policy:

인접한 CFP 원본 파일 (채워진 비율)Adjacent CFPs Source Files (% full) 병합 선택Merge Selection
CFP0 (30%), CFP1 (50%), CFP2 (50%), CFP3 (90%)CFP0 (30%), CFP1 (50%), CFP2 (50%), CFP3 (90%) (CFP0, CFP1)(CFP0, CFP1)

CFP2는 결과 데이터 파일을 이성적인 크기의 100%를 초과하게 만들므로 선택되지 않습니다.CFP2 is not chosen as it will make resultant data file greater than 100% of the ideal size.
CFP0 (30%), CFP1 (20%), CFP2 (50%), CFP3 (10%)CFP0 (30%), CFP1 (20%), CFP2 (50%), CFP3 (10%) (CFP0, CFP1, CFP2)(CFP0, CFP1, CFP2). 파일은 왼쪽부터 선택됩니다.Files are chosen starting from left.

CTP3는 결과 데이터 파일을 이성적인 크기의 100%를 초과하게 만들므로 선택되지 않습니다.CTP3 is not chosen as it will make resultant data file greater than 100% of the ideal size.
CFP0 (80%), CFP1 (30%), CFP2 (10%), CFP3 (40%)CFP0 (80%), CFP1 (30%), CFP2 (10%), CFP3 (40%) (CFP1, CFP2, CFP3).(CFP1, CFP2, CFP3). 파일은 왼쪽부터 선택됩니다.Files are chosen starting from left.

CFP0는 CFP1과 결합할 경우 결과 데이터 파일이 이상적인 크기의 100%를 초과하게 되므로 건너뜁니다.CFP0 is skipped because if combined with CFP1, the resultant data file will be greater than 100% of the ideal size.

사용 가능한 공간이 있는 CFP 중 일부는 병합할 수 없습니다.Not all CFPs with available space qualify for merge. 예를 들어, 두 개의 인접한 CFP가 60% 채워진 경우 해당 CFP는 병합되지 않고 각 CFP의 저장소 중 40%는 사용되지 않습니다.For example, if two adjacent CFPs are 60% full, they will not qualify for merge and each of these CFPs will have 40% storage unused. 최악의 경우 모든 CFP가 50% 채워진 경우 저장소의 50%만 사용됩니다.In the worst case, all CFPs will be 50% full, a storage utilization of only 50%. CFP가 병합되지 않아 삭제된 행이 저장소에 존재할 수 있지만 삭제된 행은 메모리 내 가비지 수집에 의해 메모리에서 이미 제거되었을 수 있습니다.While the deleted rows may exist in storage because the CFPs don’t qualify for merge, the deleted rows may have already been removed from memory by in-memory garbage collection. 저장소 관리와 메모리는 가비지 수집에 종속되지 않습니다.The management of storage and the memory is independent from garbage collection. 활성 CFP가 차지하는 저장소(일부 CFP는 업데이트되지 않음)는 메모리 내 영구 테이블 크기보다 최대 2배 더 클 수 있습니다.Storage taken by active CFPs (not all CFPs are being updated) can be up to 2 times larger than the size of durable tables in memory.

CFP의 수명 주기Life Cycle of a CFP

CPF 할당을 취소하려면 여러 상태를 전환해야 합니다.CPFs transition through several states before they can be deallocated. 데이터베이스 검사점 및 로그 백업에는 단계를 통해 파일을 전환하는 작업이 필요하고 궁극적으로 더 이상 필요 없는 파일을 정리해야 합니다.Database checkpoints and log backups need to happen to transition the files through the phases, and ultimately clean up files that are no longer needed. 이러한 단계에 대한 자세한 내용은 sys.dm_db_xtp_checkpoint_files(Transact-SQL)를 참조하세요.For a description of these phases, see sys.dm_db_xtp_checkpoint_files (Transact-SQL).

검사점 후에 강제 로그 백업을 수동으로 수행하여 가비지를 빠르게 수집할 수 있습니다.You can manually force the checkpoint followed by log backup to expedite the garbage collection. 프로덕션 시나리오에서 백업 전략의 일부로 수행되는 자동 검사점 및 로그 백업에서는 수동 작업을 수행할 필요 없이 이러한 단계에서 CFP를 완벽하게 전환합니다.In production scenarios, the automatic checkpoints and log backups taken as part of backup strategy will seamlessly transition CFPs through these phases without requiring any manual intervention. 가비지 수집 프로세스의 영향으로 메모리 액세스에 최적화된 테이블을 포함하는 데이터베이스에 메모리 내 크기에 비해 큰 저장소가 존재할 수 있습니다.The impact of the garbage collection process is that databases with memory-optimized tables may have a larger storage size compared to its size in memory. 검사점 및 로그 백업이 발생하지 않는 경우 검사점 파일의 디스크상 공간이 계속 증가합니다.If checkpoint and log backups do not happen, the on-disk footprint of checkpoint files continues to grow.

참고 항목See Also

메모리 액세스에 최적화된 개체의 저장소 만들기 및 관리Creating and Managing Storage for Memory-Optimized Objects