【发布时间】:2010-01-30 04:34:29
【问题描述】:
Postgresql 有 3 个 keepalive 设置用于管理断开的连接(在 postgresql.conf 中):
tcp_keepalives_count
tcp_keepalives_idle
tcp_keepalives_interval
默认为 0。
如果客户端失去网络连接或进入睡眠状态,我希望 Postgresql 在一段时间后断开客户端连接。
我目前正在使用这些值:
tcp_keepalives_count = 1
tcp_keepalives_idle = 60
tcp_keepalives_interval = 60
我在 Mac OS X 上运行 PostgreSQL 8.4,但它似乎没有任何效果。我的测试是锁定表中的一行(使用 SELECT FOR UPDATE)并断开工作站与网络的连接。但在 Postgresql 中,我仍然看到那个工作站持有锁。
我希望在时间过去后(在这种情况下为 60 秒),连接将被终止并被释放。
要么我做错了什么,要么我完全误解了它应该如何工作。
有什么建议吗?
【问题讨论】:
-
我确实让服务器通宵运行,当我在上午签到时,锁被释放了。我不确切知道连接终止需要多长时间,但显然它没有查看我的新设置(并且,是的,我已经重新启动了服务器)。
-
Linux 用户请使用
sysctl net.ipv4.tcp_keepalive_time
标签: postgresql locking keep-alive