데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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
1770 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (3/4) – 뷰(View)의 인덱스 확인 jevida(강성욱) 2016.09.27 972
1769 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (2/4) – 뷰(View) 확인 jevida(강성욱) 2016.09.27 1447
1768 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (1/4) – SQL 문 최적화 및 Worktables jevida(강성욱) 2016.09.27 932
1767 SQL Server DMV를 이용한 통계 정보 확인 jevida(강성욱) 2016.09.27 1456
1766 DMV를 이용한 플랜 캐시 사용 정보 확인 jevida(강성욱) 2016.09.27 1172
1765 SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1064
1764 SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1362
» SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 jevida(강성욱) 2016.09.27 1067
1762 SQL Server 테이블 및 인덱스 구조 아키텍처(1/4) – 테이블 및 인덱스 구성 jevida(강성욱) 2016.09.27 1123
1761 SQL Server 트랜잭션 로그 아키텍처(4/4) – 미리 쓰기 트랜잭션 로그 jevida(강성욱) 2016.09.27 1537
1760 SQL Server 트랜잭션 로그 아키텍처(3/4) – 검사점 및 로그의 활성 부분 jevida(강성욱) 2016.09.27 1048
1759 SQL Server 트랜잭션 로그 아키텍처(2/4) – 트랜잭션 로그 물리 아키텍처 jevida(강성욱) 2016.09.27 1094
1758 SQL Server 트랜잭션 로그 아키텍처(1/4) – 트랜잭션 로그 논리 아키텍처 jevida(강성욱) 2016.09.27 1247
1757 파일 및 파일 그룹 아키텍처 jevida(강성욱) 2016.09.27 797
1756 SQL Server 페이지 및 익스텐트 아키텍처(4/4) – 수정된 익스텐트 추적 jevida(강성욱) 2016.09.27 1128
1755 SQL Server 페이지 및 익스텐트 아키텍처(3/4) – 개체에서 사용하는 공간 관리 jevida(강성욱) 2016.09.27 970
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1231
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 2741
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2159
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5029





XE Login