디스크 기반 테이블 저장소와 메모리 액세스에 최적화된 테이블 저장소 비교Comparing Disk-Based Table Storage to Memory-Optimized Table Storage

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

범주Categories 디스크 기반 테이블Disk-based Table 메모리 액세스에 최적화된 내구성이 있는 테이블Durable Memory-Optimized Table
DDLDDL 메타데이터 정보는 데이터베이스의 기본 파일 그룹에 있는 시스템 테이블에 저장되고 카탈로그 보기를 통해 액세스할 수 있습니다.Metadata information is stored in system tables in the primary filegroup of the database and is accessible through catalog views. 메타데이터 정보는 데이터베이스의 기본 파일 그룹에 있는 시스템 테이블에 저장되고 카탈로그 보기를 통해 액세스할 수 있습니다.Metadata information is stored in system tables in the primary filegroup of the database and is accessible through catalog views.
구조Structure 행은 8K 페이지에 저장됩니다.Rows are stored in 8K pages. 페이지는 같은 테이블의 행만 저장합니다.A page stores only rows from the same table. 행은 개별 행으로 저장됩니다.Rows are stored as individual rows. 페이지 구조는 없습니다.There is no page structure. 데이터 파일에 있는 두 연속 행은 다른 메모리 최적화 테이블에 속할 수 있습니다.Two consecutive rows in a data file can belong to different memory-optimized tables.
인덱스Indexes 인덱스는 데이터 행과 비슷한 페이지 구조로 저장됩니다.Indexes are stored in a page structure similar to data rows. 인덱스 정의만 유지됩니다(인덱스 행은 유지되지 않음).Only the index definition is persisted (not index rows). 인덱스는 메모리 내에 유지되며 메모리 최적화 테이블이 데이터베이스를 다시 시작할 때 메모리로 로드되면 다시 생성됩니다.Indexes are maintained in-memory and are regenerated when the memory-optimized table is loaded into memory as part of restarting a database. 인덱스 행은 유지되지 않으므로 인덱스 변경에 대한 로깅은 수행되지 않습니다.Since index rows are not persisted, no logging is done for index changes.
DML 작업DML operation 첫 번째 단계는 페이지를 찾은 다음 버퍼 풀로 로드하는 것입니다.The first step is to find the page and then load it into buffer-pool.

InsertInsert
SQL ServerSQL Server 은 클러스터형 인덱스의 경우 행 순서에 대한 페이지 계정에 행을 삽입합니다. inserts the row on the page accounting for row ordering in case of clustered index.

DeleteDelete
SQL ServerSQL Server 은 페이지에서 삭제할 행을 찾아 삭제됨으로 표시합니다. locates the row to be deleted on the page and marks it deleted.

UpdateUpdate
SQL ServerSQL Server 은 페이지에서 행을 찾습니다. locates the row on the page. 업데이트는 키가 아닌 열에 대해 현재 위치에서 수행됩니다.The update is done in-place for non-key columns. 키 열 업데이트는 삭제 및 삽입 작업에 의해 수행됩니다.Key-column update is done by a delete and insert operation.

DML 작업이 완료된 후 영향을 받는 페이지는 로깅 작업을 최소화하기 위해 버퍼 풀 정책, 검사점 또는 트랜잭션 커밋의 의 일부로 디스크에 플러시됩니다.After the DML operation completes, the affected pages are flushed to disk as part of buffer pool policy, checkpoint or transaction commit for minimally-logged operations. 페이지에 읽고 쓰는 작업은 불필요한 I/O를 초래합니다.Both read/write operations on pages leads to unnecessary I/O.
메모리 최적화 테이블의 경우 데이터가 메모리에 있기 때문에 DML 작업은 직접 메모리에서 수행됩니다.For memory-optimized tables, since the data resides in memory, the DML operations are done directly in memory. 메모리 최적화 테이블에 대한 로그 레코드를 읽고 데이터 및 델타 파일에 유지시키는 백그라운드 스레드가 있습니다.There is a background thread that reads the log records for memory-optimized tables and persist them into data and delta files. 업데이트는 새로운 행 버전을 생성합니다.An update generates a new row version. 하지만 업데이트는 삭제 후 삽입으로 기록됩니다.But an update is logged as a delete followed by an insert.
데이터 조각화Data Fragmentation 데이터 조작은 데이터를 조각화하여 부분적으로 채워진 페이지와 디스크에 연속되지 않고 논리적으로 연속된 페이지가 만들어집니다.Data manipulation fragments data leading to partially filled pages and logically consecutive pages that are not contiguous on disk. 이로 인해 데이터 액세스 성능이 저하되고 데이터 조각 모음을 수행해야 합니다.This degrades data access performance and requires you to defragment data. 메모리 액세스에 최적화된 데이터는 페이지에 저장되지 않으므로 데이터 조각화가 없습니다.Memory-optimized data is not stored in pages so there is no data fragmentation. 그러나 행이 업데이트되고 삭제됨에 따라 데이터 및 델타 파일을 압축해야 합니다.However, as rows are updated and deleted, the data and delta files need to be compacted. 이런 작업은 병합 정책에 따라 백그라운드 MERGE 스레드에 의해 수행됩니다.This is done by a background MERGE thread based on a merge policy.

참고 항목See Also

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