我遇到的问题是我的 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 服务。每 10 秒就有 2 台“客户端”机器使用此 Web 服务。
从客户端应用程序中,我正在初始化 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 个连接(当没有数据库活动发生时为空闲)。我检查了 postgres 默认设置,“max_connections”设置为 100。
我真的很难解决这个问题,任何帮助将不胜感激!
谢谢!