[pgsql-jp: 37826] Re: UPDATE が集中するとデッドロックが発生する

maya maya @ negeta.com
2006年 12月 20日 (水) 21:39:07 JST


maya です。

> 片岡さんがおっしゃっているのは、2つのクエリが別のプランを
> 選択した場合で、今回のケースでは2つのクエリがWHERE句も
> 含めて一緒とのことなので、別のプランを選択することは
> 無いように思います。

ロック順が不定なら、プランが同じでも競合しないでしょうか?

ただ私としては、「このクエリをなんとかする」ということだけ
でなく、「範囲が重なる複数行の更新が並行する」という場合に
MVCC をどうしたらよいか、という汎用的な点も考えていました。
# 単体の UPDATE 文が並行するだけでデッドロックが起こること
# が驚きだったので。


> もしまだ原因に興味がおありであれば、実行したのはどのような
> クエリで、また explain でどのようなプランが選択されたのか
> おしえていただけないでしょうか。

以下のようになります。

Query:
update table1 set filed1=field2 where field3=13

Explain:
Bitmap Heap Scan on table1  (cost=22.24..3367.41 rows=1497 width=54)
  Recheck Cond: (field3 = 13)
  ->  Bitmap Index Scan on table1_index1  (cost=0.00..22.24 rows=1497 width=0)
        Index Cond: (field3 = 13)


-- 
| maya <maya @ negeta.com> |



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