gpt4 book ai didi

postgresql - 如何在 Postgresql 中使用 tcp_keepalives 设置?

转载 作者:行者123 更新时间:2023-11-29 11:14:53 24 4
gpt4 key购买 nike

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 = 60000
net.inet.tcp.keepintvl = 10000
操作系统将在失去连接后最多 140 秒(60 秒空闲 + 10 秒间隔内 8 个保持事件数据包)断开连接。

关于postgresql - 如何在 Postgresql 中使用 tcp_keepalives 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2166872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com