PostgreSQL:会话超时



我搜索一种方法来控制PGSQL(9.0(客户端(Windows(的会话超时。

会话何时结束?他们死后发生了什么。

如何强制会话终止?(例如,在一些错误的长查询中,它被"锁定"了,我想强制服务器释放资源(。

谢谢:dd


我扩展到理解它:数据库需要知道哪个会话已终止。死会话必须释放,因为它只容纳资源,如果这个操作没有完成,我们应该得到很多锁,否则我们可能会失去可用的连接(达到最大值(。

其他数据库(FireBird、EDB(为其定义超时参数。

当它到达时,会话设置为已终止,用户连接中止。

为了避免精疲力竭,你需要定期做一些事情,延长时间。

有三种方法可以达到超时:1.(客户端程序挂起、冻结或关闭。2.(网络连接断开3.(客户端发送一些很长的查询/存储过程,但没有完成。

如果超时未由服务器处理,则可能有人的事务、锁定等仍然存在X小时,并且您只需要一种方法来删除它:重新启动数据库服务器服务。

其他数据库处理死会话,因为它们不再与服务器交互,所以客户端出现了一些错误,需要重新启动客户端软件。

一些数据库支持返回到"非活动"但"未死亡"的会话,并且它们可以继续工作。

因此,在这篇序言中,我再次提出我的问题:

  1. 如何在pgsql下控制客户端的会话超时?系统变量、SQL参数等
  2. 我该如何延长这段时间
  3. 如果一个长查询耗尽了周期,会发生什么
  4. pgsql服务器何时释放客户端所拥有的资源

谢谢:dd

我不理解您问题的第一部分,但要终止正在运行的会话,您可以使用pg_terminate_backend()

要终止正在运行的会话的查询,请使用pg_cancel_query()

这两种功能都在手册中进行了说明:

http://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-管理员签名表

有三种方法可以达到超时:1.(客户端程序挂起、冻结或关闭。2.(网络连接断开3.(客户端发送了一些很长的查询/存储过程,但没有完成。

对于2,tcp_keepalives_*设置可能很有用:http://www.postgresql.org/docs/8.4/static/runtime-config-connection.html

对于3,有一个statement_timeout设置:http://www.postgresql.org/docs/8.4/static/runtime-config-client.html但这只会终止语句,而不会终止连接。

相关内容

  • 没有找到相关文章

最新更新