Re: Full Vacuum/Reindex vs autovacuum - Mailing list pgsql-general

From Scott Marlowe
Subject Re: Full Vacuum/Reindex vs autovacuum
Date
Msg-id AANLkTi=di5N0D1yRhZdZoynWCULt0Ktjn5ZhU98KVyQL@mail.gmail.com
Whole thread Raw
In response to Re: Full Vacuum/Reindex vs autovacuum  (Jason Long <mailing.lists@octgsoftware.com>)
List pgsql-general
On Mon, Nov 8, 2010 at 4:41 PM, Jason Long
<mailing.lists@octgsoftware.com> wrote:
> On Mon, 2010-11-08 at 16:23 -0700, Scott Marlowe wrote:
>> On Mon, Nov 8, 2010 at 3:42 PM, Jason Long <jason@octgsoftware.com> wrote:
>> > On Mon, 2010-11-08 at 14:58 -0700, Scott Marlowe wrote:
>> >> On Mon, Nov 8, 2010 at 11:50 AM, Jason Long <jason@octgsoftware.com> wrote:
>> >> > I currently have Postgres 9.0 install after an upgrade.  My database is
>> >> > relatively small, but complex.  The dump is about 90MB.
>> >> >
>> >> > Every night when there is no activity I do a full vacuum, a reindex,
>> >>
>> >> One question, why?
>> >>
>> >> > and then dump a nightly backup.
>> >>
>> >> Good idea.
>> >>
>> >> > Is this optimal with regards to performance?  autovacuum is set to the
>> >> > default.
>> >>
>> >> that depends very much on your answer to the question of why are you
>> >> doing it and what you're trying to gain / work around with vacuum full
>> >> / reindex every night.
>> >>
>> >
>> > I have been doing this for several years.  Since my database is small
>> > and it takes little time to do a full vacuum.  I am doing the reindex
>> > because I thought that was recommended after a full vacuum.
>>
>> Definitely reindex after a full vacuum on previous versions (i.e.
>> before 9.0) I think with 9.0 vacuum full is like a cluster without any
>> reordering, so it likely doesn't need reindexing, but I've not played
>> with 9.0 much yet.
>>
>> > As the data has grown the system is slowing down.  Right now I am
>> > looking at ways to improve performance without getting into the queries
>> > themselves because I am swamped with new development.
>>
>> OK, so it's a standard maintenance procedure you've been doing for a
>> while.  That doesn't really explain why you started doing it, but I
>> can guess that you had some bloat issues way back when and vacuum full
>> fixed them, so doing it got kind of enshrined in the nightly
>> maintenance.
> Exactly.
>>
>> > Is doing the full vacuum and reindex hurting or helping anything?
>>
>> It might help a small amount if you've got regular usage patterns.  If
>> you routinely update whole tables over and over then it might be
>> helping.
> I rarely update whole tables.
>>
>> > Any other quick fixes that I can try?
>>
>> Increasing work_mem, shared_buffers, changing random_page_cost and /
>> or seq_page_cost.
> I did up those at one point, but saw little improvement.  I will
> reinvestigate.
>>
>> Log long running queries and run explain analyze on any that show up very often.
>>
>> But for real performance, you do often have to "get into the queries"
>> because an inefficient query may be something you can cut down to
>> 1/10000th the run time with a simple change, and often that change is
>> impossible to make by tuning the db, only the query can be tuned.  It
>> might be something simple like you need to cast a type to match some
>> other type.  Hard to say without looking.
>>
>> When a 90Meg database is slow, it's almost always poorly written /
>> non-optimized queries at the heart of it.
>
> I have no doubt that poorly written and non-optimized queries are at the
> heart of it.  Stupid developer I'll have to fire that lazy bastard... Oh
> wait that's me. ;)

Yeah, I've got one of those bastards where I work too.  :)

> I am going to start using auto_explain and logging long running queries.
> Also time to learn how to read query plans.  So far I have gotten by by
> throwing faster hardware at the problem.

Faster hardware, sadly only gets you so far.

For help with explain, start here:
http://explain.depesz.com/

pgsql-general by date:

Previous
From: Jason Long
Date:
Subject: Re: Full Vacuum/Reindex vs autovacuum
Next
From: Andre Lopes
Date:
Subject: Re: It is possible to update more than 1 table in the same update statement?