Skip site navigation (1) Skip section navigation (2)

Re: Delete performance

From: Craig Ringer <craig(at)postnewspapers(dot)com(dot)au>
To: Pierre C <lists(at)peufeu(dot)com>
Cc: pgsql-performance(at)postgresql(dot)org, Jarrod Chesney <jarrod(dot)chesney(at)gmail(dot)com>
Subject: Re: Delete performance
Date: 2011-06-01 01:40:52
Message-ID: 4DE598A4.1080100@postnewspapers.com.au (view raw or flat)
Thread:
Lists: pgsql-performance
On 1/06/2011 7:11 AM, Pierre C wrote:
>> If i run 30,000 prepared "DELETE FROM xxx WHERE "ID" = ?" commands it
>> takes close to 10 minutes.
>
> Do you run those in a single transaction or do you use one transaction
> per DELETE ?
>
> In the latter case, postgres will ensure each transaction is commited to
> disk, at each commit. Since this involves waiting for the physical I/O
> to happen, it is slow. If you do it 30.000 times, it will be 30.000
> times slow.

Not only that, but if you're doing it via some application the app has 
to wait for Pg to respond before it can send the next query. This adds 
even more delay, as do all the processor switches between Pg and your 
application.

If you really must issue individual DELETE commands one-by-one, I 
*think* you can use synchronous_commit=off or

  SET LOCAL synchronous_commit TO OFF;

See:

http://www.postgresql.org/docs/current/static/runtime-config-wal.html


-- 
Craig Ringer

Tech-related writing at http://soapyfrogs.blogspot.com/

In response to

Responses

pgsql-performance by date

Next:From: Jarrod ChesneyDate: 2011-06-01 01:45:04
Subject: Re: Delete performance
Previous:From: Cédric VillemainDate: 2011-06-01 01:11:16
Subject: Re: [PERFORM] Hash Anti Join performance degradation

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group