[Oracle] Segment와 Extent를 구분하는 기준?

prana·2024년 12월 10일

ORACLE

목록 보기
46/96

Extent

  • 데이터를 읽고 쓰는 단위는 블록이지만, 테이블스페이스로부터 공간을 할당하는 단위는 익스텐트이다.

  • 테이블이나 인덱스에 데이터를 입력하다가, 공간이 부족해지면 해당 오브젝트가 속한 테이블스페이스(물리적으로는 데이터파일)로부터 추가적인 공간을 할당받는다.

  • 이때 정해진 익스텐트 크기의 연속된 블록을 할당받는다.

    • 예를 들어 블록 크기가 8KB인 상태에서 64KB 단위로 할당하도록 정의했다면,
      공간이 부족할 때마다 테이블스페이스로부터 8개 연속된 블록을 찾아 (찾지 못하면 새로운 익스텐트 추가) 세그먼트에 할당해준다.
  • 익스텐트 내 블록은 논리적으로는 인접하지만, 익스텐트끼리 서로 인접하지는 않는다. 예를 들어 어떤 세그먼트에 익스텐트 2개가 할당됐는데, 데이터 파일 내에서 이 둘이 서로 멀리 떨어져 있을 수 있다.

  • Oracle은 한 익스텐트에 속한 모든 블록을 단일 오브젝트가 사용한다.


  • 물리적인 데이터 저장 단위로, 연속된 데이터 블록(Block)들의 집합이다.
  • Segment 내에서 데이터를 저장하기 위해 할당
  • Segment 데이터가 증가하면, 새로운 Extent가 추가로 할당
  • Extent는 항상 연속된 블록으로 구성, I/O 효율성을 높이기 위해 설계
  • Extent 크기 및 개수는 데이터 증가율과 Tablespace 설정에 따라 조정

Segment

  • 테이블, 인덱스, Undo처럼 저장공간을 필요로 하는 데이터베이스 오브젝트이다.

  • 저장공간을 필요로 한다는 것은 한 개 이상의 익스텐트를 사용함을 뜻한다.

  • 테이블을 생성할 때, 내부적으로는 테이블 세그먼트가 생성된다. 인덱스를 생성할 때, 내부적으로 인덱스 세그먼트가 생성된다.

  • 다른 오브젝트는 세그먼트와 1:1 대응관계를 갖지만, 파티션은 1:M 관계를 갖는다. 즉, 파티션 테이블(또는 인덱스)을 만들면, 내부적으로 여러 개의 세그먼트가 만들어진다.

  • 한 세그먼트는 자신이 속한 테이블스페이스 내 여러 데이터 파일에 걸쳐 저장될 수 있다. 즉, 세그먼트에 할당된 익스텐트가 여러 데이터 파일에 흩어져 저장되는 것이며, 그래야 디스크 경합을 줄이고 I/O 분산 효과를 얻을 수 있다.


  • 논리적인 데이터 저장 단위
  • 특정 데이터 객체(테이블, 인덱스 등)에 속한 모든 데이터가 저장되는 영역
  • Segment는 하나 이상의 Extent로 구성

특징

  • 테이블, 인덱스, 파티션과 같은 고수준의 데이터 객체를 나타낸다.
  • 데이터베이스 사용자는 일반적으로 Segment 단위로 데이터를 관리하고 접근
  • ex) 하나의 테이블이 하나의 Segment로 표현된다.

데이터 관리의 논리적/물리적 구분

  • Segment는 사용자 관점에서 데이터 객체(테이블, 인덱스)를 논리적으로 표현.
  • Extent는 데이터가 저장되는 물리적 공간의 단위로, 데이터베이스 관리자가 효율적으로 공간을 할당하고 관리.
    이를 통해 데이터베이스는 사용자에게 논리적인 단순성을 제공하면서도, 내부적으로는 물리적 효율성을 유지.

0개의 댓글