ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [oracle] Database Storage, logical DB (Tablespace, Segment, Extent, Data Block )
    카테고리 없음 2024. 12. 18. 17:00
    logical DB VS pysical DB

     

     

     

     

    • 논리적 데이터베이스데이터 모델링데이터 관계를 다루며, 주로 사용자나 애플리케이션의 요구에 맞춰 데이터를 어떻게 다룰지를 정의함
    • 물리적 데이터베이스는 실제 데이터가 어떻게 저장되고 관리되는지에 중점을 두며, 시스템의 성능저장 공간 최적화, 백업/복구 전략 등을 고려함

     

    논리적 데이터베이스에 대해 자세히 살펴보려함

    논리적 데이터베이스는 다음과 같이 구성됨.

     

     

    • Tablespace는 데이터베이스의 논리적 저장 공간을 관리하며, 여러 테이블이나 인덱스가 저장.
    • Segment는 데이터를 저장하는 집합적인 단위로, 테이블, 인덱스 등의 객체는 세그먼트 형태로 저장됨
    • Extent는 세그먼트 내에서 데이터를 연속적인 블록 단위로 할당하는 단위이며, 물리적 저장을 효율적으로 관리함
    • Data Block은 실제 데이터가 저장되는 가장 작은 물리적 저장 단위로, Oracle 데이터베이스가 데이터를 읽고 쓸 때의 기본 단위

     

     

    Tablespace, Segment, Extent, Data Block 관계

    데이터가 저장되는 구조를 이해하는 데 중요한 역할을 하는데, 이들 간의 관계는 다음과 같다.

    • Tablespace는 데이터베이스에서 데이터를 논리적으로 관리하는 가장 큰 단위임
    • Segment는 테이블, 인덱스 등의 데이터를 저장하는 논리적 데이터 집합이며, 각 세그먼트는 하나 이상의 Extent로 구성됨
    • Extent는 여러 개의 Data Block이 연속적으로 배치된 집합이며, Data Block은 Oracle에서 데이터를 실제로 저장하는 가장 작은 단위임

    예시 흐름

    1. 테이블을 생성하면 Segment가 생성됨
    2. 테이블에 데이터가 추가되면, 필요한 만큼 Extent가 할당됨
    3. 각 Extent는 연속된 Data Block으로 이루어져 있음
    4. 데이터가 Data Block에 저장되며, Data Block은 물리적 디스크에 실제로 존재함

     

     

    각 구성요소에 대해 더 자세히 살펴보면 다음과 같다.

    1. Tablespace

    Tablespace는 Oracle 데이터베이스에서 데이터를 논리적으로 관리하기 위한 가장 큰 저장 단위입니다. 데이터베이스 객체(예: 테이블, 인덱스, 클러스터 등)는 특정 테이블스페이스에 저장됩니다. 테이블스페이스는 논리적 개념이며, 실제 데이터는 테이블스페이스 내의 물리적 파일에 저장됩니다.

    특징

    • 논리적 저장 단위: 테이블스페이스는 데이터베이스의 논리적인 저장 영역을 정의하며, 여러 개의 테이블스페이스가 데이터베이스 내에서 서로 독립적으로 존재할 수 있습니다.
    • 물리적 파일에 맵핑: 각 테이블스페이스는 하나 이상의 물리적 파일(데이터 파일)과 연결됩니다. 이 데이터 파일은 실제 데이터가 저장되는 디스크 공간을 나타냅니다.
    • 테이블스페이스의 종류
      • SYSTEM 테이블스페이스: 시스템과 관련된 중요한 데이터(예: 데이터 딕셔너리, 시스템 테이블 등)가 저장됩니다.
      • USERS 테이블스페이스: 일반적인 사용자 데이터가 저장됩니다.
      • TEMP 테이블스페이스: 정렬 작업이나 임시 데이터를 저장하는 데 사용됩니다.
      • UNDO 테이블스페이스: 트랜잭션 롤백 및 복구에 필요한 정보를 저장합니다.
      • 예비 테이블스페이스 (Undo, Temp): 임시 저장 공간으로 사용되며, 주로 시스템 성능을 최적화하기 위해 사용됩니다.

    예시

    sql
    코드 복사
    -- 새로운 테이블스페이스 생성 CREATE TABLESPACE my_tablespace DATAFILE '/u01/app/oracle/oradata/mydb/myfile.dbf' SIZE 100M;

    장점

    • 데이터 관리의 유연성 제공 (데이터 파일을 다른 디스크로 옮길 수 있음)
    • 성능 최적화를 위한 데이터 분리 가능 (예: 자주 액세스하는 데이터와 덜 액세스하는 데이터를 별도의 테이블스페이스로 관리)

    2. Segment

    Segment는 테이블스페이스 내에 저장된 데이터의 집합을 의미합니다. Oracle 데이터베이스에서 모든 데이터 객체(테이블, 인덱스, 클러스터 등)는 세그먼트 형태로 저장됩니다. 예를 들어, 하나의 테이블은 하나의 세그먼트를 차지하며, 하나의 세그먼트는 여러 개의 extent로 구성됩니다.

    특징

    • 데이터 저장 단위: 세그먼트는 데이터베이스에서 테이블, 인덱스, 롤백 세그먼트와 같은 저장 구조의 데이터를 포함하는 논리적 저장 단위입니다.
    • 세그먼트 유형: 세그먼트의 종류에 따라 저장되는 데이터 유형이 달라집니다.
      • 테이블 세그먼트: 테이블에 저장된 데이터.
      • 인덱스 세그먼트: 인덱스에 저장된 데이터.
      • 롤백 세그먼트: 트랜잭션 롤백을 위한 데이터.
    • 세그먼트는 물리적으로 extent를 여러 개 가질 수 있으며, 데이터가 추가될 때 세그먼트의 크기는 Extent 단위로 증가합니다.

    예시

    • MY_TABLE이라는 테이블은 테이블 세그먼트를 가지며, 이 테이블에 데이터를 삽입하면 세그먼트 크기가 커질 수 있습니다.

    3. Extent

    Extent세그먼트 내에서 데이터를 저장하는 연속된 블록 집합입니다. 즉, Extent는 하나의 세그먼트에서 할당된 여러 개의 데이터 블록이 모인 집합으로, 세그먼트 내에서 데이터를 효율적으로 관리하기 위한 물리적 저장 단위입니다.

    특징

    • 연속된 블록 집합: 하나의 extent는 여러 개의 연속적인 데이터 블록으로 구성됩니다. 이 블록들은 물리적 메모리 공간에서 연속적으로 배치됩니다.
    • 크기: Extent의 크기는 테이블스페이스에서 데이터를 관리하는 방식에 따라 다를 수 있습니다. 일반적으로 기본적으로 5MB나 10MB 정도로 설정될 수 있습니다.
    • 자동 확장: 데이터가 세그먼트에 추가되면, 해당 세그먼트에 새로운 Extent가 할당됩니다. 이는 자동으로 이루어지며, 세그먼트가 확장될 수 있도록 합니다.

    예시

    • 만약 한 테이블에 데이터가 추가되어 세그먼트가 부족하게 되면, 새로운 Extent가 할당되어 데이터가 추가됩니다.

    4. Data Block

    Data Block(또는 데이터 블록)은 Oracle 데이터베이스에서 가장 작은 저장 단위입니다. 데이터 블록은 실제로 디스크에 저장되는 데이터를 포함하는 최소 단위이며, Oracle이 데이터를 읽고 쓰는 기본적인 단위입니다. 데이터베이스는 데이터를 읽고 쓸 때 항상 데이터 블록 단위로 작업합니다.

    특징

    • 물리적 저장 단위: 데이터 블록은 데이터베이스의 물리적 저장소에서 실제 데이터를 저장하는 기본 단위입니다. 즉, 테이블에 저장된 데이터, 인덱스, 기타 데이터는 모두 데이터 블록에 저장됩니다.
    • 블록 크기: 데이터 블록의 크기는 데이터베이스의 블록 크기(예: 8KB, 16KB 등)에 의해 결정됩니다. 이 크기는 데이터베이스 생성 시 설정되며, 변경할 수 없습니다.
    • 논리적 및 물리적 연관: 데이터 블록은 논리적으로 데이터를 저장하는 단위일 뿐만 아니라, 물리적으로 데이터를 디스크에 배치하는 단위이기도 합니다.

    데이터 블록 구조:

    데이터 블록에는 다음과 같은 내용들이 포함됩니다:

    • 헤더(Header): 블록의 메타데이터(예: 블록이 사용 중인지, 비어 있는지 여부 등).
    • 행 데이터(Row Data): 실제 저장된 테이블의 행 데이터.
    • 프리 데이터(Free Space): 현재 사용되지 않는 공간으로, 데이터가 삽입될 때 새로운 데이터가 추가됩니다.
    • 체인(Chain): 여러 블록이 연결되어 있을 수 있으며, 한 블록이 꽉 찼을 때 다음 블록으로 체인처럼 연결될 수 있습니다.

    예시

    • 데이터베이스가 데이터를 8KB 블록 크기로 구성하고 있다면, 각 데이터는 8KB 단위로 디스크에 저장됩니다. 예를 들어, users 테이블에 데이터가 저장될 때, 각 레코드는 8KB의 데이터 블록에 기록됩니다.

    장점

    • 효율적인 데이터 읽기/쓰기: 데이터베이스는 데이터를 블록 단위로 읽고 쓰기 때문에, 물리적인 디스크 I/O가 효율적입니다.
    • 적은 메모리 사용: 데이터 블록은 작은 단위로 데이터를 저장하고 처리하므로, 메모리 사용의 최적화가 가능합니다.

     

     

    smallfile TS : 여러 datafile 가질 수 있음 - 4백만개 block

    bigfile TS : 매우 큰 datafile 딱 1개만 가질 수 있음 - 1 datafile 40억개 block

    32K * 40억개 = 32T

     

    db_block_size = 2 4 8 16 32K

     

     

     

     

     

    extent allocate


    1. create table X


    테이블 생성은 extent 생성 안됨

    공간이 아직 없어서 segment가 아직 아님

    그러면 언제 할당되냐? 첫 row insert시 자동 extent 생성됨

    DEFERRED_SEGMENT_CREATION=TRUE 설정해두면 됨.

     

    2. dynamic allocation

     

    3. 직접 할당

    alter table test allocate extent;

    수행시마다 extent 할당

     

     

     

     

    extent deallocate

     

    1. drop table test 반납함

    delete X 반납안함

    truncate table test; 반납함. 테이블에 있는 영역 다 지워라

     

    2. alter table test deallocate unused;

    high water mark 위쪽 반납

    첫번재 extent는 header부분

    high water mark 물자국

     

     

     

     

     

    Creating and Managing Tablespaces

     

     

    • 각 테이블스페이스는 특정 용도에 맞게 설계되며, 이에 따라 Permanent, Undo, Temporary 등 세 가지 주요 테이블스페이스 유형이 있음
    •  각각의 테이블스페이스는 Oracle 데이터베이스의 성능과 유지보수에 중요한 역할을 함

    1. Permanent Tablespace

    Permanent 테이블스페이스는 데이터베이스에서 실제로 사용자 데이터시스템 데이터를 저장하는 테이블스페이스

    이 테이블스페이스는 영구적인 데이터 저장을 위해 사용되며, 일반적으로 테이블, 인덱스, 뷰 등의 데이터가 저장됨

    특징

    • 영구적인 데이터 저장: Permanent 테이블스페이스는 사용자가 생성한 테이블, 인덱스, 뷰 등 영구적인 데이터를 저장하는 데 사용됨
    • 데이터 파일: Permanent 테이블스페이스는 하나 이상의 데이터 파일로 구성되며, 이 데이터 파일은 디스크에 실제 데이터를 저장함
    • 기본 테이블스페이스: USERS 테이블스페이스가 이 범주에 속합니다. Oracle 설치 시 기본적으로 제공되는 테이블스페이스

    생성 예시

    sql
    -- Permanent 테이블스페이스 생성
    CREATE TABLESPACE my_permanent_tablespace DATAFILE '/u01/app/oracle/oradata/mydb/my_permanent.dbf' 
    SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
    • DATAFILE: 테이블스페이스의 물리적 저장 위치를 지정합니다.
    • SIZE: 테이블스페이스의 초기 크기를 지정합니다.
    • AUTOEXTEND: 테이블스페이스의 크기가 자동으로 확장되도록 설정합니다.
    • MAXSIZE: 데이터 파일의 최대 크기를 설정합니다.

    2. Undo Tablespace

    Undo 테이블스페이스는 트랜잭션이 롤백되거나 복구되는 동안 사용되는 중간 데이터를 저장하는 테이블스페이스이다.

    주로 데이터베이스의 트랜잭션 관리복구를 위한 로그 정보를 저장함

    특징

    • 트랜잭션 관리: Undo 테이블스페이스는 트랜잭션이 실행되는 동안 발생하는 데이터 변경을 취소(롤백)하거나, 롤백된 데이터 상태를 복원할 때 사용됨
    • Rollback: 트랜잭션이 완료되기 전에 변경된 데이터를 되돌리기 위해 사용 됨
    • 자동 관리: 데이터베이스는 자동으로 Undo 테이블스페이스를 관리하며, 이를 통해 데이터 무결성을 보장 함
    • 기본 Undo 테이블스페이스: Oracle에서 기본적으로 **UNDO**라는 이름의 테이블스페이스가 제공되며, 이를 통해 트랜잭션 복구 작업을 수행 함

    생성 예시

    sql
    -- Undo 테이블스페이스 생성
    CREATE TABLESPACE undotbs1 DATAFILE '/u01/app/oracle/oradata/mydb/undotbs01.dbf' 
    SIZE 200M AUTOEXTEND ON NEXT 20M MAXSIZE 2G;
    • DATAFILE: Undo 테이블스페이스의 물리적 위치를 지정 함
    • SIZE: 초기 크기를 지정 함
    • AUTOEXTEND: 데이터 파일 크기가 자동으로 확장될 수 있도록 설정 함
    • MAXSIZE: Undo 파일의 최대 크기를 제한함

    사용 예시

    • Undo 테이블스페이스는 롤백을 위해 필요하므로 트랜잭션 처리 중에 Undo 정보를 저장하고, 트랜잭션이 완료되면 해당 데이터는 삭제됩니다.

    3. Temporary Tablespace

    Temporary 테이블스페이스임시 데이터를 저장하는 데 사용되는 테이블스페이스입니다. 이 테이블스페이스는 주로 정렬 작업, 해시 조인, 임시 테이블 등의 일시적인 작업에 필요한 공간을 제공함

    특징

    • 임시 데이터 저장: Temporary 테이블스페이스는 데이터베이스가 쿼리 실행 중에 필요한 임시 데이터를 저장하는 데 사용됩니다. 예를 들어, 대용량 데이터를 처리할 때 정렬 작업, 임시 테이블, 인덱스 빌드 등의 작업이 발생할 때 사용 됨
    • 자동 관리: Temporary 테이블스페이스는 데이터가 한 번 사용되면 삭제되기 때문에 자동으로 관리 됨 .
    • 복구 불필요: Temporary 테이블스페이스는 임시 데이터만 저장하기 때문에 시스템이 크래시오류가 발생하더라도 복구할 필요가 없음

    생성 예시

    sql
    -- Temporary 테이블스페이스 생성 
    CREATE TEMPORARY TABLESPACE temp_ts TEMPFILE '/u01/app/oracle/oradata/mydb/temp01.dbf' 
    SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1G;
    • TEMPFILE: Temporary 테이블스페이스는 TEMPFILE을 사용하여 데이터를 저장합니다. TEMPFILE은 데이터 파일과 달리 복구 대상이 아니므로 로그를 기록하지 않음
    • SIZE: 초기 크기를 지정 함
    • AUTOEXTEND: 필요할 때 자동 확장을 설정하여 공간이 부족할 경우 자동으로 확장 됨
    • MAXSIZE: 확장 가능한 최대 크기를 설정 함

    사용 예시

    • 복잡한 쿼리에서 정렬 작업, 조인 작업 등을 할 때 임시 테이블스페이스에 임시 데이터가 저장 됨
    • 예를 들어, ORDER BY, DISTINCT 등의 작업이 수행될 때 해당 데이터는 Temporary 테이블스페이스에 저장됨

    세 가지 테이블스페이스의 차이점

    속성 Permanent Tablespace Undo Tablespace Temporary Tablespace
    목적 영구적인 사용자 데이터(테이블, 인덱스 등) 저장 트랜잭션 롤백 및 복구를 위한 중간 데이터 저장 임시 데이터(정렬, 해시 조인 등) 저장
    주요 사용처 사용자 테이블, 인덱스, 뷰, 클러스터 등 저장 트랜잭션 관리, 롤백, 데이터 복구 쿼리 실행 중의 임시 작업(정렬, 인덱스 빌드 등)
    파일 유형 DATAFILE DATAFILE (Undo 정보 저장) TEMPFILE (임시 데이터 저장)
    자동 확장 설정 가능 설정 가능 설정 가능
    복구 데이터 복구 가능 트랜잭션 롤백, 데이터 복구에 필수 데이터 복구 필요 없음 (임시 데이터)
    생성 예시 CREATE TABLESPACE permanent_ts DATAFILE '/path/to/file' SIZE 100M; CREATE TABLESPACE undotbs1 DATAFILE '/path/to/undo.dbf' SIZE 200M; CREATE TEMPORARY TABLESPACE temp_ts TEMPFILE '/path/to/temp01.dbf' SIZE 100M;

    정리리

    • Permanent Tablespace는 데이터베이스의 주요 데이터를 영구적으로 저장하는 데 사용됨
    • Undo Tablespace는 트랜잭션 롤백 및 복구에 필요한 중간 데이터를 저장하며, 데이터베이스의 무결성을 유지함
    • Temporary Tablespace는 임시 데이터 작업을 지원하는 데 사용되며, 일반적으로 쿼리 실행 중 발생하는 임시 작업에 대한 데이터를 저장함

    각각의 테이블스페이스는 특정 작업이나 기능을 지원하는데 필수적인 역할을 하며, 성능과 효율적인 데이터 관리를 위해 적절하게 구성하고 관리해야함

     

     

    Segment Space Management

     

    Manual Segment Space Management (수동 세그먼트 공간 관리)

    Oracle 데이터베이스에서 세그먼트(예: 테이블, 인덱스, 클러스터 등)에 대한 공간을 수동으로 관리하는 방법

     

    자동 세그먼트 공간 관리(Automatic Segment Space Management, ASSM)

    Oracle은 기본적으로 지원함

    사용자가 직접 세그먼트의 공간을 관리할 수 있도록 하는 옵션이 Manual Segment Space Management

     

    • Manual Segment Space Management는 테이블이나 인덱스 세그먼트의 공간을 수동으로 관리하는 방식임
    •  Freelist를 사용하여 빈 공간을 추적하고 관리하며, 데이터를 삽입할 때 빈 공간을 수동으로 찾아서 할당함
    • 이 방식은 관리 복잡도가 높고, 공간 효율성이 떨어질 수 있어, 현대적인 Oracle 시스템에서는 대부분Automatic Segment Space Management (ASSM)가 선호됨
    • ASSM은 자동으로 공간을 효율적으로 관리해주므로, 대부분의 경우 수동 방식보다는 자동 방식이 더 유리함

    Manual Segment Space Management와 ASSM의 차이점

    특징Manual Segment Space ManagementAutomatic Segment Space Management (ASSM)

    공간 관리 Freelist 사용, 수동으로 관리 Oracle이 자동으로 공간을 관리
    공간 효율성 빈 공간 관리가 수동으로 이루어져 효율성 떨어질 수 있음 공간 관리가 자동화되어 더 효율적임
    관리 복잡도 수동으로 빈 공간을 관리해야 하므로 복잡함 관리가 자동화되어 더 간단함
    주요 사용 환경 오래된 시스템이나 특별한 요구 사항이 있는 환경에서 사용 대부분의 새로운 시스템에서 사용
    조각화 빈 공간 조각화가 발생할 수 있음 조각화가 자동으로 처리됨

     

    반응형
Designed by Tistory.