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

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

SQL Server 페이지 및 익스텐트 아키텍처(3/4)

– 개체에서 사용하는 공간 관리

 

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

 

앞의 포스팅에서 페이지 및 익스텐트에 대한 이해, 익스텐트 할당 및 빈 공간 관리등에 대해서 살펴 보았다.

 

 

이번 시간에는 개체에서 사용하는 공간 관리에 대해서 알아 본다.

 

IAM(Index Allocation Map)페이지는 할당 단위에 사용되는 데이터베이스 파일의 4GB 부분에 익스텐트를 매핑한다. 할당 단위의 유형은 다음과 같다.

  • IN_ROW_DATA : 힙 또는 인덱스 파티션을 포함
  • LOB_DATA : xml, varbinary(max), varchar(max)등의 LOB(Large Object) 데이터 형식을 포함
  • ROW_OVERFLOW_DATA : varchar, nvarchar, varbinary 또는 SQL_variant 열에 저장된 데이터 중 8,060바이트 행 크기를 초과한 가변 길이의 데이터를 포함

 

IAM 페이지는 파일에서 4GB 범위를 처리하며 GAM 또는 SGAM 페이지와 동일하다. 할당 단위에 하나 이상의 파일에서 매핑된 익스텐트가 포함되어 있으며 4GB를 넘는 파일 범위가 포함되어 있으면 하나의 IAM 체인에 여러 IAM 페이지가 연결 된다. 따라서 각 할당 단위에는 익스텐트가 매핑된 각 파일에 대해 하나 이상의 IAM 페이지가 포함된다.

할당된 파일 익스텐트 범위가 단일 IAM 범위를 초과하는 경우에는 파일에 IAM 페이지가 두 개이상 있을 수 있다.

 

아래 그림을 보면 IAM 페이지는 IAM 페이지에 의해 매핑되는 익스텐트의 범위에서 시작 익스텐트를 표시하는 헤더를 가지고 있다.

 

 

맵의 첫째 비트는 범위의 첫째 익스텐트를 나타내고 둘째 비트는 둘째 익스텐트를 나타낸다. 비트가 0인 경우 해당 익스텐트는 IAM을 소유하는 할당 단위에 할당되지 않은 것이며 1은 할당 된 것이다.

 

SQL Server에서는 데이터가 입력되어 새 행을 삽입할 때 빈 공간을 찾아야 한다. 현재 페이지에 사용 가능한 공간이 없으면 IAM 및 PFS 페이지를 사용하여 할당할 페이지를 찾거나 힙 또는 텍스트/이미지 페이지의 경우 행을 보관하기에 충분한 공간이 있는 페이지를 찾는다.

 

[IAM 페이지를 사용하여 단일 파티션 힙에서 검색 하는 방법]

 

 

각 IAM 및 PFS는 페이지는 많은 수의 데이터 페이지를 포함하므로 데이터베이스에는 IAM 및 PFS 페이지가 거의 없다. 이는 IAM 및 PFS 페이지가 대게 SQL Server 버퍼 풀의 메모리에 있으므로 빠르게 검색 할 수 있음을 의미 한다.

인덱스의 경우에는 새 행의 삽입 지점은 인덱스 키에 의해 설정 된다. 이때에는 IAM 및 PFS를 통한 검색이 실행 되지 않는다.

 

데이터베이스 엔진은 삽입 되는 행을 보관하기에 충분한 공간을 가진 기존 익스텐트에서 페이지를 빠르게 찾을 수 없을 때에는 할당 단위에 새로운 익스텐트를 할당 한다. 데이터베이스 엔진은 비례할당 알고리즘을 사용하여 파일 그룹에서 사용할 수 있는 파일의 익스텐트를 할당 한다.

예를 들면 하나의 파일 그룹에 두 개의 파일이 있고 이 중 한 파일이 다른 파일에 비해 2배의 빈 공간을 가지고 있는 경우 빈 공간이 큰 파일에 2개의 페이지가 할당 되고 공간이 작은 파일에 1페이지가 할당되는 방식이다. 따라서 파일 그룹의 모든 파일이 유사한 공간 비율을 사용하게 된다.

 

IAM 개념에 대한 동영상 자료를 참고 하면 좋을 듯 하다.

동영상 링크 : http://youtu.be/PGnwmfzLuok

[참고자료]

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

http://msdn.microsoft.com/ko-kr/library/ms187501(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 973
1769 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (2/4) – 뷰(View) 확인 jevida(강성욱) 2016.09.27 1447
1768 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (1/4) – SQL 문 최적화 및 Worktables jevida(강성욱) 2016.09.27 933
1767 SQL Server DMV를 이용한 통계 정보 확인 jevida(강성욱) 2016.09.27 1470
1766 DMV를 이용한 플랜 캐시 사용 정보 확인 jevida(강성욱) 2016.09.27 1172
1765 SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1065
1764 SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1367
1763 SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 jevida(강성욱) 2016.09.27 1068
1762 SQL Server 테이블 및 인덱스 구조 아키텍처(1/4) – 테이블 및 인덱스 구성 jevida(강성욱) 2016.09.27 1125
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 1249
1757 파일 및 파일 그룹 아키텍처 jevida(강성욱) 2016.09.27 798
1756 SQL Server 페이지 및 익스텐트 아키텍처(4/4) – 수정된 익스텐트 추적 jevida(강성욱) 2016.09.27 1128
» SQL Server 페이지 및 익스텐트 아키텍처(3/4) – 개체에서 사용하는 공간 관리 jevida(강성욱) 2016.09.27 972
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1362
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 3162
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2177
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5123





XE Login