피드로 돌아가기
PostgreSQL Advisory Locks for Distributed Job Scheduling
Dev.toDev.to
Database

인프라 추가 없이 PostgreSQL로 분당 10K Job 스케줄링 구현

PostgreSQL Advisory Locks for Distributed Job Scheduling

SoftwareDevs mvpfactory.io2026년 6월 17일6intermediate

Context

분산 Job 스케줄링 구현을 위해 Redis나 SQS 같은 별도 인프라를 도입함에 따른 운영 복잡성 증가. 데이터베이스 연결을 이미 보유한 환경에서 네트워크 홉으로 인한 지연 시간 발생 및 관리 포인트 증가가 병목 지점으로 작용.

Technical Solution

  • pg_try_advisory_xact_lock 기반의 Transactional Lock을 채택하여 애플리케이션 크래시 시 Lock 누수 원천 차단
  • FOR UPDATE SKIP LOCKED 구문을 결합하여 Row 수준의 경합을 회피하고 작업 처리 효율 극대화
  • bigint 해싱 및 2-integer 복합 키 구조를 통한 Lock Namespace 설계로 식별자 충돌 가능성 제어
  • PgBouncer Transaction 모드에서 Session Lock이 유실되는 문제를 해결하기 위해 Worker 전용 Session Pool 분리 운영
  • Non-blocking 방식의 _try_ 변형 함수를 사용하여 워커가 경합 중인 Job을 대기 없이 건너뛰는 구조 설계

1. PgBouncer 사용 시 Session Lock 대신 Transactional Lock을 우선 검토할 것

2. Worker 전용 Connection Pool을 분리하여 일반 트래픽과 Job 처리 간 간섭을 차단할 것

3. 10만 개 이상의 Distinct Lock ID 사용 시 단순 해싱 대신 Namespace 기반 복합 키를 적용할 것

4. `SKIP LOCKED`를 통해 Row-level 경합을 최소화하고 있는지 확인할 것

원문 읽기