[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 メーリングリストの案内