2011-06-30 155 views
0

我搜索一種方法來控制PGSQL(9.0)客戶端(Windows)的會話超時。PostgreSQL:會話超時?

當會話死亡?死後會發生什麼。

我該如何強制一個會話死亡? (例如,它被「鎖定」,在一些錯誤的長查詢中,我想強制服務器釋放資源)。

感謝它: DD


擴展該理解它: 的數據庫需要知道哪些會話已經死了。 死鎖會話必須被釋放,因爲它只佔用資源,如果這個操作沒有完成,我們應該得到很多鎖,或者我們可以超出可用連接(達到最大值)。

其他數據庫(FireBird,EDB)爲其定義TimeOut參數。

當它到達時,會話設置爲死亡,並且用戶連接中止。

爲了避免用盡,您需要定期做一些事情,以延長期限。

Theres是3種方法來達到超時: 1)客戶端程序掛起,或凍結,或關閉。 2.)網絡連接中斷 3.)客戶端發送一些很長的查詢/存儲過程沒有完成。

如果不是由服務器處理超時,可能有人的事務,鎖,等還活着的X小時,你必須只有一個辦法將其刪除:重新啓動數據庫服務器服務。

其他數據庫處理死的會話,因爲他們沒有更多的交互到服務器,所以客戶端出現了一些錯誤,它需要重新啓動客戶端軟件。

有些數據庫支持返回到「不活動」但「未死」的會話,他們可以繼續工作。

因此,與此前言我再問我的問題:

  1. 我怎麼能控制下的pgsql客戶端的會話超時?系統變量,SQL參數等?
  2. 我該如何延長這段時間?
  3. 如果長時間查詢耗盡期間會發生什麼?
  4. pgsql服務器什麼時候釋放客戶端持有的資源?

感謝: DD

+0

我不知道Postgres中的這些設置。對我來說,這聽起來像你最好修復應用程序中的連接處理。我能想到的唯一「解決方案」是使用位於應用程序和數據庫之間的連接池(如pg-pool或pgBouncer)。由於它充當代理,應用程序不會意識到這一點。 –

回答