From: | Steve Atkins <steve(at)blighty(dot)com> |
---|---|
To: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: random observations while testing with a 1,8B row table |
Date: | 2006-03-10 20:23:04 |
Message-ID: | C2D36CD3-E0DC-486F-9606-3E657901AEA0@blighty.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Mar 10, 2006, at 11:54 AM, Tom Lane wrote:
> Stefan Kaltenbrunner <stefan(at)kaltenbrunner(dot)cc> writes:
>>>> 3. vacuuming this table - it turned out that VACUUM FULL is
>>>> completly
>>>> unusable on a table(which i actually expected before) of this
>>>> size not
>>>> only to the locking involved but rather due to a gigantic memory
>>>> requirement and unbelievable slowness.
>
>> sure, that was mostly meant as an experiment, if I had to do this
>> on a
>> production database I would most likely use CLUSTER to get the
>> desired
>> effect (which in my case was purely getting back the diskspace
>> wasted by
>> dead tuples)
>
> Yeah, the VACUUM FULL algorithm is really designed for situations
> where
> just a fraction of the rows have to be moved to re-compact the table.
> It might be interesting to teach it to abandon that plan and go to a
> CLUSTER-like table rewrite once the percentage of dead space is
> seen to
> reach some suitable level. CLUSTER has its own disadvantages though
> (2X peak disk space usage, doesn't work on core catalogs, etc).
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").
Cheers,
Steve
From | Date | Subject | |
---|---|---|---|
Next Message | Stefan Kaltenbrunner | 2006-03-10 20:23:48 | Re: random observations while testing with a 1,8B row table |
Previous Message | Tom Lane | 2006-03-10 20:10:07 | Re: problem with large maintenance_work_mem settings and |