[pgsql-jp: 37805] UPDATE が集中するとデッドロックが発生する
maya
maya @ negeta.com
2006年 12月 18日 (月) 17:44:35 JST
maya と申します。
UPDATE 文が短時間に繰り返されると、デッドロックが発生します。
どうしてこうなるのか、教えていただけるでしょうか。
Perl の CGI で DBI を使用して PostgreSQL 8.1.4 に接続し、約 180,000
レコード入っているテーブルのうち、一つの列の条件で絞り込んだ 3,000 件
程を update する SQL を実行しています。
AutoCommit は使用せず、エラー判定により commit/rollback しています。
この CGI に、1秒間に15回ほどアクセスがなされる状態が続くと、下記のよう
になります。
> ERROR: deadlock detected
> DETAIL: Process 8473 waits for ShareLock on transaction 2283079; blocked by process 8417.
> Process 8417 waits for ShareLock on transaction 2283137; blocked by process 8473.
どちらのトランザクションも、where 条件を含めて 同じ UPDATE 文を実行
しています。この CGI では UPDATE の前に "SET CLIENT_ENCODING TO SJIS"
しか実行していません。デッドロックは、同じ UPDATE 文が同時に実行され
ているだけでも発生するものなのでしょうか。
よろしくお願いいたします。
--
| maya <maya @ negeta.com> |
pgsql-jp メーリングリストの案内