권순용의 DB 이야기
Lock & Enqueue (2) 0 1 99,999+

by axiom Lock Enqueue Oracle Internals TM Enqueue TX Enqueue V$LOCK [2014.03.03]


데이터베이스 아키텍처를 분석하고 학습하다 보면 항상 데이터베이스 내부 구조에 대한 호기심이 생기게 마련이다. 이와 같은 데이터베이스 내부 아키텍처는 실제 업무를 수행하는 데 그다지 큰 도움이 되지 않는다고 생각할 수 있다.

하지만 데이터베이스 내부 아키텍처를 정확히 이해한다면 데이터베이스에 문제가 발생하는 경우 정확하고 논리적인 분석이 가능하게 된다. 그렇기 때문에 데이터베이스를 확실하게 분석하기 위해서는 데이터베이스 Internal은 반드시 이해하는 것이 유리하다.

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

Enqueue의 종류

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

  • [그림 1] Enqueue의 종류
  • Enqueue의 종류

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

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

  • - TM
  • - TX

M과 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은 다음과 같은 컬럼들로 구성된다.

  • [그림 2] Enqueue의 확인
  • 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는 여러 종류가 존재하며 오라클의 뷰를 통해 현재 상태를 확인할 수 있다.

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/2694

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 신화씨앤씨 [2014.09.12 14:36:56]

감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입