Re: Tracking down deadlocks - Mailing list pgsql-general

From Joshua D. Drake
Subject Re: Tracking down deadlocks
Date
Msg-id 40D0887A.5070502@commandprompt.com
Whole thread Raw
In response to Re: Tracking down deadlocks  (Ben <bench@silentmedia.com>)
Responses Re: Tracking down deadlocks
List pgsql-general
Hello,

Deferred checks can greatly reduce the deadlock chance because of the
timing of the foreign key check. I won't say it can eliminate them,
and I don't think anyone here would suggest that you don't use Foreign keys.

Sincerely,

Joshua D. Drake

Ben wrote:
> Thanks for the quick reply (and summary!).
>
> According to the messages I've found on the list, basically the answer
> seems to be, "don't do this." On the other hand, pretty much every
> message on the subject is pre-7.4. There is some mention of using
> deferred foreign keys to reduce the chance for a deadlock, but nothing
> says doing that actually eliminates the chance.
>
> Is this just a known limitation? In this particular instance, I probably
> could get rid of my foreign keys and if things go bad it wouldn't hurt
> anything.... but I make heavy use of foreign keys throughout the rest of
> my schema, which are useful for the programs that aren't doing data
> mining. I wouldn't want to get rid of those foreign keys.
>
> On Jun 16, 2004, at 8:54 AM, Csaba Nagy wrote:
>
>> Hi Ben,
>>
>> Check this mailing list for "foreign keys" and "deadlock".
>> Short info:
>> Postgres exclusively locks the referenced records of a foreign key
>> relationship when the child record is updated, so multiple runs (in
>> different transactions) of one insert query could cause deadlock if they
>> update rows which reference the same parent keys in reverse order.
>> Check your foreign keys...
>>
>> HTH,
>> Csaba.
>>
>> On Wed, 2004-06-16 at 17:33, Ben wrote:
>>
>>> I'm doing a bunch of data mining against a postgres database and have
>>> run into an interesting problem with deadlocks. The problem is,
>>> postgres is detecting them and then wacking the offending process, and
>>> I can't figure out what's causing them. I have a ton of select queries
>>> (but none for update), and then a single query to insert into a table.
>>> Nothing selects from that table. So where could the deadlock be?
>>>
>>> pg_stat_activity has a column named current_query, which would seem
>>> useful in tracking this down, but it's not being populated.
>>>
>>> Oh, I'm running 7.4.2.
>>>
>>>
>>> ---------------------------(end of broadcast)---------------------------
>>> TIP 5: Have you checked our extensive FAQ?
>>>
>>>                http://www.postgresql.org/docs/faqs/FAQ.html
>>
>>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
>      joining column's datatypes do not match


--
Command Prompt, Inc., home of Mammoth PostgreSQL - S/ODBC and S/JDBC
Postgresql support, programming shared hosting and dedicated hosting.
+1-503-667-4564 - jd@commandprompt.com - http://www.commandprompt.com
Mammoth PostgreSQL Replicator. Integrated Replication for PostgreSQL

Attachment

pgsql-general by date:

Previous
From: Ben
Date:
Subject: Re: Tracking down deadlocks
Next
From: Ben
Date:
Subject: Re: Tracking down deadlocks