Windows-Server-2008-R2
Windows 上的 Postgresql:客戶端網路故障後客戶端連接仍保留在伺服器上
今天早上,我們的一位客戶遇到了幾個工作站的網路故障。令我驚訝的是,連接(和相關的程序)在數據庫伺服器上仍然存活了幾分鐘。不幸的是,您的客戶端應用程序設計得不是很好,並且同時打開了幾個數據庫連接。這導致伺服器上的連接總數翻倍,而記憶體壓力已經很高。
它是由設計的嗎?如果客戶端連接消失,是否有伺服器參數強制相關程序關閉?這種行為很容易重現,但在連接到伺服器時拔掉客戶端工作站上的網路電纜。
我不確定是什麼最終觸發了這些連接自動關閉,但這需要太多時間。
網路連接完全是虛擬的東西。它們由網路命令建立,由網路命令結束,並通過定期發送數據包來保持活動狀態。在任何時候,都不會存在允許伺服器立即檢測到連接已失去的物理連接。它只能決定等待x秒必須足以宣布連接死亡。
所以,是的,這個等待期在很大程度上是設計使然,但是您可以使用
tcp_keepalives_*
PostgreSQL 伺服器配置中的選項微調超時。