Thread: Vacuuming DVs with few/no updates?

Vacuuming DVs with few/no updates?

From
Preston
Date:
Hi all,

Just wondering about how useful the vacuumdb functionality is for a database
that pretty much only ever gets inserts/selects.

I've got a database that is intended for next-to-no deletion of records, which
is where I see the vacuum facility mostly intended for. I.e., while there'll be
the occasional record edits, these edits will primarily be of the form of
adjusting integer records (and therefore shouldn't adjust any space requirements
for a row).

I'm thinking that with this database I'll configure vacuumdb to only run once a
month or so. But before I do that I want to make sure I'm not missing some other
important functionality that it does...

Cheers,

-Preston de Guise.

--
Oops.

Re: Vacuuming DVs with few/no updates?

From
Tom Lane
Date:
Preston <unsane@idl.com.au> writes:
> Just wondering about how useful the vacuumdb functionality is for a database
> that pretty much only ever gets inserts/selects.

> I've got a database that is intended for next-to-no deletion of
> records, which is where I see the vacuum facility mostly intended
> for. I.e., while there'll be the occasional record edits, these edits
> will primarily be of the form of adjusting integer records (and
> therefore shouldn't adjust any space requirements for a row).

You have an important misconception lurking in there.  In Postgres,
an UPDATE is equivalent to INSERT (of the new row version) followed by
DELETE (of the old row version).  Therefore, it creates dead rows that
need to be reclaimed by VACUUM, just as much as DELETE would do.

But yeah, if you have very very few updates or deletes then you don't
need to vacuum very often.  (You might possibly need to ANALYZE more
often than you VACUUM, if statistics like column min/max values are
changing significantly due to the insertion traffic.)

> I'm thinking that with this database I'll configure vacuumdb to only
> run once a month or so. But before I do that I want to make sure I'm
> not missing some other important functionality that it does...

You should read the discussion of transaction wraparound in the Admin
Guide's chapter about routine maintenance (specifically VACUUM ;-)).
Once-a-month vacuum is fine if your total transaction load doesn't
exceed 1 billion per month ...

            regards, tom lane

Re: Vacuuming DVs with few/no updates?

From
Preston
Date:
Quoting Tom Lane <tgl@sss.pgh.pa.us>:

> Preston <unsane@idl.com.au> writes:
> > Just wondering about how useful the vacuumdb functionality is for a
> > database
> > that pretty much only ever gets inserts/selects.
>
> > I've got a database that is intended for next-to-no deletion of
> > records, which is where I see the vacuum facility mostly intended
> > for. I.e., while there'll be the occasional record edits, these edits
> > will primarily be of the form of adjusting integer records (and
> > therefore shouldn't adjust any space requirements for a row).
>
> You have an important misconception lurking in there.  In Postgres,
> an UPDATE is equivalent to INSERT (of the new row version) followed by
> DELETE (of the old row version).  Therefore, it creates dead rows that
> need to be reclaimed by VACUUM, just as much as DELETE would do.

Ah OK - thanks for explaining that to me. It changes my outlook quite a bit.

However, the inserts will still outnumber the updates on a scale of about 30:1.

> But yeah, if you have very very few updates or deletes then you don't
> need to vacuum very often.  (You might possibly need to ANALYZE more
> often than you VACUUM, if statistics like column min/max values are
> changing significantly due to the insertion traffic.)

OK, will look into that side of it.

> > I'm thinking that with this database I'll configure vacuumdb to only
> > run once a month or so. But before I do that I want to make sure I'm
> > not missing some other important functionality that it does...
>
> You should read the discussion of transaction wraparound in the Admin
> Guide's chapter about routine maintenance (specifically VACUUM ;-)).
> Once-a-month vacuum is fine if your total transaction load doesn't
> exceed 1 billion per month ...

Thanks - will find and read that... Once again caught by the "too much to do not
enough time" bug.

Does that transaction load include selects?

Due to automated web-based refreshing of views of tables I'd expect the selects
to number around 2,000 to 10,000 per day... I know that's still not anywhere
near a billion but it's to the point of a more interesting amount if transaction
load includes selects...

Cheers,

-Preston.

--
Oops.

Re: Vacuuming DVs with few/no updates?

From
Tom Lane
Date:
Preston <unsane@idl.com.au> writes:
> Does that transaction load include selects?

Yes.

            regards, tom lane