2010年2月15日

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

メーリングリスト各位

はじめまして。
酒井と申します。

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

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

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

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

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


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

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


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




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