2010年12月13日

[pgsql-jp: 40617] Re:トランザクションの結果反映遅延についてご質問

お世話になります、片山です。

ODBCドライバの9.0.02.02に向けてのテスト用ドライバですが、
PostgreSQLサーバver8.4.2ではトランザクションの反映遅延が発生しなくなりまし
た。
しかし、PostgreSQLサーバver8.2.14ではトランザクションの反映遅延が発生すること
がわかりました。
(クライアントは8.2.14のままです)


サーバのログは以下の通りです。処理の流れを()内に書いています。

server8.2.14 client8.2.14 odbc9.0.02.02⇒コミット後、接続を切断して数分後にト
ランザクションの更新が反映される
↓############
(接続)
2010-12-13 14:29:01 JST LOG: connection received: host=srv port=4171
2010-12-13 14:29:01 JST LOG: connection authorized: user=testuser
database=TEST
(トランザクション開始)
(update文発行)
(out of memoryが発生するSQL文発行)
(out of memory発生)
(コミット)
(接続の切断)
2010-12-13 14:38:04 JST LOG: could not send data to client: 接続が相手からリ
セットされました
2010-12-13 14:38:04 JST LOG: could not send data to client: パイプが切断され
ました
(切断から約1分後)↓
2010-12-13 14:39:01 JST WARNING: there is no transaction in progress
2010-12-13 14:39:01 JST WARNING: there is no transaction in progress
2010-12-13 14:39:01 JST LOG: disconnection: session time: 0:09:59.984
user=testuser database=TEST host=srv port=4171
(トランザクションの更新が反映される)
↑############

server8.4.2 client8.2.14 odbc9.0.02.02⇒コミット後、すぐにトランザクションの
更新が反映される
↓############
(接続)
2010-12-13 14:43:16 JST:10274LOG: 接続を受け付けました: ホスト=srv port=4609
2010-12-13 14:43:16 JST:10274LOG: 接続の認証を行いました: ユーザ=testuser
、データベース=TEST
(トランザクション開始)
(update文発行)
(out of memoryが発生するSQL文発行)
(out of memory発生)
(コミット)⇒すぐにトランザクションの更新が反映される
(接続の切断)
↑############

################################################
動作再現は以下のフリーソフトで行っています。
↓黒猫 SQL Studio
< http://kuronekosoft.ewinds.net/sqlstudio.aspx>;

■トランザクションの結果反映に遅延が生じるパターン(server8.2.14 client8.2.14
odbc9.0.02.02)
 1)接続、トランザクション開始
 2)Update文を発行してレコードを変更
 3)select文にて大容量のデータを取得した結果「out of memory」となった
 4)コミット
 5)接続の切断
 6)切断直後に別接続でSelect文を発行⇒更新内容が反映されていない
 7)接続を切断してから約1分後更新内容が反映された⇒トランザクションの結果が
遅延して反映されている
⇒5)にてコミット後に接続を切断しない場合、コミットを行ってから20分たってもト
ランザクションの結果が反映されない

以上よろしくお願いいたします。


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




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