max_pred_locks_per_transaction
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | postmaster (재시작) | integer |
| 15 | — | postmaster (재시작) | integer |
| 16 | — | postmaster (재시작) | integer |
| 17 | — | postmaster (재시작) | integer |
| 18 | — | postmaster (재시작) | integer |
| 19 | — | postmaster (재시작) | 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 문서