Re: random observations while testing with a 1,8B row

From: Hannu Krosing <hannu(at)skype(dot)net>
To: Steve Atkins <steve(at)blighty(dot)com>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: random observations while testing with a 1,8B row
Date: 2006-03-11 20:21:43
Message-ID: 1142108503.6661.7.camel@localhost.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Ühel kenal päeval, R, 2006-03-10 kell 12:23, kirjutas Steve Atkins:

> I get bitten by this quite often (customer machines, one giant table,
> purge out a lot of old data).
>
> CLUSTER is great for that, given the headroom, though I've often
> resorted to a dump and restore because I've not had the headroom
> for cluster, and it's a lot less downtime than a full vacuum.
>
> While the right fix there is to redo the application engine side to use
> table partitioning, I keep wondering whether it would be possible
> to move rows near the end of the table to the beginning in one, non-
> locking
> phase (vacuum to populate FSM with free space near beginning of table,
> touch rows starting at end of table, repeat) and then finish off with a
> vacuum full to tidy up the remainder and truncate the files (or a
> simpler
> "lock the table and truncate anything unused at the end").

At some point I had to compress a very busily updated table. I used the
following approach:

1) VACUUM buzytable; (lazy not full)

2) SELECT primary_key_value, ctid FROM buzytable;

3) Extract N last records from there and for each keep repeating

3A) UPDATE buzytable
SET primary_key_value = primary_key_value
WHERE primary_key_value = extracted_value

3B) SELECT ctid FROM buzytable
WHERE primary_key_value = extracted_value

until the tuple is moved to another pages, hopefully nearer to
the beginning of table

repeat from 1) until the page for last row (extracted from ctid) is
smaller than some thresold.

This was the only way I was able to get a table back to small enough
size without service interruption.

--------------
Hannu

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2006-03-11 22:09:46 Re: random observations while testing with a 1,8B row
Previous Message Pavel Stehule 2006-03-11 18:27:07 Re: Function's final statement must not be a SELECT