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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
47 | 2. 트랜잭션 수준 읽기 일관성 | 휘휘 | 2010.06.07 | 20059 |
46 | 3. 비관적 vs. 낙관적 동시성 제어 | 휘휘 | 2010.06.07 | 8218 |
45 | 4. 동시성 구현 사례 | 토시리 | 2010.06.07 | 10959 |
44 | 5. 오라클 Lock | 휘휘 | 2010.06.07 | 26381 |
43 | 7. Response Time Analysis 방법론과 OWI | balto | 2010.06.13 | 8076 |
42 | 8. Statspack / AWR | balto | 2010.06.13 | 12787 |
41 | 9. ASH(Active Session History) | 실천하자 | 2010.06.14 | 15614 |
40 | 11. End-To-End 성능관리 | 휘휘 | 2010.06.14 | 8137 |
39 | 12. 데이터베이스 성능 고도화 정석 해법 | 휘휘 | 2010.06.14 | 7161 |
38 | 5. V$SYSSTAT [1] | 토시리 | 2010.06.14 | 9874 |
37 | 10. V$SQL | 실천하자 | 2010.06.14 | 12701 |
36 | 6. V$SYSTEM_EVENT | 토시리 | 2010.06.14 | 6534 |
35 | 3. 라이브러리 캐시 구조 | balto | 2010.06.28 | 9861 |
34 | 4. 커서 공유 | balto | 2010.06.28 | 9220 |
33 | 1. SQL과 옵티마이저 | 휘휘 | 2010.06.28 | 7221 |
32 | 2. SQL 처리과정 | 휘휘 | 2010.06.28 | 16913 |
31 | 4장. 라이브러리 캐시 최적화 원리 | 휘휘 | 2010.06.28 | 6927 |
30 | 5. 바인드 변수의 중요성 | 실천하자 | 2010.06.28 | 11778 |
29 | 6. 바인드 변수의 부작용과 해법 | 실천하자 | 2010.06.28 | 14724 |
28 | 7. 세션 커서 캐싱 | 토시리 | 2010.06.29 | 10634 |