On 04/01/2010 8:30 PM, Madison Kelly wrote:
Steve Crawford wrote:
Madison Kelly wrote:
Hi all,
I've got a fairly small DB...
It slows down over time and I can't seem to find a way to get the
performance to return without doing a dump and reload of the
database...
Some questions:
Is autovacuum running? This is the most likely suspect. If not,
things will bloat and you won't be getting appropriate "analyze"
runs. Speaking of which, what happens if you just run "analyze"?
And as long as you are dumping and reloading anyway, how about
version upgrading for bug reduction, performance improvement, and
cool new features.
Cheers,
Steve
Yup, I even tried manually running 'VACUUM FULL' and it didn't help.
As for upgrading;
VACUUM FULL is not the same as VACUUM ANALYZE FULL. You shouldn't need
the FULL option amyway.
a) I am trying to find a way around the dump/reload. I am doing it as
a "last resort" only.
b) I want to keep the version in CentOS' repo.
I'd not tried simply updating the stats via ANALYZE... I'll keep an
eye on performance and if it starts to slip again, I will run ANALYZE
and see if that helps. If there is a way to run ANALYZE against a
query that I am missing, please let me know.
From your queries it definitely looks like its your stats that are the
problem. When the stats get well out of date the planner is choosing a
hash join because it thinks thousands of rows are involved where as only
a few are actually involved. Thats why, with better stats, the second
query is using a loop join over very few rows and running much quicker.
Therefore it's ANALYZE you need to run as well as regular VACUUMing.
There should be no need to VACUUM FULL at all as long as you VACUUM and
ANALYZE regularly. Once a day may be enough, but you don't say how long
it takes your database to become "slow".
You can VACUUM either the whole database (often easiest) or individual
tables if you know in more detail what the problem is and that only
certain tables need it.
Setting up autovacuum may well be sufficient.
Cheers,
Gary.
Madi
--
Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance