[Oracle] 데이터 블록 구조

prana·2024년 11월 23일
0

ORACLE

목록 보기
39/96
  • 출처: 도서) 초보자를 위한 오라클 12c DBA편

  • 책에 오타가 심해서.. ppt로 직접 만듦..

데이터 블록 헤더

캐시 계층

  1. 데이터 블록 주소 값- 데이터 블록 주소 값 정보
  2. 데이터 블록 포맷 - 데이터 블록의 데이터베이스 버전 정보(예: 오라클 12c.. 정보)
  3. 데이터 블록 종류 - 데이터 블록이 어떤 종류의 세그먼트에 속하는지에 대한 정보(ex: 테이블인지 인덱스인지..

트랜잭션 계층

  1. 트랜잭션 슬롯 - 데이터 블록의 변경에 대한 정보 및 언두 정보를 저장하는 오라클 내부 아키텍처
  2. 트랜잭션 슬롯 목록 - 데이터 블록에 생성되는 트랜잭션의 슬롯의 정보를 저장하는 목록

데이터 헤더

테이블 디렉토리

  • 해당 데이터블록의 세그먼트 정보

행 디렉토리

  • 해당 블록 내 로우(Row)들의 주소값

사용 가능한 공간

  • 저장되다 남은 공간으로, 사용 가능한 공간

데이터 공간

  • 테이블 또는 인덱스 데이터가 저장되는 공간

데이터 블록에 설정할 수 있는 옵션

INITRANS

  • 데이터 블록이 생성될 때 구성되는 초기 트랜잭션 슬롯의 개수 지정
  • 테이블에 대한 기본값 1, 인덱스에 대한 데이터블록 기본값은 2이다.

MAXTRANS

  • 데이터 블록 안에 생성할 수 있는 최대 트랜잭션 슬롯의 개수를 지정하는 옵션이다.

PCTFREE

  • 데이터 블록에 저장된 행에 변경 발생 시 행의 크기가 증가하는 것에 대비해 지정하는 여유 공간
  • 기본값은 데이터 블록의 10%

PCTUSED

  • 수동 세그먼트 공간 관리 방식 사용 시 데이터블록 재사용 여부를 결정하기 위해 지정하는 데이터 블록 사용율이다.
  • 데이터블록에서 데이터가 사용하는 공간이 해당 설정값 이하일 경우, 데이터 블록을 재사용할 수 있다.
  • 기본값은 데이터 블록 크기의 40%이다. 수동 세그먼트 관리 방식을 거의 사용하지 않으므로, 잘 사용하지 않는 옵션이다.
    • 자동 세그먼트 공간 관리 방식의 테이블스페이스에 저장되어있다면, PCTUSED 값은 추출되지 않고, NULL 값으로 추출된다.

트랜잭션 계층

트랜잭션 슬롯(Transaction Slot)

  • 데이터 블록에 변경을 수행할 경우, 작업을 접수하는 창구의 역할

    • 데이터 블록에 대한 변경에 대한 정보 및, 언두 정보를 저장하는 오라클 내부 아키텍처
  • 트랜잭션 슬롯을 획득해야만, 데이터 블록에 대한 변경이 가능하다.

  • 데이터 블록에 초기 트랜잭션 슬롯은 INITRANS 옵션으로 설정 가능.

    • 하나의 데이터 블록 당 255개까지 트랜잭션 슬롯을 설정할 수 있다.
  • 블록에 변경을 수행하고자 하는 트랜잭션에 할당되며, 트랜잭션이 커밋 또는 롤백이 수행되어 트랜잭션이 종료되면 할당을 해제한다.

  • 트랜잭션 슬롯 하나 당 24Bytes

저장되는 정보

  • 데이터 블록에 변경을 수행하는 트랜잭션의 트랜잭션 아이디
  • UBA(Undo Block Address)
  • 변경에 대한 커밋 여부
  • 변경에 대한 락 정보
  • 변경에 대한 SCN

블록 클린아웃(Block Cleanout)

  • 사용자가 트랜잭션을 커밋하면, 블록의 트랜잭션 슬롯에 설정된 락(Lock)정보를 해제하고, 변경에 대한 커밋 여부를 체크하는 것
  • 변경되는 데이터량에 따라 두 가지 방식 중 하나로 수행됨

지연된 블록 클린 아웃(Delayed Block Cleanout)

  • 트랜잭션에 의해 변경된 총 블록의 양이 버퍼 캐시의 10% 이상일 경우, 동작하는 방식
  • 언두 세그먼트 헤더의 트랜잭션 테이블에만 커밋 여부를 체크한다.
  • 실제 블록 클린아웃은 이후 해당 블록을 액세스하는 시점에 언두 세그먼트 헤더의 트랜잭션 테이블을 확인하여 수행된다.

빠른 블록 클린아웃 (Fast Block Cleanout)

  • 트랜잭션에 의해 변경된 총 블록의 양이 버퍼 캐시의 10% 미만일 경우 동작하는 방식으로, 커밋 시점에 블록 클린아웃을 수행한다.

0개의 댓글