
백엔드
PostgreSQL 성능 개선: 락 매니저 경합 진단 및 완화
두줄요약
파티션 프루닝, 인덱스 정리, 조인 단순화로 PostgreSQL의 락 매니저 경합을 줄이는 방법을 다뤘습니다. 16개 빠른 경로 슬롯 초과 시 성능 저하가 커지며, 최적화로 TPS가 개선되었습니다.
문제 상황
- 읽기 중심 PostgreSQL 워크로드에서 파티션 수, 인덱스 수, 다중 조인 복잡성으로 락 매니저 경합이 발생
- 빠른 경로 잠금 16개 한도를 넘으면 공유 메모리 락 해시 테이블로 전환되며 LWLock:LockManager 대기 증가
원인 분석
- 파티션 프루닝이 되지 않아 모든 파티션과 인덱스에 대한 잠금 필요
- 사용하지 않거나 중복된 인덱스가 많아 AccessShareLock 누적
- 다중 조인 쿼리가 여러 테이블과 인덱스의 락을 동시에 유발
해결 방법
- 파티션 프루닝이 되도록 명시적 날짜 범위 조건 사용
- 상수가 드러나지 않는 CTE 대신 PL/pgSQL 동적 SQL로 쿼리 구성
- 불필요한 인덱스 제거, 중복 인덱스 통합, 조인 단순화
