deadlock problems with foreign keys

Поиск
Список
Период
Сортировка
От Mario Weilguni
Тема deadlock problems with foreign keys
Дата
Msg-id D143FBF049570C4BB99D962DC25FC2D201EB4D@freedom.icomedias.com
обсуждение исходный текст
Ответы Re: deadlock problems with foreign keys  (Jan Wieck <janwieck@yahoo.com>)
Re: deadlock problems with foreign keys  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
Список pgsql-hackers
I've a severe problem with deadlocks in postgres, when using referential integrity it's quite easy to trigger
deadlocks.I think the may be a bug in ri_trigger.c (discussed later). Here's some short example: 

create table languages ( id        integer not null, name      text    not null, primary key(id)
);

create table entry ( id        integer not null, lang_id   integer, sometext  text, primary key (id), foreign key (
lang_id) references languages (id) 
);

insert into languages values (1, 'english');
insert into languages values (2, 'german');

insert into entry values (1, 1, 'text 1');
insert into entry values (2, 1, 'text 2');


transaction A: begin;
transaction A: update entry set sometext='text 1.1' where id=1;
transaction A: .... do more time-consuming processing here...
meanwhile, B: begin;           B: update entry set sometext='text 2.1' where id=2;

-- both processes hang now

I think this is too much locking here, because the logfile show's something like this:
'select 1 from "languages" where id=$1 for update' (2 times).

Now I've a lot of tables (around 30) and use referential integrity a lot on ~10 columns (language, country....) , and
withmore fields it's very easy to deadlock the whole system (it happens a lot in my web applicaiton with ~20 concorrent
users).

IMHO the "select ... for update" on languages is not necessary, since I do not want to update "lang_id", but I might be
wrong.The other problem is, that this will make postgres in benchmarks very slow (with many concurrent connections), at
leastif the application is not trivial. 

IMO the problem is in ri_trigger.c around line 390:    /* ----------     * The query string built is     *    SELECT 1
FROMONLY <pktable> WHERE pkatt1 = $1 [AND ...]     * The type id's for the $ parameters are those of the     *
correspondingFK attributes. Thus, SPI_prepare could     * eventually fail if the parser cannot identify some way     *
howto compare these two types by '='.     * ----------     */ 

Any ideas if this is a bug or simply strict SQL standard?

Best regards,Mario Weilguni



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

Предыдущее
От: Jessica Perry Hekman
Дата:
Сообщение: Re: Mailing List Question
Следующее
От: "Rod Taylor"
Дата:
Сообщение: Re: deadlock problems with foreign keys