SQL Server 테이블 및 인덱스 구조 아키텍처(2/4)

– 힙 구조

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

힙이란 클러스터 인덱스가 없는 테이블이다. 힙에는 힙에서 사용하는 각 파티션에 대해 index_id = 0의 sys.partitions 행이 하나 있다.

select * from sys.partitions

 

 

 

기본적으로 힙은 단일 파티션을 사용한다. 힙이 다중 파티션을 사용하는 경우 각 파티션은 특정 파티션에 대한 데이터를 포함하는 힙 구조를 갖는다. 예를 들어 힙이 4개의 파티션을 사용하면 각 파티션마다 하나씩 총 4개의 힙이 있다.

 

힙의 데이터 형식에 따라 각 힙 구조에는 특정 파티션에 대한 데이터를 저장하고 관리하는 할당 단위가 하나 이상 있다. 최소한 각 힙에는 파티션당 하나의 IN_ROW_DATA 할당 단위가 있다. LOB(Large Object)열이 포함된 경우 파티션당 하나의 LOB_DATA 할당 단위가 있으며 8060바이트 행 크기 제한을 초과하는 가변길이 열이 포함된 경우 파티션당 하나의 ROW_OVERFLOW_DATA 할당 단위도 있다.

 

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

select * from sys.system_internals_allocation_units

 

 

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

 

 

[힙 테이블 찾기]

다음 스크립트를 실행하면 데이터베이스의 힙 테이블을 검색 할 수 있다.

SELECT

    B.NAME, A.TYPE_DESC, B.TYPE_DESC, B.CREATE_DATE

FROM SYS.INDEXES AS A

    INNER JOIN SYS.OBJECTS AS B

        ON A.OBJECT_ID = B.OBJECT_ID

WHERE B.TYPE_DESC = 'USER_TABLE' AND A.TYPE_DESC = 'HEAP' ORDER BY B.NAME

 

 

[참고자료]

http://msdn.microsoft.com/ko-kr/library/ms188270(v=sql.105).aspx



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp
 

 

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 599
1766 DMV를 이용한 플랜 캐시 사용 정보 확인 jevida(강성욱) 2016.09.27 1220
1765 SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1094
1764 SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1411
» SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 jevida(강성욱) 2016.09.27 1101
1762 SQL Server 테이블 및 인덱스 구조 아키텍처(1/4) – 테이블 및 인덱스 구성 jevida(강성욱) 2016.09.27 1162
1761 SQL Server 트랜잭션 로그 아키텍처(4/4) – 미리 쓰기 트랜잭션 로그 jevida(강성욱) 2016.09.27 1557
1760 SQL Server 트랜잭션 로그 아키텍처(3/4) – 검사점 및 로그의 활성 부분 jevida(강성욱) 2016.09.27 1070
1759 SQL Server 트랜잭션 로그 아키텍처(2/4) – 트랜잭션 로그 물리 아키텍처 jevida(강성욱) 2016.09.27 1123
1758 SQL Server 트랜잭션 로그 아키텍처(1/4) – 트랜잭션 로그 논리 아키텍처 jevida(강성욱) 2016.09.27 1276
1757 파일 및 파일 그룹 아키텍처 jevida(강성욱) 2016.09.27 827
1756 SQL Server 페이지 및 익스텐트 아키텍처(4/4) – 수정된 익스텐트 추적 jevida(강성욱) 2016.09.27 1159
1755 SQL Server 페이지 및 익스텐트 아키텍처(3/4) – 개체에서 사용하는 공간 관리 jevida(강성욱) 2016.09.27 1010
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1584
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 3928
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2234
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5329
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 4112
1749 SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1609
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1810
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1467





XE Login