[Alex] 데이터 장인의 블로그

[Oracle] 데이터베이스 논리적 저장 구조, 데이터 처리방식 본문

SQL

[Oracle] 데이터베이스 논리적 저장 구조, 데이터 처리방식

Alex, Yoon 2022. 12. 21. 13:24

오라클의 논리적인 저장구조

논리적 구조 : BLOCK < EXTENT < SEGMENT < TABLESPACE   

출처

https://www.youtube.com/watch?v=Z-xgqtUJDes

https://velog.io/@bae12/Oracle-DB

Tablespace

오라클 Database에서 Data들이 저장되는 가장 큰 영역(MS SQL에서 DB개념)

데이터베이스는 하나 또는 다수의 테이블스페이스라는 논리적 공간으로 이루어진다. 하나의 테이블스페이스는 하나의 데이터베이스에 속해야 한다. 하나의 테이블스페이스는 한 개 또는 다수의 데이터 파일로 이루어 진다. 테이블 스페이스를 생성하여 테이블이 저장될 공간을 할당하고 테이블을 생성한다. 지정한 크기보다 데이터가 많으면 죽고, 많이 남으면 공간이 낭비된다. 

Segment

Tablespace에 저장되는 Object 단위

하나의 테이블스페이스 내부에 저장된 각 데이터베이스 오브젝트를 세그먼트라고 말할 수 있다. 하나의 테이블스페이스에는 다수의 세그먼트를 저장할 수도 있다. 하나의 세그먼트가 다수의 테이블스페이스에 나누어 저장될 수 없다. 하나의 세그먼트는 다수의 데이터 파일에 나누어 저장될 수도 있다. 단 그 데이터 파일들이 같은 테이블스페이스 내부에 할당되어 있는 경우에만 가능하다.

참고
Object : Table, Index, Sequenct 등과 같이 Oracle에서 생성 가능한 모든 것들
Segment : Object 중에서 저장공간을 가지는 것들(Index, Table 등)
  • Data Segment
  • Index Segment
  • Temporary Segment
  • Rollback(Undo) Segment

Extent

공간 할당의 기본단위(byte), 연속된 Block들의 집합

하나의 세그먼트에 할당된 공간을 익스텐트라 한다. 하나의 세그먼트는 한 개 또는 다수의 익스텐트로 구성된다. 하나의 세그먼트가 다수의 데이터 파일에 나누어 저장될 수 없다. Created, Extended 등이 이뤄질 때, 테이블에 컬럼이 추가 될 때 할당되며, Droped, Truncated 등이 이뤄질 때, 테이블에 컬럼이 삭제 될 때 반환된다. (Delete로는 반환되지 않는다.)

Data Block

오라클 DB를 구성하는 최소단위(bit), I/O의 기본단위

DB를 구성하는 가장 최소 저장 공간으로 실제 데이터가 바로 이곳에 저장된다. 오라클 블록의 크기는 db_block_size라는 파라미터에 의해 정해지며 변경이 불가능하다.(!!!!!!!!!!!!!!오라클 설치 시 지정할 수 있다!!!!!!!!!!!!!!!!) 다른 블록사이즈를 사용하고자 한다면 테이블스페이스를 추가로 생성하면서 다른 크기로 설정 가능하다.

[중요] 데이터를 꺼낼때, 해당하는 모든 BLOCK에 I/O를 하기 때문에 컬럼이 하나든, 여러 개든 BLOCK의 갯수는 동일하다. 

참고
1. 블록 사이즈는 테이블 컬럼 수에 따라서 영향을 받는다. 
컬럼 수 多, 로우 수 小
컬럼 수 小, 로우 수 多

2. 액세스 속도 : 분산 저장된 Block VS 연속 저장된 Block
만일 오라클의 DB_BLOCK_SIZE가 OS 블록보다 큰 경우, 여러개의 OS 블록이 1개의 오라클 1블록을 이루게 된다. 이때 OS 블럭은 같은 곳에 연속적으로 저장되거나 분산저장될 수 있는데, 분산저장된 오라클 1블록은 연속저장된 오라클 1블록의 액세스 속도보다 느리게 되므로 저장시 주의가 필요하다.

9i 이전 

MSSM : 프리리스트로 여유공간을 갖는 방식. 

10g 

ASSM : 오라클에서 자동으로 알아서 알맞은 사이즈를 할당.

DB BLOCK SIZE : 2n승으로 수정할 수 있다. 

 

EXTENT : ASSM 방식에서는 알아서 할당을 해주기 때문에 
ex) block size : 8K , extent size 64k : -> extent = 8 * block 
데이터베이스가 공간을 할당하는 가장 작은 단위 (저장 단위와는 다른 개념)
ex) 테이블에서 데이터를 쌓다가 공간이 부족해진다면 추가적으로 extent 를 할당하여 공간을 보완한다.  

 

SEGMENT : extent가 모여서 segment 를 이룬다 
OBJECT라고 여겨짐 : 테이블이나 인덱스
저장공간을 갖는 OBJECT. VIEW나 SYNONYM인 경우는 저장구조를 가지지 않는 OBJECT != SEGMENT

HWM

TABLE SPACE : SEGMENT를 담고있는 거대한 거대한 컨테이너.

HWM : 책갈피의 개념. BLOCK에서 내가 쓴적이 있는 위치를 기록. 
ASSM 구조에서는 상위 HWM, 하위 HWM의 구조가 생긴다. FREE BLOCK 같은 비효율이 발생한다고 하면, TRUNCATE 같은 명령어들로 HWM 초기화 가능. HWM의 작동으로 인해서 DB Lock과 오류가 발생될 수 있다. 때문에 접근 세션 수 제한을 풀어두거나 (Spark 에서 동시에 데이터를 Insert 하는 경우 등등) 하는 설정이 필요하다. 

반응형
Comments