8. 블록 클린아웃
2010.05.31 07:27
- 블록 클린아웃(Block Cleanout)
트랜잭션에 의해 설정된 Row Lock 을 해제하고 블록 해더에 커밋 정보를 기록하는 오퍼레이션 - Row Lock
레코드의 속성(Lock Byte)로 관리, 로우 해더라부터 블록 해더에 있는ITL엔트리를 가리키는 포인터 - 오라클의 블록 클린아웃
- Delayed 블록 클린아웃
- 커밋 클린아웃 (=fast 블록 클린아웃)
- 커밋 클린아웃 (=fast 블록 클린아웃)
(1) Delayed 블록 클린아웃
- 트랜잭션이 갱신한 블록 개수가 총 버퍼 캐시 블록 개수의 1/10을 초과할때 사용
- 수행작업
- ITL 슬롯에 커밋 정보저장
- 레코드에 기록된 Lock Byte 해제
- Online Redo에 Logging
- 블록을 읽는 과정에서 ACTIVE 블록( 다른 트랜잭션이 발생시킨 변경사항에 대한 커밋 정보가 ITL에 기록되지 않은상태) 이면
읽기전에 먼저 블록 클린아웃을 시도
(2) 커밋 클린아웃 (= FAST 블록 클린아웃)
- OPS 환경에서 과도한 ping이 발생하는 문제를 해결하기 위해 도입
OPS(Oracle Parallel Server)
: 9i 이전 버전,, datafile 쓰기 전까지 buffer 내용을 각노드끼리 공유디스크를 통해 주고 받음 (ping)
RAC(real application cluster)
: 9i 이후 버젼 , cache fusion, 노드간 일종의 고속네트웍을통해 필요내용을 주고 받음
: 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
Scn/Fsc : FSC (Fast 클린아웃상태)
Flag: U
- Fast 클린아웃 - 곧바로 재사용될수 없고 쓰기 작업을 위해 블륵을 읽히는 순간 Lock Byte를 해제하고 재사용
0x02: )
Flag: C
Scn/Fsc: Scn 정확한 커밋 시점 정보
Scn/Fsc: Scn 정확한 커밋 시점 정보
- Dlayed 블록 클린아웃에 의해 클린아웃된 경우 - 01번에서 Lock byte가 해제된상태 (ITL 언제든 재사용가능)
0x03:
Flag: C-U-
Scn/Fsc: scn
- 추정된 커밋 SCN(Upper bound commit number)
Scn/Fsc: scn
- 추정된 커밋 SCN(Upper bound commit number)
- 추정된 커밋 SCN - Lock Byte가 완전히 해제, 완전 클린아웃
- 참고) http://www.adp-gmbh.ch/ora/misc/dump_block.html <- DATA BLOCK DUMP 방법
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
67 | 진행기록 | 운영자 | 2011.08.23 | 6588 |
66 | 3. Deterministic 함수 사용 시 주의사항 | 실천하자 | 2010.07.19 | 10589 |
65 | 6. RAC 캐시 퓨전 | 토시리 | 2010.07.19 | 12631 |
64 | 부록 | 휘휘 | 2010.07.19 | 7238 |
63 | 8. I/O 효율화 원리 | 휘휘 | 2010.07.19 | 7742 |
62 | 7. Result 캐시 | 휘휘 | 2010.07.19 | 12969 |
61 | 2. Cursor_Sharing | balto | 2010.07.17 | 10214 |
60 | 1. Library Cache Lock | balto | 2010.07.17 | 12802 |
59 | 1. 블록 단위 I/O | 토시리 | 2010.07.12 | 9381 |
58 | 7. PL/SQL 함수의 특징과 성능 부하 | 실천하자 | 2010.07.12 | 12603 |
57 | 3. Single Block vs. Multiblock I/O | 휘휘 | 2010.07.12 | 9170 |
56 | 2. Memory vs. Disk I/O | 휘휘 | 2010.07.12 | 7439 |
55 | 6. 페이지 처리의 중요성 | 실천하자 | 2010.07.11 | 6820 |
54 | 8. PL/SQL 함수 호출 부하 해소 방안 | 토시리 | 2010.07.11 | 14027 |
53 | 5. Direct Path I/O | balto | 2010.07.10 | 12190 |
52 | 4. Prefetch | balto | 2010.07.10 | 28435 |
51 | 6장. I/O 효율화 원리 | 휘휘 | 2010.07.08 | 6404 |
50 | 3. 데이터베이스 Call이 성능에 미치는 영향 | 토시리 | 2010.07.07 | 11665 |
49 | 2. User Call vs. Recursive Call | 토시리 | 2010.07.07 | 9050 |
48 | 5장. 데이터베이스 Call 최소화 원리 | 휘휘 | 2010.07.05 | 6102 |