Обсуждение: Deadlock detected

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

Deadlock detected

От
"Brian J. France"
Дата:
Hello,

  I am getting a few of these errors in my web logs and didn't know what I could do to stop it.

NOTICE:  Deadlock detected -- See the lock(l) manual page for a possible cause.

Error in query "UPDATE <table> SET <field> = <value> WHERE <field2> = <value2>" : ERROR:  WaitOnLock: error on wakeup -
Abortingthis transaction 

Is this due to the hash index on field2 or due to the has index in general?  I read in the mailing archive back in '98
(referringto v6.5) that hash index were bad, is this still the case and should I switch to btree?  I have tried to wrap
theupdate statement with BEGIN; <statement>; END; and get the same results. 

System:
  Linux: 2.2.18
  PostgreSQL: 7.0.3
  gcc: 2.95.2
  libc-2.1.3

Thanks,

Brian

BTW, on a different table I get this warning ever time I vacuum the database. It doesn't seem to cause a problem, but
didn'tknow how to get rid of it.   

NOTICE:  Index <indexname>: NUMBER OF INDEX' TUPLES (214) IS NOT THE SAME AS HEAP' (215).
    Recreate the index.


Re: Deadlock detected

От
Maurice Balick
Дата:

Brian J. France wrote:

 >
 > BTW, on a different table I get this warning ever time I vacuum the
database. It doesn't seem to cause a problem, but didn't know how to get
rid of it.
 >
 > NOTICE:  Index <indexname>: NUMBER OF INDEX' TUPLES (214) IS NOT THE
SAME AS HEAP' (215).
 >     Recreate the index.

I had the same problem for months and just figured it out: I had a null
entry in one of the index's columns. Once I removed the null entry that
notice went away.

---Maurice


Re: Deadlock detected

От
Tom Lane
Дата:
"Brian J. France" <postgresql@firehawksystems.com> writes:
>   I am getting a few of these errors in my web logs and didn't know what I could do to stop it.

> NOTICE:  Deadlock detected -- See the lock(l) manual page for a possible cause.

> Error in query "UPDATE <table> SET <field> = <value> WHERE <field2> = <value2>" : ERROR:  WaitOnLock: error on wakeup
-Aborting this transaction 

> Is this due to the hash index on field2 or due to the has index in general?

Don't use hash indexes for concurrent applications.  I don't really know
of any reason for preferring a hash index over a btree index in any case.

            regards, tom lane

Re: Deadlock detected

От
Maurice Balick
Дата:
Hi Tom,


"Brian J. France" <postgresql@firehawksystems.com> writes:
    I am getting a few of these errors in my web logs and didn't know what I could do to stop it.
    NOTICE:  Deadlock detected -- See the lock(l) manual page for a possible cause.
      Error in query "UPDATE <table> SET <field> = <value> WHERE <field2> = <value2>" :
ERROR: WaitOnLock: error on wakeup - Aborting this transaction 
        Is this due to the hash index on field2 or due to the has index in general?
          Don't use hash indexes for concurrent applications.  I don't really knowof any reason for preferring a hash
indexover a btree index in any case.            regards, tom lane 

Could you expand a little on the subject of Hash Vs BTree indexes? And in
particular "Don't use hash indexes for concurrent applications".

I posted a question about deadlocks a week or two ago and I was advised to upgrade to 7.0.3 (from 7.0.2).
I did, but I still get a few deadlocks (i.e. all the backends eventually remain locked in requests).

I am using a lot of Hash indexes because they usually provide faster access
to a specific record than binary trees (O Vs OlogN). Most of my requests
simply lookup a record based on some specific account or transaction ID.

If using BTree instead of Hash indexes does not affect performance and solves my deadlock problem,  please let me
know!

Thanks.

--Maurice