행위

테이블 inittrans maxtrans

DB CAFE

thumb_up 추천메뉴 바로가기


INITRANS 와 MAXTRANS[편집]

  1. Update시 SQL처리과정은 Parse와 Execute 단계로 실행 (parse는 select와 동일)
  2. execute는 데이터블럭과 언두블럭 read -> row level lock -> redo entry -> undo발생 -> 데이터 수정의 과정을 거치게 된다.
  3. 이때 일어나는 트랜잭션처리 과정
    1. 언두 세그먼트 바인딩
    2. 언두 세그먼트 할당
    3. 트랜잭션 테이블 슬롯 할당 (트랜잭션 테이블 슬롯 중 가장 오래 전에 커밋된 트랜잭션 테이블이 재사용)
    4. 할당된 트랜잭션 ID로 exclusive TX lock 획득.
    5. 언두 블록 할당.
    6. 데이터 블록 변경 발생
      - 변경된 블럭은 Dirty 상태가 된다. 또한 변경된 데이터 블럭에 대한 CR블럭이 버퍼캐시에 생성된다.
    7. 커밋. 트랜잭션에 SCN을 할당.
  4. 여기서 블럭을 변경하기전 블럭 헤더의 ITL(Interested Transaction List)에 엔트리를 등록해야 한다.
    1. ITL이란? 데이터 블록 내에 있는 슬롯으로 블럭을 변경하고자 하는 트랜잭션들의 List이다.



assignment INITRANS
  • 데이터 블럭을 처음 사용하기 위해 포맷시 블럭헤더에 있는 itl slot을 몇개를 할당할지 지정하는 값
  • 테이블 과 인덱스 생성시 지정 함.


  • 초기값은 INITRANS의 값으로 정의되며 미리 확보할 ITL entry수를 의미한다.(테이블 생성시 initttans 기본값은 2 임)
  • 최대값은 MAXTRANS 값으로 ITL Entry의 최대 수를 의미한다. (기본 255)
  • 만약 모든 가용한 ITL이 사용중이고 새로운 ITL 슬롯을 동적으로 할당하기위한 PCTFREE 영역의 공간이 충분하지 않을때는 엔트리를 할당받지 못하여 TX Lock 경합이 발생하게 된다.
    - 이때는 ITL entry를 차지한 다른 트랜잭션이 커밋이나 롤백을 수행하여 ITL 슬롯을 재사용할 수 있을때까지 대기함
    - enq:TX allocate itl entry 대기 이벤트 발생
  • 오라클은 row단위의 lock을 걸지만 일단 데이터의 Access시 블럭 단위로 엑세스 하므로 결국 block 단위의 lock이 필요하다.


assignment MAXTRANS
  • 블럭헤더에 미리 할당한 itl slot 이 모두 사용중이라면 maxtrans로 지정된 개수 만큼 추가 itl slot을 할당 할수 있음.