2010-07-30 20 views
0

我问:How to break connections TCP/IP by keepalive postgreSQL without changing anything in the register?在Windows Server 2008中,有什么办法可以打破PostgreSQL 8.4中丢失或空闲连接的TCP/IP?

而现在,我想确认:

我的系统(C#.NET,NHibernate和活动记录),与数据库的PostgreSQL 8.4和Windows服务器上运行。我需要一种方法来打破空闲或丢失的TCP/IP连接并解除阻止数据。

我不能调整OS配置,也不能重新编译PostgreSQL。如果需要,我的系统可以在Oracle 10g Express中运行!我需要知道:我可以在没有为PostgreSQL实现新修补程序的情况下中断空闲连接吗?我需要将我的数据库迁移到Oracle吗?

感谢,

回答

1

如果有办法,迫使每个新的连接,以执行在连接时查询时,你可以写一个数据库函数,动态调用“pg_terminate_backend(PID)”对于那些在某些标准的任何进程。不知道你的设置,有些可能是: - (?θ1分钟5分钟), '在交易' 和CURRENT_TIMESTAMP

  • 连接与current_query = query_start()大于一定值,从您的IP地址
  • 连接或个人用户名(如果存在),你是不是目前使用的(可能不是在连接池的环境中是一个好主意,虽然)

就个人而言,我会尝试和重构,以尽量减少任何时间量交易可能是开放的。有些地方您可能会有不必要的交易打开,导致触发问题的机会增加:

  • ORM在AutoCommit处于关闭状态下运行。
  • 当编辑屏幕读取数据时会执行锁定,因此数据在写回之前无法更新。在回写没有冲突之前进行验证可能是可以接受的。
  • 事务在非数据库任务(如FTP或电子邮件过程)之前开始,然后关闭。
  • 事务其中第一个语句是没有锁定子句的SELECT(如“FOR UPDATE”)。无论是在交易内部还是外部,这个SELECT的结果都是相同的,所以这表明交易开始得太早,可能会缩短。
  • 仅包含任何类型的语句的事务。
+0

谢谢!我也喜欢你的回答! – KaH600 2010-08-02 13:34:03

+0

嘿,马修?哥们,谢啦!你来自德克萨斯州吗? - 尼斯! ;) – KaH600 2010-08-04 13:53:43

相关问题