DB & AWS Knowledge
latch, mutex, enqueue 본문
이 페이지에서는 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 와 다른 점이다.
'DB 관련 지식 > DB 기본 개념' 카테고리의 다른 글
카디널리티 (Cardinality), 선택도 (Selectivity) (0) | 2024.05.15 |
---|---|
Dead Lock 개념 (0) | 2024.01.24 |
Physical Replication 과 Logical Replication (0) | 2023.05.12 |
관제, 모니터링 (Monitoring) (0) | 2021.06.03 |
리두 로그 (Redo Log) (0) | 2021.04.06 |