메뉴 건너뛰기

Korea Oracle User Group

Admin

Block Cleanout(블럭 클린아웃)

명품관 2016.09.23 15:56 조회 수 : 1428

Block Cleanout(블럭 클린아웃)

트랜잭션에 의해 설정된 로우 Lock을 해제하고 블럭 헤더에 커밋 정보를 기록하는 오퍼레이션을 말함.

사용자가 트랜잭션을 커밋하면 블럭 클린아웃까지 완료해야 완전한 커밋이라할 수 있을 것이다.

하지만 대량 작업 후 커밋을 위해 모든 대상 블럭을 찾아가면서 클린아웃 시키려면 시간이 오래 걸릴 것이다.

그래서 대량 작업 후 커밋 정보를 트랜잭션 테이블에만 기록하고 빠르게 커밋을 끝낸다.

블럭 클린아웃의 시점은? 

Delayed 블럭 클린아웃, 커밋 클린아웃 두가지 방식을 사용하므로 두가지의 경에 블럭 클린아웃 시점이 달라진다.

 

Delayed 블럭 클린아웃

트랜잭션이 갱신한 블럭 개수가 총 버퍼 캐시 블록 개수의 1/10을 초과할 때 사용하는 방식.

커밋 이후 해당 블럭을 액세스하는 첫 번째 쿼리에 의해 클린아웃이 수행된다. 

아래 작업을 수행하면서 이루어진다.

 

 

1) ITL 슬롯에 커밋 정보 저장

2) 레코드에 기록된 Lock Byte 해제

3) Online Redo에 Logging

 

 

블럭을 읽는 과정에서 Active 생태의 블럭, 즉 다른 트랜잭션이 밸생시킨 변경사항에 대한

커밋 정보가 아직 ITL에 기록되지 않았다면 읽기 전에 먼저 블럭 클린아웃을 시도한다.

ITL 슬롯에 기록된 트랜잭션 ID를 이용해 Undo 세그먼트 헤더에 있는 트랜잭션 테이블 슬롯을 찾아가

트랜잭션의 현재 상태를 확인하고 커밋된 트랜잭셔이라면

이를 ITL 슬롯에 반영하고 로우 Lock 정보를 해제해 블럭을 클린아웃시킨다.

블럭 클린아웃을 위한 갱신내용도 Redo에 로깅하며, 블럭 SCN도 변경한다.

 

커밋 클린아웃(Fast 블럭 클린아웃)

트랜잭션이 갱신한 블럭 개수가 버퍼 캐시 블럭 개수의 1/10을 초과하지 않을 때는

커밋 시점에 곧바로 블럭 클린아웃을 수행한다.

다만, 이 경우에도 커밋 시점에는 불완전한 형태의 클릿아웃을 수행하며

해당 블럭을 갱신하는 다음 트랜잭션에 의해 완전한 클린아웃이 이루어진다.

실제 커밋 시점에는 ITL 슬롯에 커밋 정보만 저장하고 로우 헤더에 기록된 Lock Byte는 해제하지 않는다.

커밋 시점에 이미 완전한 커밋 정보가 ITL에 기록돼있기 때문에

이후 CR 모드 읽기 시 커밋 여부와 커밋 SCN을 확인하려고 트랜잭션 테이블을

조회하지 않아도 되며, Lock Byte를 무시하고 그대로 블럭을 읽는다.

ITL 슬롯에 커밋 정보를 저장하면서 Lock Byte를 해제하지 않고 그대로 두는 이유는 로깅을 수해하지 않기 위해서다.

즉, 커밋 클린아웃 시에는 Online Redo에 로그를 남기지 않는다.

로깅 시점을 뒤로 미루는 것이다.

그러고 나서 해당 블록을 갱신하려고 Current 모드로 읽는 시점에(ITL 슬롯이 필요해지므로)

비로서 Lock Byte를 해제하고 완전한 클린아웃을 수행한다.

그리고 그 내역을 Online Redo에 로긴한다.

블럭 클린아웃 정보를 나중에 로깅하다는 의미에서 이를 'Delayed 로깅 블럭 클린아웃' 이라고 부른다.

 

 

참고 : 오라클 성능 고도화 원리와 해법1(조시형 저)

번호 제목 글쓴이 날짜 조회 수
34 Windows 접속 에러 ORA-12638 [1] file Talros 2024.02.14 38
33 수집된 통계가 바로 반영되지 않고 원할 때 반영하도록 하는 방식 명품관 2023.04.04 207
32 Result Cache(oracle11g NF) [6] ocm10gr2 2016.03.14 243
31 mbr(multi block read) 과 sbr(single block read) 사이에 과연 어떤 방식을 선택해야 할까요? [1] 명품관 2022.09.16 283
30 ORA-28014: Cannot Drop Administrative Users 에러 현상 [1] 명품관 2023.03.27 323
29 default 값을 포함한 컬럼 추가시 오라클 버전별 개선 사항 [1] 명품관 2023.01.17 406
28 Python 을 이용해 파일 업로드 해 보기 [1] file Talros 2023.04.19 464
27 SQL Plan Management(SPM) - 2 DBMS_SPM.CONFIG로 필터링 file 명품관 2020.03.26 537
26 ORA-3136 inbound connection time out & JDBC Io exception: Connection reset [1] Talros 2023.02.24 564
25 SQL Plan Management(SPM) - 3 Manual Plan Capture 명품관 2020.06.01 602
24 OS 터미널 접속 없이 오라클 접속을 통해 OS CPU 사용율 모니터링 하기 [3] file 명품관 2020.12.22 768
23 Oracle VMSTAT을 이용한 CPU 사용량 활용법 에밀리오 2016.07.14 859
22 SQL Plan Management(SPM) - 1 파라미터의 기능 확인 명품관 2020.03.19 876
21 DB에 생성된 ROLE의 생성 정보 확인 [2] 명품관 2016.05.31 887
20 RECO 프로세스 트레이스 발생 하면서 ORA-02019 에러 발생시 명품관 2021.01.12 932
19 External Table 기능을 사용해 파일 읽기 명품관 2017.04.05 940
18 Active Session History를 이용한 TOP SQL 분석 (GV$ACTIVE_SESSION_HISTORY) 에밀리오 2016.07.12 1156
17 [12cR2 이상] 오브젝트 이름 30자이상 사용 가능 우뽕 2020.01.22 1164
16 Schema password 재 사용 불가능 하게 하기 [1] Talros 2022.01.26 1164
15 DB option Enable / Disable 정리 방법 - Mos 참고 file 우뽕 2021.01.31 1177
위로