이번 포스팅은 MS SQL에서 DB의 저장방식에 대한 내용을 살펴볼 것이다.

DBA의 업무에 있어서, DB의 저장방식을 이해하는 것은 매우 중요하다. 이는 DB의 성능 그리고 SQL 튜닝과 직결되는 내용이기 때문이다.

 

우선 다음 그림을 보며 SQL Server 상에서 DB에 데이터가 어떤 단위로 저장되는지 살펴보자!

SQL Server의 저장단위

 

Page(페이지)의 개념

  • SQL Server의 기본 저장 및 I/O 단위
  • 하나의 Page = 8KB 크기
  • 각 페이지의 시작점부터 96바이트의 크기까지는 Header가 차지
    Header : 시스템 정보(Page의 번호, 유형, 가용 크기 등) 저장
  • 페이지의 주소값 96부터(1바이트당 주소값 1을 부여함)는 실질적인 데이터의 값이 저장되는 Body 부분
  • 페이지의 가장 끝 주소값부터 차례로 Row Offset Table을 구성
    Row Offset Table : 데이터(Row 단위)의 주소값을 저장

Page(페이지) 구성요소

 

Page의 데이터 저장 방식

INSERT, UPDATE, DELETE 구문처럼 데이터에 변화를 주는 경우, Page 상에 데이터가 어떻게 저장되는지 살펴보자.

'Delete Ann' 명령 수행 후

Delete 연산에는 몇 가지 과정이 포함되는데, 그 과정 중 첫번째가 저러하다. 

'Delete Ann' 직후 'Insert Ed' 명령 수행 후

Delete 직후 새로운 데이터를 Insert 하면 위 그림과 같이 Row Offset Table에서 0 값이 가장 먼저 탐색 되는 곳에 새로운 데이터가 저장된 주소값이 추가되는데, (위 예시에서는 Row 1(offset)이 된다.) 즉, 실제 데이터가 저장되는 위치Body에서 가장 마지막 부분에 추가 되는 것이고, Row Offset 상으로는 빈 공간의 Offset이 새로 추가되는 데이터에 맞춰 지정되는 것이다.

 

그렇다면 106이라는 주소값에 해당하는 빈공간은 계속 낭비하게 되는걸까?

SQL Server를 그런 식으로 설계했다면 해당 제품은 진작에 망했을거다!

'Insert Lisa' 명령 수행 후

위 그림에서 보는 것처럼 Insert 명령이 한번 더 수행되면, Body 상에서 빈공간을 메꾸기 위해 전체 데이터들의 위치가 한칸(?)씩 땡겨지며, 이에 따라 주소값이 달라지므로 Row Offset Table들의 값들도 달라지게 된다. 이후 새로운 데이터가 Body의 끝부분에 추가되며 Row Offset Table에도 적용된다.

 

 

Extent(익스텐트)의 개념

  • 8개의 Page로 이루어진 논리적인 단위
  • 하나의 Extent = 64KB 크기
  • Mixed(혼합) ExtentUniform(균일) Extent 로 구분

Mixed Extent와 Uniform Extent의 개념

각 Page는 기본적으로는 한 Object에 속하며, 한 가지 유형(데이터, 인덱스 등)이지만,

Extent는 최대 8개의 Object에 속할 수 있다. 이렇게 각기 다른 Object로 묶이는 경우Mixed Extent라 하고,
한 Object에 대해서만 묶인 것Uniform Extent라 한다.

 

일반적으로 새 테이블이나 인덱스에는 Mixed Extnet로 Page가 할당되며,

테이블이나 인덱스의 Page가 8 Page로 증가하면 후속 할당을 위해 Uniform Extent를 사용하도록 전환된다.

또한, 인덱스에 8개의 페이지를 생성하는 데 충분한 행을 가진 기존 테이블에서 인덱스를 만드는 경우, 인덱스에 대한 모든 할당 항목은 Unifrom Extent에 있다.

 

SQL Server 2014(12.x) 버전까지는, 효율적인 공간 할당을 위해 적은 양의 데이터를 포함하는 테이블에 전체 익스텐트를 할당하지 않으며, 일반적으로 새 테이블이나 인덱스에는 Mixed Extent 에 페이지를 할당하였다. 테이블이나 인덱스의 페이지가 8 Page로 증가하면 후속 할당을 위해 Uniform Extent 를 사용하도록 전환된다.

인덱스에 8개의 페이지를 생성하는 데 충분한 Row을 가진 기존 테이블에서 인덱스를 만드는 경우 인덱스에 대한 모든 할당 항목은 Uniform Extent에 되었다.

 

SQL Server 2016(13.x) 버전부터, 사용자 데이터베이스 및 tempdb의 할당 대부분에 대한 디폴트 IAM 체인의 첫 8페이지에 속하는 할당을 제외하고 Uniform Extent를 할당한다.

마스터, msdb 및 모델 데이터베이스에 대한 할당은 여전히 SQL Server 2014와 같은 방식을 유지한다.

 

 

참조

https://hackersstudy.tistory.com/61

 

[ MSSQL ] Page와 Extend

Page : SQL Server의 기본 저장(I/O) 단위 Extent : 공간 관리의 기본 단위 위 그림과 같이 데이터베이스의 데이터파일(mdf,ndf)에 할당되는 디스크 공간은 Page로 나뉘어지며 Extent는 8개의 Page로 구성한다...

hackersstudy.tistory.com

https://docs.microsoft.com/ko-kr/sql/relational-databases/pages-and-extents-architecture-guide?view=sql-server-ver15 

 

페이지 및 익스텐트 아키텍처 가이드 - SQL Server

페이지 및 익스텐트 아키텍처 가이드

docs.microsoft.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기