2010-07-30 21 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

相關問題