사용자 도구

사이트 도구


study:oracle:adv_owi_10g:transaction_wait_event

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
study:oracle:adv_owi_10g:transaction_wait_event [2009/08/14 16:50]
starlits
study:oracle:adv_owi_10g:transaction_wait_event [2009/08/17 09:39] (현재)
starlits
줄 3: 줄 3:
 ===== 트랜잭션 작업순서 ===== ===== 트랜잭션 작업순서 =====
  
-  * 사용자 DML(트랜잭션)수행 작업순서+== 사용자 DML(트랜잭션)수행 작업순서 == 
  
 ^ 순서 ^ 작업내용 ^ 실패시 동작 ^ 이벤트 ^ ^ 순서 ^ 작업내용 ^ 실패시 동작 ^ 이벤트 ^
줄 111: 줄 111:
  
   - 모든 트랜잭션은 블록을 변경시키기 전에 블록 헤더의 ITL에 엔트리를 등록해야 한다.   - 모든 트랜잭션은 블록을 변경시키기 전에 블록 헤더의 ITL에 엔트리를 등록해야 한다.
-  - enq:TX - allocate ITL entry+  - **enq:TX - allocate ITL entry** 
 +    - ITL 이 MAXTRANS를 초과하거나 블록 내의 여유공간이 부족해서 엔트리를 등록하는 것이 불가능한 경우, \\ 프로세스는 이미 ITL에 엔트리를 등록한 프레세스의 트랜잭션에 대해 TX 락을 Shared mode로 획득하기 위해 대기하는 이벤트 
 +  - 10g 부터는 MAXTRANS 값이 255로 고정되어 있다. 
  
 ==== 여러 세션이 Bitmap Index 충돌을 일어키는 경우 ==== ==== 여러 세션이 Bitmap Index 충돌을 일어키는 경우 ====
  
-  - +  - 하나의 리프 노드가 넓은 범위의 ROWID를 관리한다. 
 +  - **enq:TX - row lock contention**  
 +    - 테이블의 로우가 변경될때마다 비트맵 인덱스에 해당하는 컬럼값에 대해 로우가 속한 리프 노드의 비트맵을 매번 새로 계산해주어야 한다. \\ 따라서 동시에 두 세션이 같은 리프 노드의 비트맵 연산을 수행할 경우, 순서를 보장하기 위해서 TX 락을 획득한다. 
 +    - 특정 세션이 TX 락을 Exclusive 하게 획득한 후, 비트맵 연산을 수행하고 아직 커밋을 하지 않았다면, \\ 다른 세션들은 선행한 트랜잭션에 대해 TX 락을 Shared mode로 확보하기 위해 대기함으로써 비트맵 연산이 끝나기를 기다리게 된다. 즉, 하나의 리프 노드가 넒은 범위의 ROWID를 관리하기 때문에 TX 락 경합이 광범위하게 나타날 수 있다.
  
 ==== 인덱스 리프 노드에서 Split이 발생하는 경우 ==== ==== 인덱스 리프 노드에서 Split이 발생하는 경우 ====
  
-  - +  - 비트리 인덱스는 **데이터를 추가하는 과정에서 리프 노드가 꽉차면 Split을 함으로써 Balance를 맞춘다.** 
 +  - **enq:TX - index contention** 
 +    - 보통의 상황에서는 잘 볼생하지 않는다. 
 +    - 동시에 여러 세션에서 인덱스가 생성되어 있는 테이블에 대해서 많은 양의 DML을 수행하는 경우에 주로 발생한다. 
 +    - 시퀀스 등을 사용해서 값을 생성하는 컬럼에 대해 인덱스가 생성되는 경우 
 +    - 인덱스가 생성되어 있지 않은 테이블을 변경하는 경우 
 +    - 테이블에 LOB컬럼이 있을때 동시에 여러세션이 LOB테이블을 변경하는 경우
  
 ==== 기타(enq: Tx - contention) ==== ==== 기타(enq: Tx - contention) ====
  
-  - +  - **enq:TX - contention** 
 +    - Distributed Transaction(분산 트랜잭션) 환경에서 Prepared Transaction에 의해 락이 획득된 로우를 읽는 경우 \\ 트랜잭션이 종료(commit,rollback,in-doubt)될때까지 TX락을 Shared Mode로 획득하기 위해서 대기한다. 
 +    - FLM을 세그멘트 공간관리기법으로 사용하는 경우, \\ TFL(Transaction FreeList)을 확보하려는 프로세스는 TFL을 확보하지 못할 경우 \\ 이미 TFL을 확보한 Transaction의 TX락을 Shared Mode로 확보하기 위해서 대기한다. 
 +    - 언두 세그먼트 헤더의 트랜잭션 테이블에서 새로운 슬롯을 할당받고자 하는 경우 \\ TX락을 Exclusive 하게 획득한다. 
 +  - 이들 경우는 겨의 보고되지 않고 있으며, 성능상 이슈도 없는 것으로 보인다. 
 + 
 +=== 동시에 많은 수의 트랜잭션이 발생할 경우 enq:TX - contention 이벤트 대기현상 문제가 생길 수 있다.  ===
  
 ===== enq:UL - contention, PL/SQL lock Timer ===== ===== enq:UL - contention, PL/SQL lock Timer =====
study/oracle/adv_owi_10g/transaction_wait_event.1250236225.txt.gz · 마지막으로 수정됨: 2009/08/14 16:50 저자 starlits