메뉴 건너뛰기

bysql.net

8. 블록 클린아웃

2010.05.31 07:27

휘휘 조회 수:12282


  • 블록 클린아웃(Block Cleanout)
    트랜잭션에 의해 설정된 Row Lock 을 해제하고 블록 해더에 커밋 정보를 기록하는 오퍼레이션

  • Row Lock
    레코드의 속성(Lock Byte)로 관리, 로우 해더라부터 블록 해더에 있는ITL엔트리를 가리키는 포인터

  • 오라클의 블록 클린아웃
- Delayed 블록 클린아웃
- 커밋 클린아웃 (=fast 블록 클린아웃)


(1) Delayed 블록 클린아웃

  • 트랜잭션이 갱신한 블록 개수가 총 버퍼 캐시 블록 개수의 1/10을 초과할때 사용
  • 수행작업
  1. ITL 슬롯에 커밋 정보저장
  2. 레코드에 기록된 Lock Byte 해제
  3. Online Redo에 Logging

  • 블록을 읽는 과정에서 ACTIVE 블록( 다른 트랜잭션이 발생시킨 변경사항에 대한 커밋 정보가 ITL에 기록되지 않은상태) 이면
    읽기전에 먼저 블록 클린아웃을 시도

(2)  커밋 클린아웃 (= FAST 블록 클린아웃)



  • OPS 환경에서 과도한 ping이 발생하는 문제를 해결하기 위해 도입


OPS(Oracle Parallel Server)
: 9i 이전 버전,, datafile 쓰기 전까지 buffer 내용을 각노드끼리 공유디스크를 통해 주고 받음 (ping)

RAC(real application cluster)
: 9i 이후 버젼 , cache fusion, 노드간 일종의 고속네트웍을통해 필요내용을 주고 받음


  • 트랜잭션이 갱신한 블록 개수가 버퍼 캐시 블록 개수의 1/10을 초과하지 않을 경우 커밋 시점에 곧바로 블록 클린 아웃을 수행

  • 커밋 시점에 ITL 슬롯에 커밋 정보만 저장하고 로우 헤더에 기록된 Lock Byte는 해제하지 않음  ( 로깅을 수행하지 않기위함)
  • 해당 블록을 갱신하려고 Current 모드로 읽는 시점에 Lock Byte 를 해제하고 완전 클린아웃을 수행후 Online Redo 로깅을 수행
  • Delayed 로깅 블록 클린아웃 (Delayed Logging Block Cleanout) 이라고 부름


(3) ITL 과 블록 클린아웃


 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0006.016.00000378  0x008009f9.03f0.18  --U-    1  fsc 0x0000.0028b73e
0x02   0x0005.01d.0000038c  0x0080015a.02ef.05  C---    0  scn 0x0000.0028b691
0x03   0x0005.00d.000003c4  0x00801a0b.01d1.1d  C-U-    0  scn 0x0000.006770c0


0x01:

Lck=1 (로우 헤더에 Lock Byte가 해제되지 않음)
Scn/Fsc : FSC (Fast 클린아웃상태)
Flag: U


  • Fast 클린아웃 - 곧바로 재사용될수 없고 쓰기 작업을 위해 블륵을 읽히는 순간 Lock Byte를 해제하고 재사용


0x02: )
Flag: C
Scn/Fsc: Scn 정확한 커밋 시점 정보

  • Dlayed 블록 클린아웃에 의해 클린아웃된 경우 - 01번에서 Lock byte가 해제된상태 (ITL 언제든 재사용가능)


0x03:
Flag: C-U-
Scn/Fsc: scn
- 추정된 커밋 SCN(Upper bound commit number)


  • 추정된 커밋 SCN - Lock Byte가 완전히 해제, 완전 클린아웃