[pgcluster: 501] Re: SELECT FOR UPDATEでLOCK 検知後、固まる不具合について

mitani mitani @ sraw.co.jp
2004年 8月 13日 (金) 09:44:38 JST


三谷@広島です.


> 【検証手順】
> BEGIN;
> SELECT id FROM a WHERE id = 110 FOR UPDATE;
> COMMIT;
> を1セットとしてこれを100回記述したファイルを sfu.sqlというファイル名保存。
> 1. C1〜C4で、psql -U postgres -d testdb -f sfu.sql を(ほぼ)同時に実行。
> 2. C1 上で psql -U postgres -d testdb -f sfu.sql を3つ同時に実行。
> 【結果】
> 1 の場合、およそ正常に実行されますが、deadlock detected が C1〜C4 上でたまに確認されます。
> また、deadlock detected. が検出された直後に psql が以下のメッセージを吐いて落ちる場合があります。
> これは、毎回起こるわけではなく、少ない割合で発生します。
1と2は意味的に同じ試験ですね.
同一のSELECT FOR UPDATEを大量に送るとdead lockを起こしてセッションが切れ
る場合があるということですね.

同一のSELECT FOR UPDATEを含むトランザクションを大量に送るとdead lockを起
こすことはあると思います.また,dead lockが発生するとロックを開放し,セッ
ションをキャンセルするのも正しい処理だと思います.
が,それでレプリケーションサーバから切り離されるのは問題です.

確認してみます.

=============================
三谷 篤<mitani @ sraw.co.jp>
=============================





pgcluster メーリングリストの案内