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 | 5장. 데이터베이스 Call 최소화 원리 | 휘휘 | 2010.07.05 | 6103 |
66 | 6장. I/O 효율화 원리 | 휘휘 | 2010.07.08 | 6404 |
65 | 6. V$SYSTEM_EVENT | 토시리 | 2010.06.14 | 6523 |
64 | 진행기록 | 운영자 | 2011.08.23 | 6588 |
63 | 8. 애플리케이션 커서 캐싱 | 토시리 | 2010.06.29 | 6613 |
62 | 3장. 오라클 성능 관리 | 운영자 | 2010.06.06 | 6699 |
61 | 6. 페이지 처리의 중요성 | 실천하자 | 2010.07.11 | 6821 |
60 | 2장. 트랜잭션과 Lock | 운영자 | 2010.06.01 | 6896 |
59 | 4장. 라이브러리 캐시 최적화 원리 | 휘휘 | 2010.06.28 | 6916 |
58 | 12. 데이터베이스 성능 고도화 정석 해법 | 휘휘 | 2010.06.14 | 7153 |
57 | 1. SQL과 옵티마이저 | 휘휘 | 2010.06.28 | 7218 |
56 | 부록 | 휘휘 | 2010.07.19 | 7238 |
55 | 2. Memory vs. Disk I/O | 휘휘 | 2010.07.12 | 7439 |
54 | 8. I/O 효율화 원리 | 휘휘 | 2010.07.19 | 7743 |
53 | 10. 대기 이벤트 | balto | 2010.05.30 | 8012 |
52 | 7. Response Time Analysis 방법론과 OWI | balto | 2010.06.13 | 8067 |
51 | 11. End-To-End 성능관리 | 휘휘 | 2010.06.14 | 8095 |
50 | 9. Snapshot too old | balto | 2010.05.30 | 8103 |
49 | 3. 비관적 vs. 낙관적 동시성 제어 | 휘휘 | 2010.06.07 | 8210 |
48 | 2. AutoTrace | 실천하자 | 2010.06.06 | 8599 |