{"Entry":{"collection":"guc","key":"vacuum_multixact_freeze_table_age","name":"vacuum_multixact_freeze_table_age","aliases":[],"metadata":{"baseline":false,"boot_human":"Not specified","boot_val":null,"category":"Vacuuming / Freezing","category_zh":"","changed_in":["18"],"changes":[{"documentation_changed":false,"fields":{},"from":"9.2","status":"added","to":"9.3"},{"documentation_changed":true,"fields":{},"from":"9.5","status":"changed","to":"9.6"},{"documentation_changed":true,"fields":{},"from":"12","status":"changed","to":"13"},{"documentation_changed":true,"fields":{},"from":"13","status":"changed","to":"14"},{"documentation_changed":true,"fields":{},"from":"16","status":"changed","to":"17"},{"documentation_changed":false,"fields":{"category":{"from":"Client Connection Defaults / Statement Behavior","to":"Vacuuming / Freezing"}},"from":"17","status":"changed","to":"18"}],"content_hash":"0dde67a4011ac67f1e0a5418c4eb8e8d63cbb8f008a7d4477fa7ce780bf2c5ef","context":"","default_changed_in":[],"default_history":[{"from":"9.3","to":"19","value":"150000000"}],"editorial":{"advice":{"olap":"Most read-only analytics consume few MXIDs, but concurrent loaders can differ. Schedule scans from measured mxid_age and member-space growth rather than copying XID settings.","oltp":"Choose an MXID threshold that leaves enough time to complete aggressive scans before autovacuum_multixact_freeze_max_age. Measure workloads with heavy shared row locking.","small":"Keep the default and monitor relminmxid/datminmxid. A small database can still consume MXIDs rapidly through row-locking patterns."},"mechanism":["Sets the MultiXact age at which VACUUM switches to an aggressive scan so it can advance a table’s relminmxid. It is a user-context setting.","An aggressive MXID scan visits every page not already all-frozen and processes eligible MultiXacts. PostgreSQL caps the effective value at 95% of autovacuum_multixact_freeze_max_age.","Monitor mxid_age(relminmxid), mxid_age(datminmxid), and pg_multixact storage. The XID horizon relfrozenxid is controlled by vacuum_freeze_table_age instead."],"pitfalls":["Monitoring relfrozenxid instead of the MultiXact horizon relminmxid.","Using autovacuum_freeze_max_age rather than autovacuum_multixact_freeze_max_age for the 95% cap.","Copying an XID-age policy into an MXID workload with a very different consumption rate.","Ignoring pg_multixact member-space pressure while age still appears comfortable."],"references":[{"title":"PostgreSQL 19 Beta 4: vacuum_multixact_freeze_table_age","url":"https://www.postgresql.org/docs/19/runtime-config-vacuum.html#GUC-VACUUM-MULTIXACT-FREEZE-TABLE-AGE"},{"title":"PostgreSQL 19 release notes","url":"https://www.postgresql.org/docs/19/release-19.html"}],"related":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_min_age","vacuum_multixact_failsafe_age","vacuum_freeze_table_age","autovacuum","log_autovacuum_min_duration"],"summary":"vacuum_multixact_freeze_table_age — Multixact age at which VACUUM should scan whole table to freeze tuples. Observed in PG9.3–19 Beta 4; its last measured boot default is 150000000 in PG19 Beta 4, with user context. This is a beta-snapshot fact and can change before PostgreSQL 19 GA."},"enumvals":[],"first_version":"9.3","group":"Vacuuming","group_slug":"vacuum","imported_at":"2026-09-27T17:57:32.305495+08:00","intro_commit":{"authored_at":"2014-02-13T19:30:30-03:00","discussion":[],"hash":"fb47de2be6e44397ab40508729606697f52702ac","subject":"Separate multixact freezing parameters from xid's","url":"https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=fb47de2be6e44397ab40508729606697f52702ac"},"key":"vacuum_multixact_freeze_table_age","last_version":"20","max_val":"","min_val":"","name":"vacuum_multixact_freeze_table_age","position":459,"present_in":["9.3","9.4","9.5","9.6","10","11","12","13","14","15","16","17","18","19","20"],"short_desc":"VACUUM performs an aggressive scan if the table's pg_class.relminmxid field has reached the age specified by this setting.","short_desc_zh":"","source_rev":"english-manuals:94c773e34a246e30504835b970e32b9a68854ee15980b43da202820a7ea755b7","unit":"","vartype":"integer"}},"Definition":{"Collection":"guc","Key":"vacuum_multixact_freeze_table_age","SourceDatabase":"center","Version":"18","SourceTable":"guc","SourceKey":"vacuum_multixact_freeze_table_age","SourceRevision":"english-manuals:94c773e34a246e30504835b970e32b9a68854ee15980b43da202820a7ea755b7","Facts":{"boot_val":"150000000","category":"Vacuuming / Freezing","context":"user","description":"VACUUM performs an aggressive scan if the table's pg_class.relminmxid field has reached the age specified by this setting. An aggressive scan differs from a regular VACUUM in that it visits every page that might contain unfrozen XIDs or MXIDs, not just those that might contain dead tuples. The default is 150 million multixacts. Although users can set this value anywhere from zero to two billion, VACUUM will silently limit the effective value to 95% of autovacuum_multixact_freeze_max_age, so that a periodic manual VACUUM has a chance to run before an anti-wraparound is launched for the table. For more information see Section 24.1.5.1.","doc":{"anchor":"GUC-VACUUM-MULTIXACT-FREEZE-TABLE-AGE","file":"runtime-config-vacuum.html","lang":"en","sha256":"7047f1fa9138b97f1812532f8a905fa7479451dfd64655e029a7d387b20b22e4","slug":"18"},"documented":true,"enumvals":null,"extra_desc":null,"lang":"en","max_val":"2000000000","metadata_version":"18","min_val":"0","name":"vacuum_multixact_freeze_table_age","short_desc":"Multixact age at which VACUUM should scan whole table to freeze tuples.","source":"pg-settings-source-snapshot","unit":null,"vartype":"integer"},"ManualEvidence":{"doc":{"anchor":"GUC-VACUUM-MULTIXACT-FREEZE-TABLE-AGE","file":"runtime-config-vacuum.html","lang":"en","sha256":"7047f1fa9138b97f1812532f8a905fa7479451dfd64655e029a7d387b20b22e4","slug":"18"}},"MeasuredEvidence":{"metadata_version":"18"}},"Text":{"Collection":"guc","Key":"vacuum_multixact_freeze_table_age","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"vacuum_multixact_freeze_table_age","Summary":"","BodyHTML":"\u003cp\u003e如果表的\u003ccode\u003epg_class\u003c/code\u003e.\u003ccode\u003erelminmxid\u003c/code\u003e字段达到此设置指定的年龄，\u003ccode\u003eVACUUM\u003c/code\u003e就会执行一次激进扫描。激进扫描与常规\u003ccode\u003eVACUUM\u003c/code\u003e不同，它会访问每一个可能包含未冻结 XID 或 MXID 的页面，而不仅仅是那些可能包含死元组的页面。默认值为 1.5 亿个多事务。尽管用户可以将该值设置在 0 到 20 亿之间，\u003ccode\u003eVACUUM\u003c/code\u003e仍会悄悄将其有效值限制为不超过\u003ca href=\"/docs/18/runtime-config-vacuum.html#GUC-AUTOVACUUM-MULTIXACT-FREEZE-MAX-AGE\" rel=\"nofollow\"\u003eautovacuum_multixact_freeze_max_age\u003c/a\u003e的 95%，以便在针对该表启动防回卷清理之前，周期性手工\u003ccode\u003eVACUUM\u003c/code\u003e仍有机会运行。详见\u003ca href=\"/docs/18/routine-vacuuming.html#VACUUM-FOR-MULTIXACT-WRAPAROUND\" rel=\"nofollow\"\u003e第 24.1.5.1 节\u003c/a\u003e。\u003c/p\u003e","SourceRevision":"2026-09-11@29c86d9","ContentHash":"359c452fb06339f3f84b6c7d911294b97c606d735736eb63f49e836d9842b294","Payload":{"carried_from":"","carry_reason":"","doc_html":"\u003cp\u003e如果表的\u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e.\u003ccode class=\"structfield\"\u003erelminmxid\u003c/code\u003e字段达到此设置指定的年龄，\u003ccode class=\"command\"\u003eVACUUM\u003c/code\u003e就会执行一次激进扫描。激进扫描与常规\u003ccode class=\"command\"\u003eVACUUM\u003c/code\u003e不同，它会访问每一个可能包含未冻结 XID 或 MXID 的页面，而不仅仅是那些可能包含死元组的页面。默认值为 1.5 亿个多事务。尽管用户可以将该值设置在 0 到 20 亿之间，\u003ccode class=\"command\"\u003eVACUUM\u003c/code\u003e仍会悄悄将其有效值限制为不超过\u003ca href=\"/docs/18/runtime-config-vacuum.html#GUC-AUTOVACUUM-MULTIXACT-FREEZE-MAX-AGE\"\u003eautovacuum_multixact_freeze_max_age\u003c/a\u003e的 95%，以便在针对该表启动防回卷清理之前，周期性手工\u003ccode class=\"command\"\u003eVACUUM\u003c/code\u003e仍有机会运行。详见\u003ca href=\"/docs/18/routine-vacuuming.html#VACUUM-FOR-MULTIXACT-WRAPAROUND\" title=\"24.1.5.1. 多事务与回卷\"\u003e第 24.1.5.1 节\u003c/a\u003e。\u003c/p\u003e","doc_same_as":""}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","9.3","9.4","9.5","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
