pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Florian Schröck <fschroeck@aycan.de>
To: Kevin Grittner <kgrittn@ymail.com>
Cc: pgsql-performance@postgresql.org <pgsql-performance@postgresql.org>
Subject: Re: Very slow update statement on 40mio rows
Date: Fri, 15 Feb 2013 16:32:10 +0100
Message-ID: <511E54FA.8010107@aycan.de> (raw)
In-Reply-To: <1360940357.13532.YahooMailNeo@web162905.mail.bf1.yahoo.com>
References: <511E469F.70308@aycan.de>
	<1360940357.13532.YahooMailNeo@web162905.mail.bf1.yahoo.com>
List-Unsubscribe:  <mailto:majordomo@postgresql.org?body=unsub%20pgsql-performance>

Hello Kevin,
not updating every row which doesn't need the update solved the problem!
Your query took only 1 minute. :)

Thank you so much for the fast response, have a great weekend!

PS: When you switch to "TEXT" on the explain URL you can see the final
runtime which was 66 minutes with the original statement.

Best regards,
Florian

On 02/15/2013 03:59 PM, Kevin Grittner wrote:
> Florian Schröck <fschroeck@aycan.de> wrote:
>
>> UPDATE BackupFiles
>>    SET nTapeNr=0, nAFIOCounter=0, nBlockCounter=0,
>>        cStatus='NEW'::StatusT, bOnSetBlue=false,
>>        bOnSetYellow=false, nLastBackupTS= '0001-01-01 00:00:00'
>>    WHERE cStatus='NEW' OR cStatus='WRITING' OR cStatus='ONTAPE';
>>
>> Explain analyze: http://explain.depesz.com/s/8y5
>> The statement takes 60-90 minutes.
> The EXPLAIN ANALYZE at that URL shows a runtime of 3 minutes and 41
> seconds.
>
>> I tried to optimize the settings but until now without success.
>>
>> Can we optimize this update statement somehow? Do you have any
>> other ideas?
> Are there any rows which would already have the values that you are
> setting?  If so, it would be faster to skip those by using this
> query:
>
> UPDATE BackupFiles
>   SET nTapeNr=0, nAFIOCounter=0, nBlockCounter=0,
>       cStatus='NEW'::StatusT, bOnSetBlue=false,
>       bOnSetYellow=false, nLastBackupTS= '0001-01-01 00:00:00'
>   WHERE (cStatus='NEW' OR cStatus='WRITING' OR cStatus='ONTAPE')
>     AND (nTapeNr <> 0 OR nAFIOCounter <> 0 OR nBlockCounter <> 0
>          OR cStatus <> 'NEW'::StatusT
>          OR bOnSetBlue IS DISTINCT FROM false
>          OR bOnSetYellow IS DISTINCT FROM false
>          OR nLastBackupTS <> '0001-01-01 00:00:00');
>
> Another way to accomplish this is with the
> suppress_redundant_updates_trigger() trigger function:
>
> http://www.postgresql.org/docs/9.2/interactive/functions-trigger.html
>



-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance



view thread (5+ messages)  latest in thread

Message-ID: <511E54FA.8010107@aycan.de>
Permalink:  ../511E54FA.8010107@aycan.de/
Also on:    postgresql.org/message-id/511E54FA.8010107@aycan.de

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: fschroeck@aycan.de, kgrittn@ymail.com
  Subject: Re: Very slow update statement on 40mio rows
  In-Reply-To: <511E54FA.8010107@aycan.de>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox