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

maya maya @ negeta.com
2006年 12月 19日 (火) 09:25:02 JST


永田です。

YuGo様
> 行レベルロックは明示的にロックしなくても発生する可能性があります、と書い
> てありますね。
> 
> できるかどうか知りませんが、updateをorder by で順序をつけてやったらどう
> ですか。

内部的に行レベルロックが使用されていて、ロックされる順番が
一定ではないかもしれないのですね。
ご提案頂いた order by は使用できませんでした。


水野様
> IndexとFlagしかないテーブルがあったとして、
>  Update Flag = true WHERE 30<=Index and Index<= 40;
>  Update Flag = true WHERE 35<=Index and Index<= 45;
> という2つのSQLを同時実行させるとIndexが35から40のレコードは
> 2つのトランザクションで奪い合いになるのではないでしょうか

そのために内部的にロックがかかるのだと思いますが、いままで
短時間に集中することがなかったので気づかなかったようです。


2 行以上のレコードが対象となる update が並行して実行される
環境では、テーブルレベルのロックをかけないと行ロックの取り
合いになってデッドロックが起きる可能性がある、と理解して
間違いないでしょうか。


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



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