gpt4 book ai didi

windows - 如果一个进程建立了多个 PostgreSQL 连接并在没有关闭它们的情况下终止,会发生什么?

转载 作者:可可西里 更新时间:2023-11-01 11:42:27 32 4
gpt4 key购买 nike

我正在为购买的软件编写 DLL。

该软件将对某些任务执行多线程计算。

我的工作是将相关结果输出到数据库中。

但是由于软件支持有限,多线程输出数据有一定难度。

关键问题是没有关于DLL函数最后一次执行的信息。

因此,数据库连接不会被关闭。

那么请问,如果我保持连接打开并终止进程,可能会出现什么问题?

我的平台是 winserver 2008 和 PostgreSQL 10。

最佳答案

我不明白你提供的背景信息,但我可以回答这个问题:

如果 PostgreSQL 客户端进程在没有关闭数据库(和 TCP)连接的情况下终止,则为该连接提供服务的 PostgreSQL 服务器进程(“后端进程”)将不会立即意识到这一点。

当然,只要服务器尝试与客户端通信,例如要返回一些结果,TCP 会注意到伙伴已经离开并会返回错误。

然而,往往后端进程是空闲的,等待客户端发送下一个请求。在这种情况下,它永远不会注意到它的伙伴已经死了。这最终可能导致 max_connections 因死连接而耗尽。

因为这是网络中的常见问题,TCP 提供了“keepalive”功能:当连接空闲一段时间(默认为 2 小时)时,操作系统会发送一个所谓的“keepalive 数据包”,并且等待对方的回应。以短时间间隔(默认为1秒)重复发送keepalive数据包数次(默认为5次),如果没有收到响应,则连接被操作系统关闭,后端进程收到错误信息并终止。

PostgreSQL 提供 parameters您可以使用它在服务器端配置这些设置:tcp_keepalives_idletcp_keepalives_counttcp_keepalives_interval。如果您将 tcp_keepalives_idle 设置为一个较短的值,死连接将被更快地检测和删除,但会增加一些网络流量。

关于windows - 如果一个进程建立了多个 PostgreSQL 连接并在没有关闭它们的情况下终止,会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588743/

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