데이터베이스 개론

3. 데이터베이스 구조(2) - 저장단위(Page, Extent, File)

홍보살 2025. 1. 7. 16:18

DBMS 저장단위는 어떠할까?

우선 아래 이미지를 참고해 보자

MS SQL server 구조

Page  <  Extent  <  File(heap or index)

 

8kb(mysql은 16k) 로 구성되는 Page(페이지 : MS SQL server, Mysql, PostgreSQL등에서 불리고 oracle에서는 block이라 부름)가 최저단위이고 이 page가 연속적으로 8개 모이면 extent(익스텐트)가 된다.

이 extent는 분산적으로 file 단위로 누적된다.

여기서 스레드의 접근 최소 단위가 page이며 이때 래치를 사용한다.(별도로 자세히 다루도록 하겠다.)

상위 레벨의 군집인 extent는 공간 할당 단위로 사용된다.

 

그래서 뭐가 어떻다는 얘기인지 다 외워야 하는건지 궁금할 필요없다.

흐름만 보면 된다.

다만 왜 이렇게 대부분의 RDBMS의 구조가 비슷하게 되었는지 이해하면 될 것 같다.

불려지는 호칭은 다르지만 기본적인 메커니즘(새부적으로는 조금 차이가 있긴하다.)은 대부분 동일하다.

몇가지 쉬운 예를 들어보자.

 

데이터의 신규 저장은 어떤 데이터가 삭제되어 남은 공간이 있던말던 무조건 page상 가장 뒤쪽에 저장된다.

여기에는 다 이유가 있다.

우선 당신이 정의한 remark(비고) column varchar(512)이 있다고 치자.

default 는 공란이고 거의 사용하지 않지만 종종 사용한다.

그럼 8K인 page에 데이터가 행단위로 저장될때 매번 512byte의 공간을 만들어 놓을까?

노노~~ 가변형 타입은 최소단위로 page에 누적한다.

물론 char(고정형)으로 정의했다면 512byte 공간이 필요하다 .. 왜 스페이스(space)가 들어가니까..

 

DBMS(MS SQL server)는 기본적으로 최소공간으로 누적하고 할당 공간이 FULL이 되면 새로운 EXTENT 단위로 공간을 할당한다.

 

위 이미지 처럼 delete - > insert 가 발생하면 Row Offset Table(ROT)  update 작업을 진행해서 공간을 효율적으로 관리한다.

delete는 쉽게 이해가 되었을 것이고 update 문(데이터 수정)이 page 단편화는 왜 발생할까?

위 언급한 varchar(512) 컬럼에 "AB"라고 입력되었던 데이터를 "adafasdgadh h" 로 변경했는데 마침 해당 page 에 여유공간이 없다고 치자

단연히 방법 없이 분할이 발생하기 마련이다.

이 매커니즘을 공간 할당의 단위인 Extent까지 확장해서 이해하면 될 것 같다.

 

Row Offset Table(ROT) 은 물론 DBMS의 효율적 관리상 아주 중요하지만 세상에 공짜가 없듯 별도의 리소스가 소모된다.

그럼에도 불구하고  Row Offset Table(ROT)  는 만능이 아니다.

delete문으로 빈 page가 발생하는 경우 page가 단편화되고 Row Offset Table(ROT) update로 공간의 회수가 안되는 경우가 있다.(특히나 대량의 row count 를 대상으로 delete문을 사용하는 경우)

 

왜 그럴까? 우선 Delete는 행단위 삭제이며 로그에 행단위로 모든 기록이 쌓인다.

반면에 truncate table은 테이블 단위의 삭제이고 page 단편화가 없으며 로그 기록도 행단위 삭제와는 비교불가하게 가볍다.

왜 테이블내 전체 데이터 삭제시 delete 가 아닌 truncate table을 사용해야 하는지 조금 감이 오는가?

부득 대량의(모두는 아닌) 데이터를 반드시 제거해야 하는 경우 

인덱스를 비활성화 와 TABLOCK 힌트를 사용하는 방법도 있다.

ㄴ 인덱스 비 활성화 : ALTER INDEX [인덱스명] ON [테이블명] DISABLE;

ㄴ 대상테이블 테이블단위 LOCK 설정 : INSERT INTO [테이블명] WITH(TABLOCK)~~ 

ㄴ 인덱스 재작성  : ALTER INDEX [인덱스명] ON [테이블명] REBUILD;

 

 

OLTP중에서는 MES와 같이 insert,update,delete가 잦은 시스템의 경우 lock과 latch의 개념이 아주 중요하다.

다음 글이 바로 그것인데 우선 오늘 내용을 인지해야 넘어가기 수월할 것 같다.

 

개발을 하다보면 만만한 DA도 종종 존재한다.

이름뿐인 가짜 DA가 존재하기도 한다.

하지만 경험해본 모든 DA가 다 허접했다고 말할 수 없을 것이다.

좀더 자신의 무지에 대해 솔직해 지자.

DA에 대한 증오,혐오가 이 무지를 가리기 위한 수단이 아닐까 되집어 보자.

"내가 시간이 없어서 그렇지 시간만 있으면 뭐~~~"

이런 어이없는 말.. 고마하자 쫌..

 

르쌍티망

: 사회적  약자가 강자에게 품는 질투, 원한, 증오, 열등감 등이 뒤섞인 혐오의 감정으로

샤덴프로이데(남의 불행을 보았을 때 기쁨을 느끼는 심리 : 쌤통?)보다 매우 호전적인이다.

 

나는 내가 아무것도 모른다는 걸 안다 - 소크라데스

 

이 글은 이비니어스( www.evinious.co.kr )의 소유이며 불펌은 허락하지 않습니다.