微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Postgresql中使用tcp_keepalives设置?

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秒),连接将被终止并且锁将被释放.

要么我做错了,要么我完全误解了这应该是怎么回事.

任何建议?

我认为您需要配置您的操作系统.目前尚未广泛支持通过程序更改keepalive参数.这应该可以帮到你:
Using TCP keepalive to Detect Network Errors

你的参数选择也很糟糕.如果tcp_keepalives_count = 1工作,那么即使一个丢失的keepalive数据包也会丢失你的连接.并且单个数据包经常丢失.我在MacOSX / FreeBSD上的/etc/sysctl.conf中使用以下内容:net.inet.tcp.keepidle = 60000net.inet.tcp.keepintvl = 10000在断开连接后,操作系统将最多丢弃连接140秒(空闲的8个keepalive数据包,间隔为10秒).

原文地址:https://www.jb51.cc/postgresql/192828.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐