2010年2月16日

[pgsql-jp: 40173] Re:update文のフリーズ

メーリングリスト各位

お世話になります。
酒井です。

先日ポストした内容に機種依存文字が含まれていたため、
再度編集しポストしなおさせていただきます。
大変申し訳ございませんでした。


postgres8.3.7を運用しているのですが、以下のような現象に
遭遇し助言をいただきたくポストさせていただきました。

以下のようなSQLをpgpool2(2.1)経由で複数のプロセスより大量に実行していたと
ころupdate文(下記tr2)が途中でフリーズし、その後同様のSQLを実行しても
select for update文(下記tr1)がロック待ちの状態となり滞留し続けていく状況と
なりました。

begin;
select * from tableA where id = 1;(tr1)
その他の処理
update tableA SET column = xx where id = 1;(tr2)
commit;

1.トリガとなったupdate文のSQLログを見るとbindまでは出力されていますが、
  executeのログが出力されていない状況で止まってしまっています。
  これはどのような時に発生しうるでしょうか?
  回避策をご存じの方がいらっしゃればご教授いただければと思います。

2.tr2でフリーズ後のpg_stat_activityを見るとフリーズが起こる前に実行されて

るがtr1でロック待ちのままとなっているトランザクションが多数存在していま
した。
  ただ、フリーズが起こる前は他のいくつかのトランザクションは正常終了(上記
commitまで終了)している状態です。
  このことよりpostgresは必ずしもロック要求があった順番にロック取得
  しているわけではないように思えますが理解は正しいでしょうか?


お忙しいところ申し訳ありませんが、何卒よろしくお願いいたします。

---------------------------------------
Agate Inc.
酒井 英一郎
E-Mail:sakai@xxxxx


投稿者 xml-rpc : 2010年2月16日 21:35
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/93365
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。