봉황대 in CS

[Oracle] Latch vs. Lock ?? 본문

Computer Science & Engineering/Database

[Oracle] Latch vs. Lock ??

등 긁는 봉황대 2024. 7. 27. 23:09

학교에서 들었던 OS와 DB 강의 중 synchronization과 관련해서는 ‘lock’에 대해서만 들었는데,

여러 Database system 관련 논문들에서 ‘latch’라는 단어를 사용하는 것을 보게 되었다.

 

그때는 대충 lock과 비슷한 의미겠거니~~ 하면서 넘어갔는데 ㅎ,,

이번 방학 동안 읽고 있는 '친절한 SQL 튜닝' 책의 설명에서는 latch와 lock을 완전히 구별해서 말하고 있길래 ..

 

이 참에 조금 더 공부해서 둘을 비교하면서 정리하고, 나의 견해를 마지막에 남겨보고자 한다.

 

 

---

 

 

둘의 공통적인 역할은 'Synchronization mechanism을 제공하여, shared resource들을 보호'하는 것이다.

 

또한, 정의되어 있는 정책에 따라서

여러 worker들이 shared resource에 동시 접근하는 것을 허용하거나, (i.e., shared lock)

exclusive 하게 접근(즉, 한 번에 하나의 worker만이 critical section에 진입 가능)하도록 한다. (i.e., exclusive lock)

 

 

그렇다면 서로 무엇이 다를까?

 

먼저 general 한 의미를 알아보고,

그다음 ('친절한 SQL 튜닝' 책에서 중점적으로 다루는) Oracle Database에서는 어떠한지 알아보았다.

 

 

In General ..


Lock

Locks serve as synchronization mechanisms for concurrency control,

guaranteeing consistency of transactions.

 

  • Locks operates at higher level of granularity. (e.g., tables, rows, pages)
  • Lock이 지속되는 시간은 보통 transaction 단위이다.

 

Latch

A latch is a synchronization mechanism guaranteeing consistency of in-memory structures,

used for concurrent access control and to ensure data consistency.

 

  • Latchs operates at lower-level data structures. (e.g., buffers, data pages)
  • Lock이 지속되는 시간은 보통 milliseconds 단위로, 매우 짧다.

 

[참고] Difference Between Lock and Latch in Database | Baeldung on Computer Science

 

 

In Oracle Databases ..


Lock

Table, data block, state object와 같은 object를 보호하며, database level에서 작동한다.

 

Process가 lock 획득을 실패했다면 해당 요청은 queue로 관리된다. 즉, 대기 후 요청한 순서대로 서비스된다.

 

Deadlock이 발생할 가능성이 존재한다.

 

 

[참고] Table locks

Table lock에는 총 6가지 종류가 존재한다. (아래로 갈수록 제약 사항 ↑)

 

  • None (Null)
  • Row share table locks
  • Row exclusive table locks
  • Share table locks
  • Share row exclusive table locks
  • Exclusive table locks

얘네가 각각 뭔지 알아보다가 삼천포에 빠졌는데 .. 나중에 정리 포스팅을 올려보겠다 ..

 

[참고] NOWAIT mode (SQL Language Reference)

NOWAIT mode로 되어 있는 경우, lock 획득에 실패한다면 그 즉시 return 한다. (trylock과 동일)

LOCK TABLE employees IN EXCLUSIVE MODE NOWAIT;

 

[참고] Enqueues (Oracle Database 23ai Technical Architecture)

Lock에 대한 queue들은 SGA(System Global Area)의 shared pool에서 관리한다.

Enqueues are shared memory structures (locks) that serialize access to database resources.

 

 

[참고] System Global Area, SGA (Oracle Database 23ai Technical Architecture)

Memory area that contains data and control information for one Oracle Database instance.

All server and background processes share the SGA.

 

 

Latch

Latches are used as a low-level serialization control mechanism to protect shared data structures in the SGA

from simultaneous access. (e.g., row cache objects, library cache pin, log file parallel write)

 

SGA의 memory object들을 보호하는 역할을 한다.

 

User가 latch에 직접 접근할 수 없으며, SGA의 shared pool에 latch에 대한 정보가 존재한다.

 

두 가지 요청 mode가 존재한다.

 

  • willing-to-wait mode
    • 획득 실패 시, 해당 session은 짧은 시간 동안 sleep 한 후 다시 획득을 시도한다.
    • 이때 해당 요청은 queue로 관리되지 않기 때문에 요청한 순서대로 서비스되지 않는다.
  • no-wait (immediate) mode
    • 획득 실패 시, 다시 획득을 시도하지 않는다. (trylock과 동일)

 

test-and-set, compare-and-swap 등 단순한 명령어를 통해 구현되고, deadlock이 발생하지 않도록 구현된다.

 

 

[참고]

Data Concurrency and Consistency

Database Reference

About latch wait time - Ask TOM

 

 

나의 개인적인 견해


Lock ⊃ Latch

 

Latch는 lock의 일종으로 봐도 무방할 것 같다.

초점이 줄 세우기(serialization)에 있는 가벼운 lock 정도..

 

Lock은 조금 더 복잡한 synchronization 문제들을 해결해 주는 놈 정도..

 

물론 Oracle에서 latch는 ‘SGA에 존재하는 놈들을 위한 것’이라고 하기 때문에 둘을 완전히 구별하고 있는 것으로 보이는데

그게 아니라면 굳이 구별해서 써야 하나??라는 생각이 든다.

 

아래 글에서도 ‘latches and enqueues are both types of locks.’라고 써져 있으니 ㅎㅎ..

Locks & Latches - Ask TOM

 

 

 

참고


오라클 래치와 락 (Latch & Lock)

Advanced Oracle Wait Interface in 10g (조동욱 저) : 구글 뒤적뒤적하다가 찾았음

 

 

반응형
Comments