1

私が抱えている問題は、アプリケーションの実行後に PostgreSQL のインスタンスが頻繁に停止することです。PostgreSQL Windows サービスを再起動すると、再び機能するようになりますが、postgres インスタンスが機能しなくなった原因を知る必要があります。

postgres のログを見ると、(とりわけ) 次のエラーが発生しています。

"FATAL:  could not reattach to shared memory (key=348, addr=01E70000): 487
2012-04-25 11:05:24 PDT WARNING:  worker took too long to start; cancelled"

これは私が取り組んでいるシナリオです。私は、PostgreSQL (8.3) データベースで何らかの処理を行う WCF サービスを使用しています。この Web サービスを 10 秒ごとに消費する 2 つの「クライアント」マシンがあります。

クライアント アプリケーションから、次のような Web サービスを初期化しています

RemoteServiceClient service = new RemoteServiceClient();

Web サービス側では、初期化のたびに postgres 接続の新しいインスタンスを作成します。ここでは、接続を開いているのではなく、初期化のみを行っています。

public class Service : IService
{
    NpgsqlConnection connection = null;

    /// <summary>
    /// Default constructor for remote service
    /// </summary>
    public Service()
    {
        connection = new NpgsqlConnection(Utils.DBConnectionString);
    }
}

Web サービスの関数内で、必要に応じて接続を開いたり閉じたりします。このようにして、開いた接続をオンザフライで残しません。マシンが Web サービスを使用している間の一般的なアクティビティを見ると、約 3 ~ 4 の接続 (DB アクティビティが発生していないときの IDLE) のみに気付きます。postgres のデフォルト設定を確認したところ、「max_connections」が 100 に設定されていました。

私はこの問題に本当に苦労しています。助けていただければ幸いです。

ありがとう!

4

1 に答える 1

3

バージョン 8.3.8 (リリース日: 2009-09-09) には、この問題に対するバグ修正があります。

Windows 共有メモリ割り当てコードを修正しました。 (Tsutomu Yamada, Magnus)

このバグにより、頻繁に報告される「共有メモリに再接続できませんでした」というエラー メッセージが表示されました。

を使用してバージョンを確認してくださいSELECT version();

于 2012-04-26T05:59:23.503 に答える