Re: 7 hrs for a pg_restore? - Mailing list pgsql-performance

From Jeff Davis
Subject Re: 7 hrs for a pg_restore?
Date
Msg-id 1203450367.3846.101.camel@dogma.ljc.laika.com
Whole thread Raw
In response to Re: 7 hrs for a pg_restore?  (Douglas J Hunley <doug@hunley.homeip.net>)
List pgsql-performance
On Tue, 2008-02-19 at 14:20 -0500, Douglas J Hunley wrote:
> > Keep in mind, if you have several GB worth of indexes, they take up
> > basically no space in the logical dump (just the "CREATE INDEX" command,
> > and that's it). But they can take a lot of processor time to build up
> > again, especially with localized text.
> >
>
> that could be a factor here. It is a UNICODE db, and we do a lot of text-based
> indexing for the application

I assume you're _not_ talking about full text indexes here.

These factors:
* unicode (i.e. non-C locale)
* low I/O utilization
* indexes taking up most of the 7 hours

mean that we've probably found the problem.

Localized text uses sorting rules that are not the same as binary sort
order, and it takes much more CPU power to do the comparisons, and sorts
are already processor-intensive operations.

Unfortunately postgresql does not parallelize this sorting/indexing at
all, so you're only using one core.

I'd recommend restoring everything except the indexes, and then you can
restore the indexes concurrently in several different sessions so that
it uses all of your cores. Build your primary key/unique indexes first,
and then after those are built you can start using the database while
the rest of the indexes are building (use "CREATE INDEX CONCURRENTLY").

Regards,
    Jeff Davis


pgsql-performance by date:

Previous
From: Douglas J Hunley
Date:
Subject: Re: 7 hrs for a pg_restore?
Next
From: Jeff Davis
Date:
Subject: Re: 7 hrs for a pg_restore?