[pgsql-jp: 40546] Re: トランザクションの結果反映遅延についてご質問
Suzuki Hironobu
hironobu @ interdb.jp
2010年 11月 18日 (木) 17:28:01 JST
toshihideka4316 @ zenrin.co.jp さんは書きました:
> TO:鈴木さん
>
> お世話になります、片山です。
>
>
>> APは単独で存在して直接PostgreSQLに接続しているのでしょうか?
>> それともWEBサーバなど、APとDBの間に接続を管理する層が存在するのでしょうか?
>>
>> もしくはAP自体になんらかの接続管理層が存在しているでしょうか?
>>
>>
>
> APとDBは直接接続しています。
> 独自に作成したAPのみでなく、フリーソフトの黒猫SQL studioでも再現します。
> ↓
> 黒猫SQLのページ
> <http://kuronekosoft.ewinds.net/sqlstudio.aspx>
>
>
いずれにせよPostgreSQLが主因で"結果反映遅延"という現象は発生しないと思い
ますので、
問題発生箇所の切り分けが必要ですね。
PostgreSQLのログは取っているでしょうか。debugレベルでログを取って、
ODBCやアプリがユーザ側に見せている挙動(切断した,コミットしたと報告された
時刻、
OutOfMemory!など)と、
PostgreSQLに見せている挙動(実は切断されてない!、実際にコミットした時刻な
ど)の
違いを地道にたどれば、なんらかの食い違いが発見できるのではないでしょうか。
--
あと、手順についてですが、
> ■トランザクションの結果反映に遅延が生じるパターン
> 処理前レコードのフィールドの値を「テスト」とすると
> 1)接続、トランザクション開始
> 2)Update文を発行してレコードを変更(「テスト」⇒「テスト2」)
> 3)select文にて大容量のデータを取得した結果「out of memory」となった
> 4)コミット
> 5)接続の切断
> 6)切断直後に別接続でSelect文を発行⇒update、コミットされたが結果レコード
> は「テスト」(更新内容が反映されていない)
> 7)約1分後のSelect文で更新内容が反映された⇒結果レコード「テスト2」⇒トラ
> ンザクションの結果が遅延して反映されている
> #5)にて接続を切断しない場合、20分後のselect文でもトランザクションの結果が反
> 映されない
> (selectしても結果は「テスト」のまま)
これらすべて(6,7の再接続後の確認含む)、APから行っているのでしょうか?
それともAPとは違う、例えばpsqlで別ターミナルから直接確認しているのでしょ
うか?
もしもAPだけで接続、確認を行っているのであれば、
別途psqlで反映状況もモニタリングしてみることをお薦めします。
# 確認はSELECTで1レコード程度みるだけにしてください。
#ここでOutOfmemory起こしては元も子もないので。
pgsql-jp メーリングリストの案内