[pgsql-jp: 40594] Re: トランザクションの結果反映遅延についてご質問
toshihideka4316 @ zenrin.co.jp
toshihideka4316 @ zenrin.co.jp
2010年 12月 7日 (火) 11:59:35 JST
お世話になります、片山です。
>サーバー側でログを取って調べられた方が事情がはっきりするのではないでしょう
か?
遅くなりましたが、本件につきましてサーバログを収集しました。
サーババージョン8.2.14ではログのメッセージ部分が文字化けして読めませんでし
た。
そこでサーババージョン8.4.2で試したところ、現象が再現しましたので8.4.2のログ
を収集しました。
(クライアントは8.2.14のままです)
ログは以下の通りです。
↓############
LOG: 接続を受け付けました: ホスト=XX.XX.XX.XX port=3073
LOG: 接続の認証を行いました: ユーザ=testUser、データベース=TESTDB
STATEMENT: BEGIN;update TEST set col = 'テスト2' where TESTCODE = 21433
LOG: クライアントにデータを送信できませんでした: 接続が相手からリセットされ
ました
STATEMENT: select * from TEST
LOG: クライアントにデータを送信できませんでした: パイプが切断されました
STATEMENT: select * from TEST
WARNING: 進行中のトランザクションがありません
WARNING: 進行中のトランザクションがありません
↑############
張り付いてログを監視したこところ、処理の流れとログの流れは以下の通りでした。
括弧内が処理です。
(接続)
LOG: 接続を受け付けました: ホスト=XX.XX.XX.XX port=3073
LOG: 接続の認証を行いました: ユーザ=testUser、データベース=TESTDB
(トランザクション開始)
(Update文発行)
(select文にてout of memory)
(コミット)
(接続の切断)
STATEMENT: BEGIN;update TEST set col = 'テスト2' where TESTCODE = 21433
LOG: クライアントにデータを送信できませんでした: 接続が相手からリセットされ
ました
STATEMENT: select * from TEST
LOG: クライアントにデータを送信できませんでした: パイプが切断されました
STATEMENT: select * from TEST
(接続を切断してから1分後くらい)
WARNING: 進行中のトランザクションがありません
WARNING: 進行中のトランザクションがありません
################################################
動作再現は以下のフリーソフトで行っています。
↓黒猫 SQL Studio
<http://kuronekosoft.ewinds.net/sqlstudio.aspx>
■環境
PostgreSQL ver8.2.14(サーバ、クライアント共に)、ODBC接続(ODBCドライバ ver8.
2.14)、
DeclareFetch=0、クライアントカーソル使用
⇒サーバver8.4.2でも現象が再現した
■トランザクションの結果反映に遅延が生じるパターン
1)接続、トランザクション開始
2)Update文を発行してレコードを変更
3)select文にて大容量のデータを取得した結果「out of memory」となった
4)コミット
5)接続の切断
6)切断直後に別接続でSelect文を発行⇒更新内容が反映されていない
7)接続を切断してから約1分後更新内容が反映された⇒トランザクションの結果が
遅延して反映されている
⇒5)にてコミット後に接続を切断しない場合、コミットを行ってから20分たってもト
ランザクションの結果が反映されない
以上よろしくお願いいたします。
pgsql-jp メーリングリストの案内