Re: Deadlock with ShareLocks?

Поиск
Список
Период
Сортировка
От Mario Weilguni
Тема Re: Deadlock with ShareLocks?
Дата
Msg-id 200512131645.14305.mweilguni@sime.com
обсуждение исходный текст
Ответ на Re: Deadlock with ShareLocks?  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Deadlock with ShareLocks?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Am Dienstag, 13. Dezember 2005 16:35 schrieb Tom Lane:
> Mario Weilguni <mweilguni@sime.com> writes:
> > Version:     8.1
> > Query        : update last_modified set dataend=now() where type='list'
> > DB-Error     : ERROR:  deadlock detected
> > DETAIL:  Process 10454 waits for ShareLock on transaction 1347632;
> > blocked by process 15920.
> > Process 15920 waits for ShareLock on transaction 1347633; blocked by
> > process 10454.
> >
> > I thought ShareLock is not really blocking, or am I wrong?
>
> You're wrong.  This looks like a deadlock occasioned by trying to update
> the same two rows in different orders in different transactions.  In a
> pre-8.1 release I'd have guessed that this might be a deadlock on
> foreign key master rows, but in 8.1 that can't happen anymore.
>
> If "WHERE type = 'list'" selects multiple rows, and someone else might
> be trying to update more than one of those same rows using a different
> WHERE clause, deadlock is definitely possible.  You may not have much
> choice but to take a table-level lock before starting the updates.

Hi Tom,

there must be something different here. In fact, this is the real data from 
the table:    type      |            dataend
---------------+-------------------------------applikationen | 2004-09-03 14:44:44.63422+02xslt          | 2005-12-07
21:30:08.183392+01red          | 2005-12-08 19:36:50.357642+01list          | 2005-12-13 14:35:44.544795+01struktur
| 2005-12-13 16:21:52.645182+01
 
         Table "public.last_modified"Column  |           Type           | Modifiers
---------+--------------------------+-----------type    | character varying(32)    | not nulldataend | timestamp with
timezone | not null
 
Indexes:   "last_modified_pkey" PRIMARY KEY, btree ("type")

Since the type field is PK, there cannot be 2 rows with type='list', I guess 
the deadlock must have some different explanation. There are no foreign key 
constraints, triggers, rules involved.

Best regards,
Mario Weilguni


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Deadlock with ShareLocks?
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Regression test horology failure