good old VACUUM FULL

From: felix <crucialfelix(at)gmail(dot)com>
To: pgsql-performance(at)postgresql(dot)org
Subject: good old VACUUM FULL
Date: 2011-03-23 00:52:55
Message-ID: AANLkTi=SMx4GiW5DLFTpOm4Go-ibipc6WpTN+4rY7tbF@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

I posted many weeks ago about a severe problem with a table that was
obviously bloated and was stunningly slow. Up to 70 seconds just to get a
row count on 300k rows.

I removed the text column, so it really was just a few columns of fixed
data.
Still very bloated. Table size was 450M

The advice I was given was to do CLUSTER, but this did not reduce the table
size in the least.
Nor performance.

Also to resize my free space map (which still does need to be done).
Since that involves tweaking the kernel settings, taking the site down and
rebooting postgres and exposing the system to all kinds of risks and
unknowns and expensive experimentations I was unable to do it and have had
to hobble along with a slow table in my backend holding up jobs.

Much swearing that nobody should ever do VACUUM FULL. Manual advises
against it. Only crazy people do that.

Finally I decide to stop taking advice.

ns=> explain analyze select count(*) from fastadder_fastadderstatus;
---------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=62602.08..62602.09 rows=1 width=0) (actual
time=25320.000..25320.000 rows=1 loops=1)
-> Seq Scan on fastadder_fastadderstatus (cost=0.00..61815.86
rows=314486 width=0) (actual time=180.000..25140.000 rows=314493 loops=1)
Total runtime: *25320.000* ms

ns=> vacuum full fastadder_fastadderstatus;

took about 20 minutes

ns=> explain analyze select count(*) from fastadder_fastadderstatus;
----------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=7478.03..7478.04 rows=1 width=0) (actual
time=940.000..940.000 rows=1 loops=1)
-> Seq Scan on fastadder_fastadderstatus (cost=0.00..6691.82
rows=314482 width=0) (actual time=0.000..530.000 rows=314493 loops=1)
Total runtime: *940.000 ms*

moral of the story: if your table is really bloated, just do VACUUM FULL

CLUSTER will not reduce table bloat in and identical fashion

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Chris 2011-03-23 04:24:42 Re: good old VACUUM FULL
Previous Message Tom Lane 2011-03-22 22:56:59 Re: Analyze on temp table taking very long