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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
27 | 8. 애플리케이션 커서 캐싱 | 토시리 | 2010.06.29 | 6621 |
26 | 9. Static vs. Dynamic SQL [1] | balto | 2010.07.04 | 18380 |
25 | 10. Dynamic SQL 사용 기준 | balto | 2010.07.04 | 8653 |
24 | 11. Static SQL 구현을 위한 기법들 | 실천하자 | 2010.07.05 | 12133 |
23 | 4. Array Processing 활용 | 휘휘 | 2010.07.05 | 18299 |
22 | 1. Call 통계 | 실천하자 | 2010.07.05 | 10467 |
21 | 5. Fetch Call 최소화 | 휘휘 | 2010.07.05 | 16889 |
20 | 5장. 데이터베이스 Call 최소화 원리 | 휘휘 | 2010.07.05 | 6106 |
19 | 2. User Call vs. Recursive Call | 토시리 | 2010.07.07 | 9063 |
18 | 3. 데이터베이스 Call이 성능에 미치는 영향 | 토시리 | 2010.07.07 | 11673 |
17 | 6장. I/O 효율화 원리 | 휘휘 | 2010.07.08 | 6428 |
16 | 4. Prefetch | balto | 2010.07.10 | 28465 |
15 | 5. Direct Path I/O | balto | 2010.07.10 | 12213 |
14 | 8. PL/SQL 함수 호출 부하 해소 방안 | 토시리 | 2010.07.11 | 14053 |
13 | 6. 페이지 처리의 중요성 | 실천하자 | 2010.07.11 | 6826 |
12 | 2. Memory vs. Disk I/O | 휘휘 | 2010.07.12 | 7450 |
11 | 3. Single Block vs. Multiblock I/O | 휘휘 | 2010.07.12 | 9181 |
10 | 7. PL/SQL 함수의 특징과 성능 부하 | 실천하자 | 2010.07.12 | 12621 |
9 | 1. 블록 단위 I/O | 토시리 | 2010.07.12 | 9393 |
8 | 1. Library Cache Lock | balto | 2010.07.17 | 12815 |