2016-12-07 17 views
0

セッションレベルのアドバイザリロックを実装するバックエンドアプリケーションがあります。しかし、クライアントが突然接続を失った場合(例えば、接続中にリブートを強制するなど)、アドバイザリ・ロックはそこにとどまり、消えません。PostgreSQLのアドバイザリロックは、ユーザが切断した後もそのまま残ります。

接続が切断された後も常にロックが有効期限切れになる方法はありますか?

ありがとうございました。

+1

'同じ目的のためにテーブルに格納されたフラグを使用することができますが、アドバイザリロックは速く、テーブルの膨らみを防ぎ、セッションの最後にサーバーによって自動的にクリーンアップされます.' https:// www。 postgresql.org/docs/9.1/static/explicit-locking.html接続がタイムアウトしている限り、正常です。 – freakish

答えて

1

バックエンドプロセスがまだ存在するため、ロックが残っていると仮定します。

サーバーがクライアントに接続しようとしない限り、オペレーティングシステムがクライアントソケットが存在しなくなったことを検出するまでに時間がかかることがあります。これは、PostgreSQLバックエンドが終了するときです。

PostgreSQLパラメータtcp_keepalives_idleを小さな値に設定すると、デッド接続が検出されるまでの時間を短縮できます。

関連する問題