public inbox for [email protected]
help / color / mirror / Atom feedFrom: Ron Johnson <[email protected]>
To: pgsql-generallists.postgresql.org <[email protected]>
Subject: Re: Bloated toast table with empty associated table
Date: Thu, 20 Mar 2025 08:03:40 -0400
Message-ID: <CANzqJaD7P-Cc3hyi4XeJ--n33uG2moDGdP-jtn+rF=ABSgM6FQ@mail.gmail.com> (raw)
In-Reply-To: <CAExgkpc90tp5iDJE=3mPCsS=mvu8Y8ZiY1s1OZvyPZ5ck+BMpQ@mail.gmail.com>
References: <CAExgkpc90tp5iDJE=3mPCsS=mvu8Y8ZiY1s1OZvyPZ5ck+BMpQ@mail.gmail.com>
On Thu, Mar 20, 2025 at 7:40 AM Paul Allen <[email protected]> wrote:
> Hello.
>
> Preconditions.
>
> I have some empty table and constantly try to execute `insert ... on
> conflict do update ...` on it. My data in row which I try to insert is
> invalid by violation of foreing key constraint, so I am getting error
> while inserting and table keeps being empty. This table have some bytea
> columns with default storage type. It's purpose is to keep images.
> PostgreSQL version is 15, everything is default, autovacuum settings is
>
> ```
> autovacuum on
> autovacuum_analyze_scale_factor 0.1
> autovacuum_analyze_threshold 50
> autovacuum_freeze_max_age 200000000
> autovacuum_max_workers 3
> autovacuum_multixact_freeze_max_age 400000000
> autovacuum_naptime 60
> autovacuum_vacuum_cost_delay 20
> autovacuum_vacuum_cost_limit -1
> autovacuum_vacuum_scale_factor 0.2
> autovacuum_vacuum_threshold 50
> autovacuum_work_mem -1
> log_autovacuum_min_duration -1
>
Your _scale_factor values are too high. Drop them down to about 5%.
That's not the proximate cause, though.
> ```
>
> Problem.
>
> My backend application attempts unsuccessfully repeatedly to insert the
> same ~100 rows with images,
Instantaneously and repeatedly, while ignoring the error?
> and despite table's row count remains 0,
> toast table's size is growing up permanently, reaching 100, 200, 300 GB
> until it takes all available space.
>
> VACUUM FULL fixes this, but a want some automatic solution. I tried to
> alter table, believing that the settings below would force autovacuum to
> clean toast anyway, but it had no effect.
>
> ```
> alter table controlzone_passage set (
> autovacuum_enabled = true,
> toast.autovacuum_enabled = true,
> autovacuum_vacuum_threshold = 0,
> toast.autovacuum_vacuum_threshold = 0,
> autovacuum_vacuum_scale_factor = 0,
> toast.autovacuum_vacuum_scale_factor = 0,
> autovacuum_analyze_threshold = 0,
> autovacuum_analyze_scale_factor = 0);
> ```
>
> At the moment, my assumption is that the autovacuum is not working
> because the number of rows in the table does not change and remains
> zero. Any solution will suit me, for example, not to write rows to toast
> if their insertion failed. Or the proper setting of the autovacuum.
> Please tell me what can be done.
>
I'd create a cron entry that does a regular "vacuumdb -d the_db -t
controlzone_passage". How often you run it depends on how quickly it
bloats.
--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!
view thread (5+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: Bloated toast table with empty associated table
In-Reply-To: <CANzqJaD7P-Cc3hyi4XeJ--n33uG2moDGdP-jtn+rF=ABSgM6FQ@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox