2009-08-06 33 views
2

我處於一種情況,我有很多「交易中空閒」的連接。我 發現他們自己。我可以殺死他們,但是這並不能阻止他們再次發生 。事實上,它經常發生。有沒有辦法獲得之前作爲PostgreSQL中給定事務的一部分執行的SQL語句列表?

有沒有辦法獲得以前的 作爲給定事務的一部分執行的SQL語句列表?

如果我能得到那個,那麼弄清 行爲異常的客戶端將會變得非常容易。

回答

2

pgsql-hackers郵件列表上目前正在進行一些工作,以標題「顯示事務中閒置的先前查詢字符串」爲標題添加該功能。看起來要去的地方是,pg_stat_activity會有一個名爲「last_query」的新列,其中包含您想要的信息。

直到完成並且可能在下一個發行版中可用,來自depesz的建議可能與您將要到達的地方一樣好 - 除非您希望在它們逐漸流出時抓取早期修補程序來處理此功能。

2

基本上 - 你必須打開所有的語句記錄,隨着時間的執行。實現它的最好方法是使用值爲0的log_min_duration_statement,並使用log_line_prefix,這樣它將包含匹配來自相同後端的行所需的信息。

我一般使用log_line_prefix ='%m%u%d%p%r'。

之後,您可以編寫一些工具來幫助您捕捉閒置交易,也可以使用mine

+0

這有很大的性能影響,並且需要隨時進行完整的日誌記錄。如果有一個可以使用事務ID調用的函數或系統視圖,會更容易。 – 2009-08-06 17:55:20

+0

從來沒有注意到這個命中。 – 2009-08-06 19:38:54

相關問題