ITL

EXEM Knowledge Base

Jump to: navigation, 찾기

Interested Transaction List

블록에 발생시킨 하나의 Transaction 당 Block Header에 Transaction 엔트리들이 List의 형태로 관리된다고 이미 설명했다. Header 내부 Transaction 정보를 관리하는 List 자체를 ITL 즉, 풀어서 Interested Transaction List 라고 한다. Block Header의 ITL 내부에는 각각의 Transaction Entry들이 있으며 내부에는 Transaction 자체의 정보, Row Before 정보를 가지고 있는 Undo Segment 또는 Rollback Segment 관련 정보, Transaction 의 Commit 여부, 블록 내부에 Row Level Lock이 걸린 Row 수, Transaction 완료 시의 SCN 정보에 대한 것들을 포함하고 있다. Block 내의 Row들은 이 ITL의 하나의 Entry와 관계를 맽는다. 이 부분에 대해서는 예를 통해 자세히 설명할 것이다. 
 다음은 Block Dump를 통한 ITL 정보를 본 경우이다.
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01 0x0005.007.0000011a 0x008012e5.00d6.24 C--- 0 scn 0x0000.00081ac7 0x02 0x0012.00f.00000b38 0x02000d6f.00ab.0e ---- 14 fsc 0x0000.00000000 0x03 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000

 * ITL: ITL  내부의 하나의 Slot(즉, 엔트리) 번호이다. 트랜잭션 하나 당 하나의 ITL Slot이 생긴다. 해당 Slot은 Flag 에 따라 Commit이 되었을 수도 있고 아닐 수도 있다.
 * XID: ITL Slot과 관계를 맺은 Transaction의 XID 정보이다. V$TRANSACTION 뷰에서 XID 정보를 찾을 수 있으며, XID는 트랜잭션을 유일하게 식별해주는 값이다.
 * UBA: Transaction이 참조하고 있는 Undo 정보이다. Before 이미지가 저장된 곳을 찾을 때 이것을 참조한다.
 * FLAG: Transaction의 상태를 나타낸다. 크게 '----' 처럼 어떠한 Flag도 기록되어 있지 않으면 Transaction이 진행 중이라는 의미가 되며, 이외에는 Commit을 통해 완료된 상태로 봐도 된다.(Flag 정보와 관련하여 여러 이슈들이 존재한다. 이 부분에 대해서도 이후 세션에서 자세히 다루겠다.)
 * LCK: 해당 ITL Slot을 사용하는 Transaction이 해당 Block의 얼마나 많은 Row에 Lock을 걸었는지 나타낸다.( Commit이 된 Transaction의 ITL Slot이고 Lock을 잡은 Row가 없는 데도 불구 값이 설정된 경우가 있다. 이 부분에 대해서는 Delayed Block Cleanout 부분에서 추가로 다룰 것이다.
 * SCN/FSC: SCN이 표시 된 경우 Transaction이 Commit된 경우 그 시점의 scn 정보를 기록한다.(FSC 에 대한 부분은 이후에 설명하겠다.)
 * 위 상태는 트랜잭션이 진행 중인 상태인 Flag '----'상태와 이전의 Commit 된 Transaction 정보를 포함하는 'C---' 상태만이 Slot에 포함된 경우만 설명하였다. 그러나, 이것들 이외의 사항들이 존재하며, 이후에 관련하여 추가 설명을 하겠다.


 위 ITL 정보 각각을 설멍하면 다음과 같다.

1) ITL Slot 0x01: 이미 Commit된 Transaction의 Slot이다. 이전에 어떤 트랜잭션이 Slot을 사용한 후, Commit을 하였다. Flag 값은 'C---' 으로 Commit 되었다는 것을 알 수 있으며, 트랜잭션 완료 시점의 scn은 '0x0000.00081ac7' 이다. 단, Transaction의 변경된 Row에 대한 Before Image를 참조하는 Row가 있을수도 있다. 이때 UBA와 SCN 정보를 이용하여 찾는다.

2) ITL Slot 0x02; 현재 진행중인 Transaction의 Slot이다. 관련 XID 정보와 V$TRANSACTION 정보의 조합으로 진행 중인 트랜잭션의 상세사항을 알 수 있다. LCK 값이 '14' 이므로, 블록의 총 14개 Row에 대해 Lock을 걸었다는 것을 알수 있다.

3) ITL Slow 0x03: 해당 Slot에는 모든 값들이 '0' 으로 설정되어 있다. 이것이 의미하는 것은 다음의 두 가지 중 하나이다.

 첫 번째, 해당 Slot이 전혀 사용되지 않은 경우이다. INITRANS로 인해 미리 설정된 Transaction Slot이 아직 사용되지 않은 경우이다.
 두 번째, 처음으로 사용된 Slot에 대해 할당된 Transaction이 Rollback을 수행한 경우이다. 이 경우 이전에 설정된 ITL Slot정보는 전부 '0' 이므로 이 값으로 돌려 놓는 것이다. Rollback의 의미는 Row 데이터 정보 뿐만 아니라 ITL Slot 정보 또한 이전 값으로 돌려 놓는다.. 

- 실제 Transaction은 여러 Block을 변경하므로, 각각은 여러 ITL Slot과 관계를 맺을 수 있다. 관계를 맺을 수 있는 ITL은 테이블 Data Block 기준으로 보았을 때, 전체 Block 수만큼 된다. 그러나, 실제 영향을 미친 Row들에 인덱스가 있는 경우, 인덱스 Block의 ITL Slot과 연관을 맺게 된다. 그러므로, 인덱스가 많은 테이블에 대해 인덱스 컬럼에 대한 변경이 있는 경우 훨씬 많은 Block의 ITL Slot과 연관을 맺게 된다.