[pgpool-general-jp: 220] Re: 大量のINSERTを行うとデッドロックする

igarashi @ motion.co.jp igarashi @ motion.co.jp
2007年 7月 24日 (火) 15:02:49 JST


お世話になっております。五十嵐です。
長期間返信できずにすみませんでした。

> ログを拝見しましたが、もしかしたら修正前のバージョンをお使いの可能性が
> ありますので、ソースコードのあるディレクトリで以下のコマンドを実行して
> いただけないでしょうか?
> 
>   % grep Header pool_process_query.c
以下、実行結果です。
$Header: /cvsroot/pgpool/pgpool/pool_process_query.c,v 1.52 2007/07/11 02:11:53 y-asaba Exp $


> <SecondaryDB postgres.log>
>省略
> > postgres[29191]: [46963-1] LOG:  statement: LOCK TABLE lock_test IN SHARE ROW EXCLUSIVE MODE
> > postgres[29191]: [46964-1] ERROR:  deadlock detected
> > postgres[29191]: [46964-2] DETAIL:  Process 29191 waits for ShareRowExclusiveLock on relation
170406893 of database 170405435; blocked by process 29343.
> > postgres[29191]: [46964-3]     Process 29343 waits for
> > ShareRowExclusiveLock on relation 170406893 of database 170405435;
> > blocked by process 29191.

> psql を 2 つ立ちあげて
> 
>   A: BEGIN:
>   B: BEGIN;
>   A: LOCK TABLE t1 IN SHARE ROW EXCLUSIVE MODE;
>   B: LOCK TABLE t2 IN SHARE ROW EXCLUSIVE MODE;
>   A: LOCK TABLE t2 IN SHARE ROW EXCLUSIVE MODE;
>   B: LOCK TABLE t1 IN SHARE ROW EXCLUSIVE MODE;
> 
> を実行すると、上記の syntax error がセカンダリに記録されるでしょうか?

3.sqlに
begin;
lock lock_test in row exclusive mode;
insert into lock_test values(20001,'C');
commit;
(20001〜30000までの1万件)

4.sqlに
begin;
lock lock_test in row exclusive mode;
insert into lock_test values(30001,'D');
commit;
(30001〜40000までの1万件)
を記述し、
1つ目のセッションからpsql -f 3.sql DBNAME
2つ目のセッションからpsql -f 4.sql DBNAME
を実行した時に、上記のログが出力されました。

以上、よろしくお願いします。


pgpool-general-jp メーリングリストの案内