오라클 성능 고도화 원리와 해법 I (2016년-2)
블록 클린아웃 0 0 3,996

by 구루비 Block Cleanout [2016.11.03]


h1.8. 블록 클린아웃

  • 블록 클린아웃(BIock Cleanout)은 트랜잭션에 의해 설정된 로우 Lock을 해제하고 블록 헤더에 커밋 정보를 기록하는 오퍼레이션이다.
  • 오라클에서 로우 단위 Lock은 레코드의 속성 (Lock Byte)으로 관리되며, 이는 로우 헤더로부터 블록 헤더에 있는 ITL 엔트리를 가리키는 포인터다.
  • 사용자가 트랜잭션을 커밋하면 블록 클린아웃까지 완료해야 완전한 커밋이라고 할 수있는데,
  • 대량의 갱신 작업이 있고 나서 커밋을 위해 해당 블록들을 일일이 찾아다니며 클린아웃을 수행하려면 시간이 오래 걸릴 수밖에 없다. 오라클은 그래서 대량의 갱신 작업이 있고 나서는 커밋 정보를 트랜잭션 테이블에만 기록하고 빠르게 커밋을 끝내 버린다.

h3.(1) Delayed 블록 클린아웃

  • 트랜잭션이 갱신한 블록 개수가 총 버퍼 캐시 블록 개수의 1/10을 초과할 때 시용하는 방식이다.
  • 커밋 이후 해당 블록을 액세스하는 첫번째 쿼리에 의해 클린아웃이 이루어지며, 이때 아래와 같은작업을수행한다.
  1. ITL 슬롯에 커밋 정보 저장
  2. 레코드에 기록된 Lock Byte 해제
  3. Online Redo에 Logging
  • 다른 트랜잭션이 발생시킨 변경사항에대한 커빗 정보가 아직 ITL에 기록되지 않았다면 읽기 전에 먼저 블록 클린아웃을 시도
    한다
    *ITL 슬롯에 기록된 트랜잭션 ID를 이용해 Undo 세그먼트 헤더에 있는 트랜잭션 테이블 슬롯을 찾아가 트랜잭션의 현재 상태를 확인하고 커밋된 트랜잭션이라면 이를 ITL 슬롯에 반영하고 로우 Lock 정보를 해제해 블록을 클린아웃

h3.(2) 커멋 클린아웃(= Fast 블록 클린아웃)

  • 만약 모든 클린아웃을 Delayed 블록 클린아웃 방식으로 처리한다면 select시에 블록을 클린아웃하는 일이 빈번히 발생한다
  • 블록 클린아웃도 쓰기 작업이므로 Current 블록에 작업을 수행해야 하며, RAC 또는 OPS 환경에서는 이를 위해 Exclusive 모드의 Current 블록을 요청하게 된다.

h3.(3) ITL과 블록 클린아웃

  • 패쓰
"구루비 DB 스터디 모임" 에서 2016년에 "오라클 성능 고도화 원리와 해법 I " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3143

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입