본문으로 건너뛰기
autovacuum_multixact_freeze_max_age

autovacuum_multixact_freeze_max_age

버전기본값context타입
14a relatively low 400 million multixactspostmaster (재시작)integer
15a relatively low 400 million multixactspostmaster (재시작)integer
16a relatively low 400 million multixactspostmaster (재시작)integer
17a relatively low 400 million multixactspostmaster (재시작)integer
18a relatively low 400 million multixactspostmaster (재시작)integer
19a relatively low 400 million multixactspostmaster (재시작)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/memberspg_multixact/offsets 하위 디렉토리의 오래된 파일도 정리할 수 있어, 기본값이 비교적 낮은 4억으로 잡혀 있다.

서버 시작 시에만 설정할 수 있고, 개별 테이블의 storage parameter로는 값을 낮추는 방향으로만 덮어쓸 수 있다.

운영 노트: 외래 키가 많거나 행 단위 shared lock을 많이 쓰는 워크로드에서는 multixact 소비 속도가 XID보다 빠를 수 있다. mxid_age(relminmxid)도 XID 나이와 함께 모니터링 대상에 넣어 두는 것이 안전하다.

출처: PostgreSQL 18 문서