Обсуждение: Deadlocks? What happened to MVCC?

Поиск
Список
Период
Сортировка

Deadlocks? What happened to MVCC?

От
"Josh Berkus"
Дата:
Folks:

I'm getting deadlock errors on one of the operations on my web
application.  It's a function which adds a large number of rows to a
holding table, then updates that set of rows multiple times in order to
present scoring information to the user.

However, the function is deadlocking itself once it's in heavy use.  I
though that MVCC was supposed to supercede deadlocks, unless I
specifically set locks, which I'm not.

Help, anyone?

-Josh Berkus

______AGLIO DATABASE SOLUTIONS___________________________                                      Josh Berkus Complete
informationtechnology      josh@agliodbs.com  and data management solutions       (415) 565-7293 for law firms, small
businesses       fax 621-2533   and non-profit organizations.      San Francisco
 


Re: Deadlocks? What happened to MVCC?

От
Jan Wieck
Дата:
Josh Berkus wrote:
> Folks:
>
> I'm getting deadlock errors on one of the operations on my web
> application.  It's a function which adds a large number of rows to a
> holding table, then updates that set of rows multiple times in order to
> present scoring information to the user.
>
> However, the function is deadlocking itself once it's in heavy use.  I
> though that MVCC was supposed to supercede deadlocks, unless I
> specifically set locks, which I'm not.
>
> Help, anyone?
   You   must   have  misunderstood  something.  MVCC  does  not   supersede deadlocks, nor can it prevent them. All
MVCC does   is to help "readers" not beeing blocked by "writers" and vice   versa, by avoiding the need for  shared
"read" locks.   But   writers  still  need  locks,  so  if  your  application  does   something like
 
       Xact-1: Starts transaction       Xact-2: Starts transaction       Xact-1: Updates row A       Xact-2: Updates
rowB       Xact-1: Wants to update row B (blocks)       Xact-2: Wants to update row A
 
   then it's a deadlock. A deadlock is a deadlock and remains to   be a deadlock, no matter if you have versioning or
not.


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #



_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com



Re: Deadlocks? What happened to MVCC?

От
Tom Lane
Дата:
MVCC does not mean "no locks" ... particularly not when UPDATEs are
involved.  You'll need to be more specific about what your function is
doing, but my first thought would be to look for the possibility of
conflicting updates of the same row.
        regards, tom lane


Re: Deadlocks? What happened to MVCC?

От
"Josh Berkus"
Дата:
Tom, Jan,

> MVCC does not mean "no locks" ... particularly not when UPDATEs are
> involved.  You'll need to be more specific about what your function
> is
> doing, but my first thought would be to look for the possibility of
> conflicting updates of the same row.

Found the problem after 3 hours and a phone call to PostgreSQL Inc.
Turns out that I had one too-broad UPDATE in a 250-line function ...
feh!

-Josh


______AGLIO DATABASE SOLUTIONS___________________________                                      Josh Berkus Complete
informationtechnology      josh@agliodbs.com  and data management solutions       (415) 565-7293 for law firms, small
businesses       fax 621-2533   and non-profit organizations.      San Francisco