DB/Oracle

[오라클] DEADLOCK과 ITL슬롯 그리고 INITRANS/MAXTRANS

OIMKHOT 2023. 1. 5. 16:01

 

 DML 수행 시 데이터를 저장하고 있는 블록에 접근하여 해당 트랜잭션의 정보를 블록에 기록하고 마치면 회수하는 방식으로 관리한다.

 

 블록안에 그 정보를 기록하는 영역을 ITL(트랜잭션 슬롯)이다. 다른 말로는 ITL 슬롯을 확보하지 못하면 해당 블록의 데이터에 접근할 수 없다는 뜻이다.

 

ITL에 정보가 기록되는 만큼 당연히 데이터 처럼 블록의 일부를 차지하여 스토리지를 사용한다.

 

이는 테이블 파라미터 중 INITRANS 값으로 제어되고 default는 1이며 index는 2이다.

 

블록이 모두 사용되고 있지 않을 때 ITL의 개수는 MAXTRANS값만큼 늘어날 수 있고 default는 255이다.

 

즉, 데이터가 가득 차있지 않아 블록에 ITL을 추가 할당할 여유가 있을 경우 ITL 개수를 자동으로 늘려가며 블록에 동시 접근 가능한 트랜잭션의 개수는 255개라는 뜻이다.

 

그러나 블록이 데이터로 가득 차있어서 MAXTRANS값 만큼 도달하지 않았음에도 공간이 모자라 ITL 슬롯을 늘릴 수 없다면 초기 미리 확보해둔 INITRANS 값만큼의 트랜잭션만 접근할 수 있고, 이는 곧 ITL할당을 받지 못한 트랜잭션들은 대기 현상이 발생할 수 있다는 것이다. (ITL Waits 발생)

 

일반적인 상호 논리적 쿼리에 의한 DEADLOCK은 같은 데이터에 접근할 경우 발생한다.

그러나 다른 데이터라 하더라도 같은 블록에 저장되어 있다면 ITL할당을 받지 못해 DEADLOCK이 발생할 수 있다.

이를 테면 A, B 블록이 있고
TX1은 A-> B 순서로 Update 작업을 수행,
TX2는 B-> A 순서로 Update 작업을 차례대로 수행해야만 블록에 대한 ITL할당을 해제할 수 있다.


TX1은 A 블록에 먼저 접근, B 블록을 읽어야만 트랜잭션을 마칠 수 있고
TX2는 B 블록에 먼저 접근, A 블록을 읽어야만 할 때, 각 A와 B의 추가 ITL을 확보할 수 없다면 DEADLOCK이 발생할 수 있다.

이는 INITRANS를 늘려주는 간단한 해결책이 있으나 스토리지 영향도를 판단해야 한다.

 

ITL 슬롯의 크기는 OS에 의존적이긴 하나 보통 23Bytes이다.

INITRANS의 초기 고정 할당을 늘리면 INITRANS * 23Bytes 크기가 모든 블록마다 할당된다. INITRANS를 높인 목적만큼 트랜잭션이 발생한다면, Deadlock을 방지하게 되겠지만, 블록 접근이 저조해지더라도 초기 할당한이 회수되는 것이 아니다.

 

즉, 사용하던 말던 항상 미리 준비되는 셈이기 때문에 모든 블록마다 무의미한 공간이 할당 된 결과로 쓸모없이 테이블 크기가 증가하고 더 많은 블록수를 사용하게 되어 결과적으로 성능이 악화될 수 있다.

따라서 적절한 크기는 통상 접근하는 DML User의 수(트랜잭션)를 확인 후 같거나 조금 적게 설정하고, MAXTRANS를 INITRANS의 최대값인 100으로 설정해두기를 권고한다.


 그러나 INITRANS만 변경할 시 앞으로 생성되는 블록에만 적용되고 Index가 Unusable이 되므로 기존 블록에서 발생하는 이슈를 해결하기 위해서는 테이블/인덱스 재생성 or Reorg와 Index Rebuild가 필요하다.

P.S. Insert는 ITL과 무관하여 새로운 블록을 할당하여 사용하기 때문에 ITL Waits 및 ITL로 기인한 Deadlock은 Update Delete시만 발생한다.

 

 

참조

http://www.dba-oracle.com/t_initrans.htm

 

Oracle INITRANS tips

      Oracle INITRANS tips Oracle Database Tips by Donald Burleson Eliminating data block contention involves eliminating ?hot? data  blocks from the application, and super-high concurrent DML can cause block contention that will be relieved by increas

www.dba-oracle.com