Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqZvC-00Daw8-0V for pgsql-docs@arkaria.postgresql.org; Thu, 12 Feb 2026 16:52:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqZvB-009zf5-0H for pgsql-docs@arkaria.postgresql.org; Thu, 12 Feb 2026 16:52:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqVBy-008IsF-0A for pgsql-docs@lists.postgresql.org; Thu, 12 Feb 2026 11:49:06 +0000 Received: from mahout.postgresql.org ([2001:4800:3e1:1::227]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vqVBw-00000000HGu-1Vou for pgsql-docs@lists.postgresql.org; Thu, 12 Feb 2026 11:49:05 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Message-ID:Date:Reply-To:Cc:From:To:Subject: Content-Transfer-Encoding:MIME-Version:Content-Type:Sender:Content-ID: Content-Description:In-Reply-To:References; bh=X7GimFRtJSNvayGTwJY9ZToUKPieXBXmGHvp6FybVEg=; b=eU3a7x8F1WF2K94cutM17bqGDV RygxAp6PV6sP0jDjOCutoyNdpx8qRQ8qMEWbj3YpFhGnnw5D9zJ3mENXY9lFHdjc1QYJsFK+on8Hk cY3eWr0ua4BSNPk0RJkkFYdPHIP5DTjbT6+Xnnz2Nfnk4V5RCSTyobJTyxGgK1e7t/WwXrjQ+kL9C RS1xJvrxcPqYJ1SyxyCdHeInJTncByX8SqaGtjAg3lMSKYcLIfgxQxrruFnhY1wr7P8lBknHqvNbs bylnz9AuceZlcEOb3r/sXCgXJ61Xbx5r8Olq/2ZCfxtRmZNzZCP1PaUrfipNJi+D5UqofSdzZLgK7 IfN4EVsg==; Received: from wrigleys.postgresql.org ([2a02:16a8:dc51::60]) by mahout.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqVBw-000qCZ-0x for pgsql-docs@lists.postgresql.org; Thu, 12 Feb 2026 11:49:04 +0000 Received: from localhost ([127.0.0.1] helo=wrigleys.postgresql.org) by wrigleys.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqVBu-0020ty-1b for pgsql-docs@lists.postgresql.org; Thu, 12 Feb 2026 11:49:03 +0000 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: "Disadvantages of increasing autovacuum_freeze_max_age" paragraph to be modified To: pgsql-docs@lists.postgresql.org From: PG Doc comments form Cc: divyamodernite@gmail.com Reply-To: divyamodernite@gmail.com, pgsql-docs@lists.postgresql.org Date: Thu, 12 Feb 2026 11:48:11 +0000 Message-ID: <177089689173.797.9982569831633965239@wrigleys.postgresql.org> X-Auto-Response-Suppress: All Auto-Submitted: auto-generated List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk The following documentation comment has been logged on the website: Page: https://www.postgresql.org/docs/18/routine-vacuuming.html Description: Hello The current doc says (Routine Vacuuming for all available versions) : "The sole disadvantage of increasing autovacuum_freeze_max_age (and vacuum_freeze_table_age along with it) is that the pg_xact and pg_commit_ts subdirectories of the database cluster will take more space, because it must store the commit status and (if track_commit_timestamp is enabled) timestamp of all transactions back to the autovacuum_freeze_max_age horizon. The commit status uses two bits per transaction, so if autovacuum_freeze_max_age is set to its maximum allowed value of two billion, pg_xact can be expected to grow to about half a gigabyte and pg_commit_ts to about 20GB. If this is trivial compared to your total database size, setting autovacuum_freeze_max_age to its maximum allowed value is recommended. Otherwise, set it depending on what you are willing to allow for pg_xact and pg_commit_ts storage. (The default, 200 million transactions, translates to about 50MB of pg_xact storage and about 2GB of pg_commit_ts storage.)" Based on my experience, the growing size of pg_xact and pg_commit_ts subdirectories is not the "sole" disadvantage of increasing autovacuum_freeze_max_age. The higher the value is, the later autovacuum will be triggered to prevent wraparound. Autovacuum launches workers to do the work primarily for 2 reasons : 1. If the no. for dead tuples is greater than the calculated threshold, and 2. If the no. of txids consumed by the database cluster have reached/surpassed autovacuum_freeze_max_age. If we increase the autovacuum_freeze_max_age to 2 billion (as recommended above), to trigger on the second condition autovacuum might be too late already. This is a more important point in my opinion than the one in the docs. My suggestion would be : 1. To not recommend setting autovacuum_freeze_max_age to 2 billion, as it contradicts with the paragraph already mentioned in the docs : "The maximum time that a table can go unvacuumed is two billion transactions minus the vacuum_freeze_min_age value at the time of the last aggressive vacuum. If it were to go unvacuumed for longer than that, data loss could result. To ensure that this does not happen, autovacuum is invoked on any table that might contain unfrozen rows with XIDs older than the age specified by the configuration parameter autovacuum_freeze_max_age. (This will happen even if autovacuum is disabled.)" 2. Remove the word "sole", as its not true (already explained above why). If my understanding is flawed, I would love to hear your feedback. Thanks and Regards Divya Sharma