본문으로 건너뛰기
max_prepared_transactions

max_prepared_transactions

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

동시에 “prepared” 상태로 있을 수 있는 트랜잭션 수의 상한을 정한다. 2단계 커밋(two-phase commit)의 PREPARE TRANSACTION이 만드는 상태다. 기본값은 0이며, 0이면 prepared transaction 기능 자체가 꺼진다. 서버 시작 시에만 설정할 수 있다.

prepared transaction을 쓸 계획이 없다면 0으로 두는 것이 맞다. 실수나 오남용으로 prepared transaction이 만들어지는 것을 막을 수 있기 때문이다. prepared transaction은 커밋도 롤백도 되지 않은 채 lock과 오래된 스냅샷을 계속 붙들고 있을 수 있어, 방치되면 vacuum을 막고 bloat를 키우는 대표적인 원인이 된다. 실제로 사용하는 환경이라면 모든 세션이 각자 prepared transaction 하나씩을 걸 수 있도록 max_connections 이상으로 잡는 것이 보통이다.

standby 서버를 운영할 때는 이 값을 primary와 같거나 더 크게 설정해야 한다. 그렇지 않으면 standby에서 쿼리가 허용되지 않는다.

운영 노트: 이 기능은 XA 같은 분산 트랜잭션 관리자를 위한 것이지 애플리케이션이 직접 쓰라고 있는 기능이 아니다. 사용 중이라면 pg_prepared_xacts 뷰로 오래 방치된 prepared transaction이 없는지 주기적으로 확인해야 한다.

출처: PostgreSQL 18 문서