是否可以限制Postgres服务器上的超时?


17

我在我的应用程序(客户端)中将连接和命令超时设置为10分钟。

比我的应用程序运行一个简单的查询: SELECT pg_sleep(65)

在某些服务器上,它工作正常,但其他服务器在60秒后关闭了连接。

这可能是某种限制超时并忽略我的客户端设置的PostgreSQL服务器配置吗?


要查看当前超时时间:SHOW statement_timeout;
用户

Answers:


27

是的,有可能

在文档中提到的两个设置idle_in_transaction_session_timeout是新版本9.6x)

  • statement_timeout (整数)

    从命令从客户端到达服务器的时间开始,中止所有花费超过指定毫秒数的语句。如果log_min_error_statement设置为ERROR或更低,则还将记录超时的语句。零值(默认值)将其关闭。

    不建议在postgresql.conf中设置statement_timeout,因为这会影响所有会话。

  • idle_in_transaction_session_timeout (整数)

    用空闲时间超过指定持续时间(以毫秒为单位)的打开事务终止任何会话。这样可以释放该会话持有的所有锁,并重新使用连接插槽;它还允许清理仅对该事务可见的元组。有关更多详细信息,请参见第24.1节。

    默认值0禁用此功能。

除非您要娱乐,否则不要statement_timeout在postgresql.conf中设置它很重要。

这是它工作的一个例子

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout

配置文件中都不存在任何设置,因此我使用的是默认设置。:(还有其他想法吗?
Andrzej Gis

@gisek可以肯定,这可能是网络级别的,无论是在本地IP堆栈中还是在防火墙中。
埃文·卡罗尔

4

并非开箱即用。但是,编译忽略了您的设置的自定义服务器将非常容易。

但是更有可能的是,您的连接被不喜欢空闲连接的防火墙或网关切断了。

如果您有权访问服务器的日志文件,那应该是一个很好的线索。如果客户端说服务器意外关闭了连接,而服务器说客户端意外关闭了连接,则可能是客户端和服务器之间确实切断了连接。


它绝对不是定制的编译服务器-仅仅是apt-get中的常规内容。您能否详细说明一下防火墙和网关的引线?如何验证和修复它?
Andrzej Gis

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.