본문 바로가기

Oracle/Admin

[Oracle ] Enq: TX - allocate ITL entry

728x90

Enq: TX - allocate ITL entry

 

ITL (Interested Transaction List)은 특정 블록을 변경하고자 하는 트랜잭션의 목록을 의미하며, 블록의 헤더에서 그 정보를 관리한다. 블록을 변경하고자 하는 모든 트랜잭션은 블록 헤더의 ITL 의 엔트리 중 하나로 자신을 등록해야 한다. 만일 ITL 이 약속된 최대치, 즉 MAXTRANS에 의해 지정된 값을 초과하거나 블록 내의 여유공간이 부족해서 엔트리를 등록하는 것이 불가능한 경우, 프로세스는 이미 ITL에 엔트리를 등록한 프로세스가 Exclusive하게 획득한 TX 락을 Shared 모드로 획득하기 위해 대기하게 된다. 이때의 대기현상은 enq: TX - allocate ITL entry 이벤트로 관찰된다. 테이블을 생성할 때 부여하는 세가지 속성값이 ITL 에 영향을 준다.

  • INITRANS : 블록 헤더마다 몇 개의 ITL 엔트리를 미리 확보할 지를 결정한다. 가령 INITRANS의 값을 10으로 주면 10개의 동시 트랜잭션을 위한 공간이 마련된다.
  • MAXTRANS : 최대 몇개의 ITL 엔트리를 허용할지를 결정한다. 가령 MAXTRANS의 값을 50으로 주면 최대 50개까지의 동시 트랜잭션을 허용한다. MAXTRANS의 기본값은 255이며, 오라클 10g부터는 MAXTRANS는 255로 고정된다. 즉, MAXTRANS 값을 지정해도 오라클은 이 값을 무시하며 항상 255의 값을 사용한다.
  • PCTFREE : 블록이 최초 생성될 때는 INITRANS에 지정된 값만큼 ITL 엔트리가 확보되었다가, 동시 트랜잭션이 증가하면 PCTFREE로 확보된 영역 내에서 MAXTRANS만큼 추가로 확장된다.

만일 동시 트랜잭션이 왕성할 것으로 예상되는 테이블이라면 INITRANS를 충분히 주는 것이 좋다. INITRANS를 충분히 주면 동적으로 공간을 확보하는 오버헤드가 줄어들며, ITL 엔트리 부족에 따른 TX 락 경합이 발생할 확률도 줄어든다. 오라클 10g부터는 MAXTRANS의 값이 255로 고정되므로 잘못된 MAXTRANS 값 지정으로 인해 성능 문제가 생길 소지가 사라졌다. PCTFREE 값을 비정상적으로 작게 설정하는 경우 ITL을 동적으로 확장할 여유공간이 부족해서 문제가 될 수도 있다. 오라클 9i에서 MAXTRANS 값을 임의로 작게 준 경우 TX 락 경합이 어떻게 발생되는지 살펴보자.(오라클 9i에서 테스트를 하는 이유는 오라클 10g에서는 MAXTRANS가 255로 고정되었기 때문이다)

 

https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=237748

728x90
반응형

'Oracle > Admin' 카테고리의 다른 글

[Oracle]Oracle DB 접속 방식 두가지  (0) 2024.05.21
[Oracle] Oracle Dump  (0) 2024.05.09
[Oracle]Oracle log 관리 명령어 정리  (0) 2024.05.07
[Oracle] v$sysstat, v$sesstat  (0) 2024.03.22
[Oracle] ROWDEPENDENCIES , ROW_ROWSCN  (0) 2024.03.08