테이블 inittrans maxtrans
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
INITRANS 와 MAXTRANS[편집]
- Update시 오라클의 SQL처리과정은 Parse와 Execute 단계로 실행 (parse는 select와 동일
- execute는 데이터블럭과 언두블럭 read -> row level lock -> redo entry -> undo발생 -> 데이터 수정의 과정을 거치게 된다.
- 이때 일어나는 트랜잭션처리 과정
- 언두 세그먼트 바인딩
- 언두 세그먼트 할당
- 트랜잭션 테이블 슬롯 할당 (트랜잭션 테이블 슬롯 중 가장 오래 전에 커밋된 트랜잭션 테이블이 재사용)
- 할당된 트랜잭션 ID로 exclusive TX lock 획득.
- 언두 블록 할당.
- 데이터 블록 변경 발생
- 변경된 블럭은 Dirty 상태가 된다. 또한 변경된 데이터 블럭에 대한 CR블럭이 버퍼캐시에 생성된다.
- 커밋. 트랜잭션에 SCN을 할당.
- 여기서 블럭을 변경하기전 블럭 헤더의 ITL(Interested Transaction List)에 엔트리를 등록해야 한다.
- ITL이란? 데이터 블록 내에 있는 슬롯으로 블럭을 변경하고자 하는 트랜잭션들의 List이다.
- 초기값은 INITRANS의 값으로 정의되며 미리 확보할 ITL entry수를 의미한다.
- 최대값은 MAXTRANS 값으로 ITL Entry의 최대 수를 의미한다. (기본 255)
- 만약 모든 가용한 ITL이 사용중이고 새로운 ITL 슬롯을 동적으로 할당하기위한 PCTFREE 영역의 공간이 충분하지 않을때는 엔트리를 할당받지 못하여 TX Lock 경합이 발생하게 된다.
- 이때는 ITL entry를 차지한 다른 트랜잭션이 커밋이나 롤백을 수행하여 ITL 슬롯을 재사용할 수 있을때까지 대기한다.
- 오라클은 row단위의 lock을 걸지만 일단 데이터의 Access시 블럭 단위로 엑세스 하므로 결국 block 단위의 lock이 필요하다.