Thread: Deadlocks

Deadlocks

From
Gena Gurchonok
Date:
Hello.

It seems to me that I discovered strange PSQL behaviour

I have table logs:
-------------
CREATE TABLE "logs" (
        "id" int4 NOT NULL,
        "type" int4 NOT NULL,
        "dt" timestamp NOT NULL,
        "addr" character varying(20)
);
-------------
with indexes:
-------------
CREATE  INDEX "logs_id_key" on "logs" using hash ( "id" "int4_ops" );
CREATE  INDEX "logs_type_key" on "logs" using hash ( "type" "int4_ops" );
CREATE  INDEX "logs_dt_key" on "logs" using hash ( "dt" "timestamp_ops" );
-------------

Each HTTP request in my site inserts one row to this table.

PROBLEM:
Sometimes it writes error message
"NOTICE:  Deadlock detected -- See the lock(l) manual page for a possible cause."
and row of course is not inserted.

If I drop all indices on this table then such notice is not appearing.
But I need indices on this table.

I have tried this on 7.0.3 and CVS versions.

Gena



Re: Deadlocks

From
Tom Lane
Date:
Gena Gurchonok <gena@rt.mipt.ru> writes:
> CREATE  INDEX "logs_id_key" on "logs" using hash ( "id" "int4_ops" );
> CREATE  INDEX "logs_type_key" on "logs" using hash ( "type" "int4_ops" );
> CREATE  INDEX "logs_dt_key" on "logs" using hash ( "dt" "timestamp_ops" );

> Sometimes it writes error message
> "NOTICE:  Deadlock detected -- See the lock(l) manual page for a possible cause."
> and row of course is not inserted.

> If I drop all indices on this table then such notice is not appearing.
> But I need indices on this table.

Don't use hash indexes; use the default index type (btree).  hash
indexes are subject to deadlock under concurrent insertions.  Besides,
they do nothing that you can't do with a btree.

            regards, tom lane