힙 구조

힙이란 클러스터형 인덱스가 없는 테이블입니다. 힙에는 힙에서 사용하는 각 파티션에 대해 index_id = 0의 sys.partitions 행이 하나 있습니다. 기본적으로 힙은 단일 파티션을 사용합니다. 힙이 다중 파티션을 사용하는 경우 각 파티션은 해당 특정 파티션에 대한 데이터를 포함하는 힙 구조를 갖습니다. 예를 들어 힙이 4개의 파티션을 사용하면 파티션마다 하나씩 총 4개의 힙 구조가 있습니다.

힙의 데이터 형식에 따라 각 힙 구조에는 특정 파티션에 대한 데이터를 저장하고 관리하는 할당 단위가 하나 이상 있습니다. 최소한 각 힙에는 파티션당 하나의 IN_ROW_DATA 할당 단위가 있습니다. 또한 힙에는 LOB(Large OBject) 열이 포함된 경우 파티션당 하나의 LOB_DATA 할당 단위가 있으며 8,060바이트 행 크기 제한을 초과하는 가변 길이 열이 포함된 경우 파티션당 하나의 ROW_OVERFLOW_DATA 할당 단위도 있습니다. 할당 단위에 대한 자세한 내용은 테이블 및 인덱스 구성을 참조하십시오.

sys.system_internals_allocation_units 시스템 뷰의 first_iam_page 열은 특정 파티션의 힙에 할당된 공간을 관리하는 IAM 페이지 체인에서 첫 번째 IAM 페이지를 가리킵니다. SQL Server에서는 IAM 페이지를 사용하여 힙 간을 이동합니다. IAM 데이터 페이지와 내부의 행은 특정 순서로 정렬되어 있지 않으며 연결되어 있지도 않습니다. 데이터 페이지 간의 유일한 논리적 연결은 IAM 페이지에 기록된 정보입니다.

중요 정보중요

sys.system_internals_allocation_units 시스템 뷰는 Microsoft SQL Server 내부 전용으로 예약되었습니다. 향후 호환성은 보장되지 않습니다.

IAM을 검색하여 힙의 페이지를 보유하는 익스텐트를 찾음으로써 힙의 테이블 검색 또는 연속 읽기를 수행할 수 있습니다. IAM은 익스텐트가 파일에 존재하는 순서와 동일하게 익스텐트를 나타내므로 각 파일에서 차례로 연속 힙 검색이 진행됩니다. 또한 IAM 페이지를 사용하여 검색 시퀀스를 설정하면 힙의 행이 삽입되는 순서대로 반환되지 않습니다.

다음 그림에서는 SQL Server 데이터베이스 엔진에서 IAM 페이지를 사용하여 단일 파티션 힙에서 데이터 행을 검색하는 방법을 보여 줍니다.

IAM 페이지는 단일 파티션 힙에서 데이터를 검색함