autovacuum_multixact_freeze_max_age
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | a relatively low 400 million multixacts | postmaster (재시작) | integer |
| 15 | a relatively low 400 million multixacts | postmaster (재시작) | integer |
| 16 | a relatively low 400 million multixacts | postmaster (재시작) | integer |
| 17 | a relatively low 400 million multixacts | postmaster (재시작) | integer |
| 18 | a relatively low 400 million multixacts | postmaster (재시작) | integer |
| 19 | a relatively low 400 million multixacts | postmaster (재시작) | integer |
테이블의 pg_class.relminmxid가 도달할 수 있는 최대 나이를 multixact 수 단위로 정한다. 이 나이를 넘기면 multixact ID wraparound를 막기 위해 VACUUM이 강제로 실행된다. 기본값은 4억(400,000,000)이다.
multixact ID는 여러 transaction이 같은 행에 동시에 lock을 잡을 때(예: SELECT ... FOR SHARE, 외래 키 검사) 행 헤더에 기록되는 식별자로, transaction ID(XID)와 마찬가지로 32비트라 wraparound 문제가 있다. 그래서 autovacuum_freeze_max_age가 XID를 지키는 것과 똑같은 방식으로 이 파라미터가 multixact ID를 지킨다. 나이가 한도에 도달하면 autovacuum이 off여도 시스템이 vacuum을 강제로 띄운다. multixact를 vacuum하면 pg_multixact/members와 pg_multixact/offsets 하위 디렉토리의 오래된 파일도 정리할 수 있어, 기본값이 비교적 낮은 4억으로 잡혀 있다.
서버 시작 시에만 설정할 수 있고, 개별 테이블의 storage parameter로는 값을 낮추는 방향으로만 덮어쓸 수 있다.
운영 노트: 외래 키가 많거나 행 단위 shared lock을 많이 쓰는 워크로드에서는 multixact 소비 속도가 XID보다 빠를 수 있다.
mxid_age(relminmxid)도 XID 나이와 함께 모니터링 대상에 넣어 두는 것이 안전하다.출처: PostgreSQL 18 문서