我搜索一种方法来控制PGSQL(9.0(客户端(Windows(的会话超时。
会话何时结束?他们死后发生了什么。
如何强制会话终止?(例如,在一些错误的长查询中,它被"锁定"了,我想强制服务器释放资源(。
谢谢:dd
我扩展到理解它:数据库需要知道哪个会话已终止。死会话必须释放,因为它只容纳资源,如果这个操作没有完成,我们应该得到很多锁,否则我们可能会失去可用的连接(达到最大值(。
其他数据库(FireBird、EDB(为其定义超时参数。
当它到达时,会话设置为已终止,用户连接中止。
为了避免精疲力竭,你需要定期做一些事情,延长时间。
有三种方法可以达到超时:1.(客户端程序挂起、冻结或关闭。2.(网络连接断开3.(客户端发送一些很长的查询/存储过程,但没有完成。
如果超时未由服务器处理,则可能有人的事务、锁定等仍然存在X小时,并且您只需要一种方法来删除它:重新启动数据库服务器服务。
其他数据库处理死会话,因为它们不再与服务器交互,所以客户端出现了一些错误,需要重新启动客户端软件。
一些数据库支持返回到"非活动"但"未死亡"的会话,并且它们可以继续工作。
因此,在这篇序言中,我再次提出我的问题:
- 如何在pgsql下控制客户端的会话超时?系统变量、SQL参数等
- 我该如何延长这段时间
- 如果一个长查询耗尽了周期,会发生什么
- 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但这只会终止语句,而不会终止连接。