Thread: Hash Indexes Causing Deadlock Notices

Hash Indexes Causing Deadlock Notices

From
mark
Date:
Hi,

I have been experimenting with the Apache Benchmarking Tool ( ab ) to
give my demo web site a bit of a hiding. The database backend is
Postgresql 7.1 ( dev from 25/09/00) .

I noticed that a large number of log notice messages announcing a
deadlock being detected together with  transactions being aborted (and
suggesting that I read the lock manual entry).   I am a bit confused
about the deadlock as I use select...for update to lock rows and process
all tables in the same order ( which SHOULD prevent any deadlocks...)

The tables impacted in the benchmark had HASH indexes. ( only = scans
were being performed, it seemed a good idea at the time ..). Recreating
these indexes as BTREE made all the messages go away. ( and produced a
better request/s result ! )

I am not sure if this issue with HASH indexes occurs in the production
sources :-). I will attempt to replicate if anybody is interested.

Mark


Re: Hash Indexes Causing Deadlock Notices

From
Tom Lane
Date:
mark <markir@i4free.co.nz> writes:
> I noticed that a large number of log notice messages announcing a
> deadlock being detected together with  transactions being aborted

> The tables impacted in the benchmark had HASH indexes. ( only = scans
> were being performed, it seemed a good idea at the time ..). Recreating
> these indexes as BTREE made all the messages go away. ( and produced a
> better request/s result ! )

IIRC, hash indexes use per-page locking that is not guaranteed deadlock
free.  It's also bad for concurrency even when you don't get a deadlock.

The btree index type is by far the best choice we offer for
high-concurrency applications.  Perhaps at some point someone will
be motivated to improve the other index types, but right now they
are definitely poor stepchildren ...

            regards, tom lane