私が抱えている問題は、アプリケーションの実行後に 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 に設定されていました。
私はこの問題に本当に苦労しています。助けていただければ幸いです。
ありがとう!