db lock expand shrink

agnusdei·2025년 4월 27일
0

Database

목록 보기
5/30

확장(Expand) / 축소(Shrink) 단계란?

락(Lock) 경합 상황을 다루는 방법 중 하나야.
DBMS가 락을 "얻는 과정"과 "풀어주는 과정"을 순서대로 안전하게 관리하려고 나눈 단계야.

단계의미예시
확장(Expand)필요한 락을 추가로 잡는 단계트랜잭션이 어떤 row를 업데이트하려고 "Row Exclusive Lock"을 거는 것
축소(Shrink)쓸모없는 락을 해제하는 단계작업 다 끝났으니 Row Lock을 풀고, Transaction commit 하는 것

중요 포인트:

  • 확장할 때는 락을 추가만 하고 해제는 안 함.
  • 축소할 때는 락을 해제만 하고 추가는 안 함.

즉, 락을 잡을 때랑 풀 때를 명확히 나눠야 Deadlock 같은 문제를 줄일 수 있어.


왜 굳이 이렇게 나누냐?

Deadlock(교착 상태) 을 피하려고.
만약 락을 잡았다 풀었다를 아무 순서 없이 막 하면,
서로 다른 트랜잭션이 서로 필요한 락을 잡고 대기하다가 꼬여서 Deadlock 이 터질 수 있어.

그래서 PostgreSQL은 원칙적으로:

  • 락을 필요한 만큼 쌓고(확장)
  • 다 쌓은 뒤에 필요한 작업 끝나면 한 번에 정리(축소)

이 순서를 지키게 설계되어 있어.


그림으로 초간단 표현하면:

[확장 단계]
필요한 락을 하나씩 추가: Row A lock -> Row B lock -> Row C lock

[축소 단계]
작업 끝나고 해제: Row A unlock -> Row B unlock -> Row C unlock

요약

확장(Expand) = 락을 추가하는 것
축소(Shrink) = 락을 해제하는 것

이걸 단계별로 구분해서 deadlock을 방지하고, 락 관리 일관성을 확보한다!


0개의 댓글