순서 | 작업내용 | 실패시 동작 | 이벤트 |
---|---|---|---|
1 | 해당 트랜잭션에 대해 Undo Segment를 할당한다. | Online Undo Segment 3회 획득시도 (실패시) → Offline Undo Segment 를 Online 화 시도 (실패시) → 새로운 Undo Segment 생성 (실패시) → 8i 에서 사용하던 Rollback Segment 알고리즘 사용 : 이미 다른 트랜잭션에 의해 사용 중인 Undo Segment 중 가장 사용량이 적은 것을 사용 | enq: US - contention 이벤트 : 서버 프로세스가 언두 세그먼트를 획득하는 시점에 적당한 온라인 상태의 언두 세그먼트가 없을때 온라인 상태의 언두 세그먼트가 확보될때까지 대기하는 이벤트 |
2 | 언두 세그먼트를 할당받으면, 언두 세그먼트 헤더에 transaction table slot 을 생성한다. | ||
3 | 트랜잭션 테이블을 생성하고나면 TXID(Transaction ID)를 생성하고, 핸재 트랜잭션에 할당한다. 트랜잭션은 반드시 언두 영역에 할당받은 다음 ID를 부여 받는다. | ||
4 | 트랜잭션의 대상이 되는 블록들을 Buffer Cache로 적재하고 블록 헤더의 ITL(Interested Transaction List)에 Transaction Entry를 등록한다. | enq: TX - allocate ITL entry 이벤트 만일 ITL에 Entry를 등록할 공간이 없다면, 공간이 확보될 때까지 대기하는 이벤트 |
|
5 | 변경할 블록들의 변경 정보를 PGA에 체인지 벡터라는 이름으로 저장된다. 프로세스는 PGA에 체인지 벡터들을 리두 레코드(리두 엔트리)라는 이름으로 Redo Buffer로 복사한다. | latch: redo copy latch: redo allocation latch: redo writing : 리두 버퍼에 변경 내용을 복사하는 과정에서 해당 래치를 획득하기 위해 대기하는 이벤트 |
|
6 | 이전 이미지(Before Image)에 대한 정보를 언두 블록에 기록하고, 데이터 블록을 변경한다. 변경된 데이터 블록은 Dirty 상태가 된다. 또, 변경된 데이터 블록에 대한 CR 블록이 Buffer Cache에 생성된다. | enq: TX - row lock contention 이벤트 : 변경하고자 하는 로우가 현재 다른 트랜잭션에 의해 변경 중이라면 해당 트랜잭션이 종료되기를 기다리는 이벤트 |
|
7 | 커밋이 수행되면 트랜잭션에 SCN을 할당하고, 커밋정보는 리두 버퍼에 저장된다. | ||
8 | Undo Segment 헤더의 트랜잭션 테이블에 커밋이 이루어졌음을 저장하고, 락을 포함한 모든 리소스에 대한 점유를 해제한다. | ||
9 | Redo Buffer의 내용이 리두 로그 파일에 기록된다. 변경된 블록들은 이후 DBWR에 의해 데이터 파일로 기록된다. |
내용 | 트랜잭션 대기 이벤트 |
---|---|
인덱스가 없는 Foreign Key | enq:TM - contention |
부적절한 DDL로 인한 TM락 경합 | enq:TM - contention |
Lock table .. (의도적인 TM락) | enq:TM - contention |
Direct/Parallel Load 작업 | enq:TM - contention |
여러 세션이 동일 로우를 변경하는 경우 | enq:TX - row lock contention, mode=6 |
여러 세센이 Unique Key 충돌을 일으키는 경우 | enq:TX - row lock contention, mode4 |
ITL Entry 부족 | enq:TX - allocate ITL entry, mode=4 |
여러 세션이 Bitmap Index 충돌을 일어키는 경우 | enq:TX - row lock contention, mode=4 |
Index leaf node에서 Split이 발생하는 경우 | enq:TX - index contention, mode=4 |
기타(enq: Tx - contention) | enq:TX - contention |
사용자 정의 락, DBMS_LOCK | enq:UL - contention, PL/SQL lock Timer |
DML 락 | TM 락과 일치 일반적인 DML 문은 테이블에 대해 TM락을 Sub-Exclusive(SX)모드로 획득 |
---|---|
DDL 락 | library cache lock과 일치 |
여러 세션이 동일 로우를 변경하는 경우 | enq:TX - row lock contention |
---|---|
여러 세센이 Unique Key 충돌을 일으키는 경우 | enq:TX - row lock contention |
ITL Entry 부족 | enq:TX - allocate ITL Entry |
여러 세션이 Bitmap Index 충돌을 일어키는 경우 | enq:TX - row lock contention |
인덱스 리프 노드에서 Split이 발생하는 경우 | enq:TX - index contention |
기타 | enq: Tx - contention |