Re: deadlock detected - when multiple threads try to update

From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: Harakiri <harakiri_23(at)yahoo(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: deadlock detected - when multiple threads try to update
Date: 2005-12-02 19:40:16
Message-ID: 20051202113802.A44318@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Fri, 2 Dec 2005, Harakiri wrote:

> im using postgresql 8 under SLES 9 and RH 3.x - under
> both OS i encountered the following problem :
>
> Lets say i have a table, which has no reference to any
> other table - and i create one entry for each day of
> the year within this table (PK). During a day, i
> update the values within that specific entry - this
> entry will be updated from multiple threads.
>
> Under a higher load, i get a message from postgresql
> "deadlock detected" - im using JDBC to update/query
> postgresql.
>
> However, i do not understand why i would get a
> "deadlock detected" error message because i only
> INCREASE the values of the fields - i do not overwrite
> them - my statement simplified looks like this :
>
> update mytable set field1 = field1 + 1, field2 =
> field2 + 4200 where pkDate = someDate
>
> Now, multiple threads with a connection pool are
> connecting to postgres - and i can reproduce the
> deadlock problem when i use a test class which starts
> 1000 threads to update this table.
>
> Increasing the value of deadlock_timeout helps a bit -
> but solves not the problem - because i think there
> should not be a problem at all - the transaction
> management of postgres should be able to handle two or
> more threads which only want to increase the value o f
> specific fields - like in programming i++;
>
> Releated Questions
>
> a) Is there another way to increase field values
> within postgres other then field = field + MY_VALUE
> b) Is it a problem with postgresql or is it my code ?

It's hard to say with just the above. Are you doing other things in the
transactions besides a single update of that table and/or is the order of
events consistent between the transactions? Does the table have any
triggers, rules or foreign keys?

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2005-12-02 19:53:47 Re: Numeric 508 datatype
Previous Message Harakiri 2005-12-02 19:33:53 deadlock detected - when multiple threads try to update one table