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 1vfb3L-003Dey-0P for pgsql-admin@arkaria.postgresql.org; Tue, 13 Jan 2026 09:51:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vfb2K-003wnC-2z for pgsql-admin@arkaria.postgresql.org; Tue, 13 Jan 2026 09:50:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vfb2K-003wn3-0r for pgsql-admin@lists.postgresql.org; Tue, 13 Jan 2026 09:50:04 +0000 Received: from mail2.pscs.co.uk ([178.159.10.131] helo=mail.pscs.co.uk) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vfb2H-000C19-1y for pgsql-admin@lists.postgresql.org; Tue, 13 Jan 2026 09:50:03 +0000 Authentication-Results: mail.pscs.co.uk; spf=none; auth=pass (cram-md5) smtp.auth=pscs Received: from lmail.pscs.co.uk ([192.168.120.1]) by mail.pscs.co.uk ([192.168.120.185] running VPOP3) with ESMTPA for ; Tue, 13 Jan 2026 09:49:59 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pscs.co.uk; q=dns/txt; s=lmail; h=Content-Type:Message-ID:Date:MIME-Version:Subject:To:References:From :In-Reply-To:Cc:Content-Transfer-Encoding:Reply-to:Sender; t=1768297163; x=1768901963; bh=VSGOO10XwM9D8dHrCxupsKjnQu7EdIlPRYpq5D48+kU=; b=I7dBJFk6Dhm0npRM8FyNCv8I9lTRqmCdiLDjAEk6uIOhmQzFXCgbXwFAqj32QRvIzxb7d8lJ UWNUUG+e2Dv39axMreO8uTtoB5fxYFkuWWlzgSx+5X1rsXsDujX578GlXRAod3Wnvp8+qolhtk zDfoEuIj0LCSIcnB8WO6DTFBY= Authentication-Results: lmail.pscs.co.uk; spf=none; auth=pass (cram-md5) smtp.auth=paul Received: from [192.168.57.71] ([217.155.111.120] (217-155-111-120.dsl.in-addr.zen.co.uk)) by lmail.pscs.co.uk ([192.168.120.70] running VPOP3) with ESMTPSA (TLSv1.3 TLS_AES_256_GCM_SHA384) for ; Tue, 13 Jan 2026 09:39:22 -0000 Content-Type: multipart/alternative; boundary="------------0lBhZGl5ev3MAD3un0jKF6e4" Message-ID: <81c12173-6da4-43e9-866a-00321a00415a@pscs.co.uk> Date: Tue, 13 Jan 2026 09:39:23 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: VACUUM/ANALYZE Strategy for Low-Activity PostgreSQL 15 Instance Content-Language: en-GB To: pgsql-admin@lists.postgresql.org References: From: Paul Smith* In-Reply-To: X-Authenticated-Sender: paul X-Server: VPOP3 Enterprise V8.7 - Registered X-Organisation: Paul Smith Computer Services X-VPOP3Tester: 12 345 X-Authenticated-Sender: pscs List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------0lBhZGl5ev3MAD3un0jKF6e4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 13/01/2026 08:19, Gabriel Guillem Barceló Soteras wrote: > Hi, > We have a healthy PostgreSQL 15 instance (installed from the official > Postgres repository) running on Red Hat 9. It serves several databases > for internal SMB applications. The environment is stable—apps perform > well, disk usage is fine, and the system is not under heavy load. > > After integrating PostgreSQL into our monitoring system, I noticed > warnings related to VACUUM and ANALYZE. Some tables have never > undergone these maintenance operations, or the last run was 30–200 > days ago. These databases have very few deletions, and many tables > show no growth at all—typical for internal SMB apps. > I know this topic comes up often, but should I schedule a monthly > VACUUM + ANALYZE via a cron or systemd timer, while still keeping > autovacuum enabled? > > We’re also monitoring table bloat, which is currently under 1%, > suggesting that manual intervention may not be necessary and that > autovacuum is doing its job when needed. > You would normally not need to do anything manually - autovacuum is sufficient. The main times anything else may be needed is if you do a mass delete or update, in which case the autovacuum may not be updating "quick enough" or you may want to do a "vacuum full" to recover disk space. What is your monitoring system looking at that is making it generate those warnings? You need to see what criteria it is using, and then decide whether those matter to you, or if they're false warnings that need adjusting somehow. Paul --------------0lBhZGl5ev3MAD3un0jKF6e4 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit
On 13/01/2026 08:19, Gabriel Guillem Barceló Soteras wrote:
Hi,
We have a healthy PostgreSQL 15 instance (installed from the official Postgres repository) running on Red Hat 9. It serves several databases for internal SMB applications. The environment is stable—apps perform well, disk usage is fine, and the system is not under heavy load.

After integrating PostgreSQL into our monitoring system, I noticed warnings related to VACUUM and ANALYZE. Some tables have never undergone these maintenance operations, or the last run was 30–200 days ago. These databases have very few deletions, and many tables show no growth at all—typical for internal SMB apps.
I know this topic comes up often, but should I schedule a monthly VACUUM + ANALYZE via a cron or systemd timer, while still keeping autovacuum enabled?

We’re also monitoring table bloat, which is currently under 1%, suggesting that manual intervention may not be necessary and that autovacuum is doing its job when needed.

You would normally not need to do anything manually - autovacuum is sufficient. The main times anything else may be needed is if you do a mass delete or update, in which case the autovacuum may not be updating "quick enough" or you may want to do a "vacuum full" to recover disk space. 

What is your monitoring system looking at that is making it generate those warnings? You need to see what criteria it is using, and then decide whether those matter to you, or if they're false warnings that need adjusting somehow.


Paul

--------------0lBhZGl5ev3MAD3un0jKF6e4--