본문으로 건너뛰기
max_pred_locks_per_transaction

max_pred_locks_per_transaction

버전기본값context타입
14postmaster (재시작)integer
15postmaster (재시작)integer
16postmaster (재시작)integer
17postmaster (재시작)integer
18postmaster (재시작)integer
19postmaster (재시작)integer

공유 predicate lock 테이블이 server process(또는 prepared transaction) 하나당 담을 수 있는 객체 수를 정한다.

predicate lock은 serializable 격리 수준에서 transaction 간 읽기·쓰기 의존성을 추적하기 위해 쓰는 lock으로, 이 테이블 크기만큼만 동시에 존재할 수 있다. max_locks_per_transaction과 마찬가지로 transaction당 평균치 개념이라, 전체 테이블에 여유가 있으면 개별 transaction이 더 많은 객체를 lock할 수 있다. lock할 수 있는 row 수에는 제한이 없다.

기본값 64는 대체로 충분하지만, serializable transaction 하나에서 많은 테이블을 건드리는 클라이언트가 있다면 올려야 할 수 있다. 서버 시작 시에만 설정할 수 있다.

운영 노트: serializable 격리 수준을 쓰지 않는다면 이 파라미터는 사실상 영향이 없다. serializable을 적극적으로 쓰는 환경에서 predicate lock 공간이 부족하면 lock이 더 굵은 단위(page → relation)로 승격되어 직렬화 실패(serialization failure)가 늘어날 수 있으므로, 재시도 에러가 잦다면 이 값과 max_pred_locks_per_relation, max_pred_locks_per_page를 함께 점검한다.

출처: PostgreSQL 18 문서