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

by axiom Lock Latch Enqueue Oracle Internals [2014.02.24]


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

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

데이터베이스를 운영하다 보면 자주 발생하는 것이 LOCK이다. 이와같은 LOCK에 의해 시스템 장애가 발생하기도 한다. 그렇기 때문에 LOCK에 대한 아키텍처는 매우 중요하다. LOCK은 Latch와 Enqueue로 구성되며 이번 시간에는 먼저 Enqueue에 대해 확인해 보자.

Enqueue 아키텍처

[그림 1]은 Enqueue 아키텍처의 전체적인 절차를 표현하고 있다. 그럼 이 그림에서 사용되는 용어들에 대해 확인해 보자.

  • [그림 1] Enqueue 아키텍처의 전체적인 절차
  • Enqueue 아키텍처의 전체적인 절차

  • - Managed Enqueue : KSQ에 Lock Structure 할당(MR)
  • - Client Enqueue : Client Layer에 Lock Structure 할당(TM)
  • - Latch Enqueue : New Resource를 require할 때 Structure를 빠르게 찾는 데 이용하며 Database Buffer의 LRU와 비슷
  • - Resource Identifier : 로 구성
  • - Resource Table : Resource Structure를 모아둔 해시 테이블
  • - Resource Structure : Resource Identifier, Owner, Waiter, Converter Queue로 구성

Enqueue Structure는 이와 같은 구성요소를 가지게 된다. 이런 Enqueue Structure에서 작업에 필요한 Enqueue를 획득하는 방법을 확인해 보자.

  • 1. 클라이언트에서의 State Object 생성 : STATE OBJECT에는 해당 작업을 수행하기 위해 필요한 Enqueue 정보를 저장한다.
  • 2. KSQ 수행 : KSQ는 Managed Enqueue와 Client Enqueue가 존재하며 State Object에서 필요로 하는 Enqueue를 요청한다.
  • 3. Resource Identifier 생성 : 요청된 Enqueue에 대해 형식의 Resource Identifier를 생성한다.
  • 4. 해시 함수 적용 : 생성된 Resource Identifier를 기준으로 해시 함수를 적용한다.
  • 5. Enqueue Hash Chain Latch 획득 : Enqueue Hash Chain Latch를 획득한 후 해시 테이블의 해당 버켓을 액세스한다.
  • 6. Resource Structure 생성 또는 재사용 : 해시 테이블에서 해당 Resource Structure를 검색해 존재하면 재사용하고 존재하지 않을 경우에는 생성하게 된다.
  • 7. Resource Structure의 큐 사용 : 해당 Resource Structure에서 Owner 큐를 확인하게 되고 Owner 큐가 비어 있거나 Compatible에 의해 서로 공유 할 수 있는 Type이라면 Owner 큐로 배치된다. 이와 같지 않다면 Wait 큐에 배치된다.
  • 8. Enqueue 획득 : Owner 큐에 배치된 세션은 해당 Resource Identifier에 대해 Enqueue를 획득할 수 있으며 Wait 큐에 배치된 세션은 Owner 큐가 비워질 때까지 대기하게 된다.

위와 같은 형태로 Enqueue는 획득되고 관리된다.

Enqueue Compatible

[그림 2]에서 보는 것처럼 Enqueue Mode는 여섯 가지가 존재한다.

  • [그림 2] 여섯 가지 Enqueue Mode
  • 여섯 가지 Enqueue Mode

해당 여섯 가지의 모드는 클라이언트에서 SQL 등을 수행하게 되면 해당 SQL을 수행하기 위한 Enqueue가 State Object에 기록되고 해당 State Object에서 필요한 Type의 Enqueue를 요청하게 된다. 이와 같이 수행되는 것이 Enqueue Mode이다.

이와 같은 Enqueue Mode에 의해 Enqueue Compatible 표를 확인해 보면 V 마크가 되어있는 경우에는 공유가 가능한 Enqueue는 위에서 확인한 것과 같이 Enqueue Mode와 Compatible 표에 의해 Resource Structure를 어떻게 이용하는가에 따라 운영된다.

해당 Enqueue Mode가 Resource Structure의 Owner 큐를 이용한다면 해당 Enqueue를 획득하게 되는 것이고 Wait 큐에 배치된다면 Owner 큐의 작업이 종료 할 때까지 Wait 큐에 존재하는 세션에 대해 Enqueue Wait를 발생시키게 된다.

그럼 다음 시간에는 Enqueue의 실제 운영과 확인 방법에 대해 설명한다

참고링크

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

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

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

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

감사합니다

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