Re: Savepoints in transactions for speed?

From: Mike Blackwell <mike(dot)blackwell(at)rrd(dot)com>
To: "pgsql-performance(at)postgresql(dot)org" <pgsql-performance(at)postgresql(dot)org>
Subject: Re: Savepoints in transactions for speed?
Date: 2012-11-29 16:38:31
Message-ID: CANPAkgv=bfTetDjJUF2irugq98RqaGiCz1=GXxOoDTXkY-bwFw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

On Wed, Nov 28, 2012 at 9:48 PM, Claudio Freire <klaussfreire(at)gmail(dot)com>wrote:

> On Wed, Nov 28, 2012 at 8:28 PM, Jeff Davis <pgsql(at)j-davis(dot)com> wrote:
> >
> > The main problem with a long-running delete or update transaction is
> > that the dead tuples (deleted tuples or the old version of an updated
> > tuple) can't be removed until the transaction finishes. That can cause
> > temporary "bloat", but 1.5M records shouldn't be noticeable.
>
> Not really that fast if you have indices (and who doesn't have a PK or
> two).
>
> I've never been able to update (update) 2M rows in one transaction in
> reasonable times (read: less than several hours) without dropping
> indices. Doing it in batches is way faster if you can't drop the
> indices, and if you can leverage HOT updates.

What I'm trying at this point is:

BEGIN;
DROP INDEX -- only one unique index exists
DELETE FROM table;
COPY table FROM STDIN;
COMMIT;
CREATE INDEX CONCURRENTLY;

Do I understand correctly that DROP/CREATE index are not transactional, and
thus the index will disappear immediately for other transactions? Am I
better off in that case moving the DROP INDEX outside the transaction?

The access pattern for the table is such that I can afford the occasional
stray hit without an index during the reload time. It's been pretty quick
using the above.

Mike

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Scott Marlowe 2012-11-29 16:54:42 Re: Savepoints in transactions for speed?
Previous Message Pavan Deolasee 2012-11-29 12:45:19 Re: 9.2.1 & index-only scans : abnormal heap fetches after VACUUM FULL