Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

latch, mutex, enqueue 본문

DB 관련 지식/DB 기본 개념

latch, mutex, enqueue

`O` 2023. 6. 16. 01:15
728x90
반응형

이 페이지에서는 DB 에서 한정된 자원을 여러 세션들이 사용하는 것을 보장하기 위해 사용되는 선점의 개념을 구현하기 위해 사용되는 latch, mutex, enqueue 개념에 대해서 다룬다.

 

해당 내용은 아래의 URL 들을 참조하여 기재한다.

 

[1] http://www.dbaref.com/latches-and-enqueues/whatisalatch

 

[2] https://aboutdb.tistory.com/241

 

[3] https://minervadb.xyz/postgresql-locks-latches-enqueues-and-mutex/

 

[4] https://farmerkyh.tistory.com/309

 

[5] https://kldp.org/node/68437

 

latch, mutex, enqueue 필요한가?

 

서버 (혹은 클라우드의 인스턴스) 는 무한적인 자원을 가지고 있지 않다. 그리고 이러한 한정된 자원들을 사용하는 세션 (혹은 클라이언트) 는 유동적임에 따라 자원이 수용 혹은 그 수용할 수 없는 그 이상의 세션들이 언제든지 유입 될 수 있다. 이 때, DB engine 들은 한정된 자원들에 대해서 특정 사용자 (혹은 세션들이) 무한적으로 자원을 사용하는 것을 막고 먼저 유입된 세션들이 사용하는 자원 및 데이터가 안전하게 보존되어 DB 를 사용할 수 있도록 하는 제어 메커니즘을 가지고 있다. 이러한 메커니즘을 구현하기 위해 도입된 개념이 latch, mutex, enqueues 다.

 

Latch

 

일반적으로 Latch 는 매우 짧게만 유지되는 메모리와 연관된 제어방법으로써 메모리내 동일 세션들이 동일한 오브젝트에 동시적으로 접근하는 것을 막고 이를 통해 메모리에 보존된 DB 오브젝트 및 오브젝트 내 데이터 읽기/쓰기작업을 보호하기 위해 사용된다. 즉, DB Latch 를 획득하면 자원 점유 이외에 쓰기 혹은 읽기 모드 중 하나를 획득할 수 있다.

 

mutex

 

상호 세션들 간에 동일한 자원영역을 사용하는 것을 막기 위해 사용되는 베타적인 자원 제어 방법이다. Mutex 는 베타성이기 때문에 해당 자원점유가 풀어지기 전까지 다른 세션은 접근을 하지 못한다. DB 에서 자원이 여유가 있음에도 DB 세션간 지연 등의 문제가 있을 때 종종 보이는 현상이다. 그리고 이는 이후 다른 게시글에서 서술 할 AWS RDS, Aurora Cluster 의 Performance Insight 에서도 자주 보이는 쿼리 (혹은 세션) 대기 현상 중 하나다.

또한 Mutex 는 자원점유에만 관여하는 제어방법이기에 Latch 와 달리 읽기, 쓰기 모드 등의 세부 모드 설정이 없다.

 

Enqueue

 

Enqueue 다양한 세션들이 자원을 점유 , 세션들이 세부적으로 점유 있는 수준을 다양화 하기 위해 도입된 개념이다. 이름과 연관되었듯이 queue 성격을 따라 특정 세션이 점유를 해제 하면 뒤에 순서를 기다리고 있는 세션들이 순차적으로 자원을 점유 한다. 이는 세션들이 동시에 자원 점유를 요청하면 순서에 상관없이 무작위로 자원을 점유할 있는 latch 다른 점이다.

반응형
Comments