[pgsql-jp: 41035] Re: トランザクション中のネットワーク切断

MauMau maumau307 @ gmail.com
2012年 1月 27日 (金) 20:44:06 JST


水口さん


はじめまして、MauMauといいます。

一定時間アイドル状態のトランザクションを自動的に終了させる機能は、
残念ながら、今のPostgreSQLにはありません。
ただ、やるべきこと(TODO)として、以前から次のページに列挙されています。
議論はされているようですが、実装が難しいようです。
議論を読んでいないので難しい理由はわかりませんが、
トランザクションを強制終了しても接続を維持しようとするからではないかと思います。 

接続も強制終了させてしまえば、あまり難しくないと思うのですが・・・

http://wiki.postgresql.org/wiki/Todo
[抜粋]
Allow administrators to cancel multi-statement idle transactions
This allows locks to be released, but it is complex to report the 
cancellation back to the client.

Cancelling idle in transaction state
Re: Cancelling idle in transaction state

Add idle_in_transaction_timeout GUC so locks are not held for long periods 
of time

代わりの手段として、次のページに記されているtcp_keepalive_xxx
という3つのパラメタが使えるかもしれません。

http://www.postgresql.jp/document/pg910doc/html/runtime-config-connection.html

これは、サーバがクライアントとのTCP/IP接続を監視するためのものです。
TCP/IP接続がtcp_keepalives_interval秒間アイドルだったら、
サーバはクライアントに対し、
tcp_keepalives_interval秒間隔で最大tcp_keepalives_count回数だけ
「あなたは生きてますか?」という確認メッセージを送ります。
最大回数だけ送ってもクライアントから返事がなければ、
その接続を切断します。

もしよければ、おためしいただいた結果を共有いただければ幸いです。


以上です。

----- Original Message ----- 
From: "水口(ヴァンガードネットワークス)" <mizuguchi @ vanguard.ne.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Friday, January 27, 2012 7:26 PM
Subject: [pgsql-jp: 41034]トランザクション中のネットワーク切断


> 初めまして。水口と申します
>
> クラザバ系のシステムで
> クライアントPGの処理で
> あるテーブルをSELECT FOR UPDATE して更新、コミットする処理がありますが
>
> SELECT FRO UPDATE後に障害でネットワークが切断されると
> そのテーブルがロックしたままとなり
> 他のクライアントの同じ処理でSELECT FOR UPDATE できなくなってしまいます
> この様に浮いてしまったトランザクションは自動的に解放されないのでしょうか?
>
> 分かる方いるでしょうか?
>
> 環境
> SERVER:WINDOWS7-32Bit postgresql8.3.12
> CLIENT:WINDOWS7-32Bit 
> Vb.net
> 接続には、NPGSQLを利用しています。
>
>
>



pgsql-jp メーリングリストの案内