전문가칼럼

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

Internal Is Internal, Lock & Enqueue (2)

전문가칼럼
DBMS별 분류
DB일반
작성자
dataonair
작성일
2012-02-14 00:00
조회
13906




◎ 연재기사 ◎


Internal Is Internal, Lock & Enqueue


Internal Is Internal, Lock & Enqueue (2)


Internal Is Internal Shared Pool



Internal Is Internal

Lock & Enqueue (2)

데이터베이스 아키텍처를 분석하고 학습하다 보면 항상 데이터베이스 내부 구조에 대한 호기심이 생기게 마련이다. 이와 같은 데이터베이스 내부 아키텍처는 실제 업무를 수행하는 데 그다지 큰 도움이 되지 않는다고 생각할 수 있다.
하지만 데이터베이스 내부 아키텍처를 정확히 이해한다면 데이터베이스에 문제가 발생하는 경우 정확하고 논리적인 분석이 가능하게 된다. 그렇기 때문에 데이터베이스를 확실하게 분석하기 위해서는 데이터베이스 Internal은 반드시 이해하는 것이 유리하다.

Enqueue는 데이터의 정합성을 위한 구조다. 그렇기 때문에 Enqueue는 데이터 정합성을 위한 모든 아키텍처가 구성되어 있다. 이 글에서는 Enqueue의 종류 및 운영에 대해 확인해 보자.

Enqueue의 종류

<그림 1>은 Enqueue의 종류를 보여주고 있다. 그 중에 Managed Enqueue와 Client Enqueue에 대해 확인해 보자.


1201266ok01.png

<그림 1> Enqueue의 종류

- Managed Enqueue : 오라클 데이터베이스 시스템 레벨에서 발생하는 Enqueue
- Client Enqueue : Client 유저단에서 발생하는 Enqueue

Enqueue 종류는 이와 같이 구성된다. 각각의 Enqueue 종류에 대해 좀더 자세히 확인해 보자.

- TM
- TX

TM과 TX는 Enqueue에서 매우 자주 확인할 수 있는 Enqueue이다. TM Enqueue는 테이블 레벨의 Enqueue이다. 실제 데이터베이스의 테이블에 DML을 수행하게 되면 테이블에 TM Enqueue를 수행하게 된다. 이와 같이 테이블에 TM Enqueue를 수행하게 된다면 테이블에 DML을 수행하는 동안 테이블에 대한 변경 작업을 수행할 수 없게 된다. 이와 같이 DML이 수행되는 동안 테이블의 형식을 변경시키지 못하게 하는 Enqueue가 TM Enqueue에 해당한다. TX Enqueue는 DML을 수행하는 경우 해당 데이터에 수행되는 Enqueue이다. 이와 같이 Enqueue가 수행된다면 해당 데이터는 다른 작업에 의해 변경이 발생할 수 없게 된다. 이와 같이 한 번에 하나의 데이터만을 변경할 수 있게 하는 것이 TX Enqueue에 해당한다.
TM Enqueue와 TX Enqueue는 이와 같이 데이터의 정합성을 위한 한 번에 한 번의 변경만을 허용하는 Enqueue에 해당한다.

Enqueue 확인

Enqueue는 <그림 2>와 같은 2개의 뷰에서 확인할 수 있다. 그 중에서 V$LOCK은 Enqueue에서 매우 중요한 역할을 수행하게 된다. V$LOCK은 다음과 같은 컬럼들로 구성된다.


1201266ok02.png

<그림 2> Enqueue의 확인

- ID1 : TM Enqueue인 경우 테이블 ID
- LMODE : Enqueue Mode

- REQUEST : Enqueue 요청 Mode

이 컬럼들은 V$LOCK 뷰의 중요 컬럼들이다. ID1 컬럼의 경우 TM Enqueue의 경우 테이블 ID이다. 그렇기 때문에 해당 값을 이용해 어떤 테이블에 Enqueue가 수행되어 있는지를 확인할 수 있다.
LMODE 컬럼의 경우 실제 해당 세션이 획득한 Enqueue의 모드다. 이를 통해 해당 세션에서 어떤 Enqueue Mode를 수행하고 있는지를 확인할 수 있게 된다. LMODE 값이 6이면 X Mode로 Enqueue를 수행한 것이다.

REQUEST 컬럼은 Enqueue를 획득하진 못하고 대기하는 상태를 의미한다. 이와 같이 Request 컬럼에 값을 가지는 세션은 Enqueue를 획득하지 못한 상태가 된다. 따라서 작업은 계속 대기 상태로 변하게 된다. 예를 들어 REQUEST 컬럼에 6번 값을 가지게 되면 X Mode를 Enqueue를 요청했으나 다른 세션에 의해 6번 Enqueue가 획득되고 해당 세션은 대기하는 상태가 된다.

이와 같이 Enqueue는 여러 종류가 존재하며 오라클의 뷰를 통해 현재 상태를 확인할 수 있다.