2009-10-06 78 views
43

是否有可能獲得在postgres中查詢的歷史記錄?是否有可能獲得每個查詢花費的時間?我目前正試圖在正在處理的應用程序中識別緩慢的查詢。是否有可能獲得在postgres中查詢的歷史

我使用的Postgres 8.3.5

+3

我回滾標籤更改,因爲這不是一個特定於SQL的問題。 – 2009-10-06 04:07:05

+1

查看http://stackoverflow.com/questions/722221/how-to-log-postgres-sql-queries – 2014-07-08 20:16:05

回答

52

有在數據庫本身沒有歷史,如果你使用psql裏,你可以使用「\ S」看到你的命令歷史記錄那裏。

您可以通過在postgresql.conf文件中設置log_statement來將日後的查詢或其他類型的操作獲取到日誌文件中。您可能想要的是log_min_duration_statement,如果將其設置爲0,則會將所有查詢及其持續時間記錄在日誌中。一旦您的應用程序啓用後,這可能會有所幫助,如果將其設置爲更高的值,則只會看到有助於優化的長時間運行查詢(您可以對查找的查詢運行EXPLAIN ANALYZE來找出原因'慢')。

在這個領域另一個需要了解的方面是,如果你運行psql並告訴它「\ timing」,它將顯示在這之後每個語句需要多長時間。所以,如果你有一個SQL文件看起來像這樣:

\timing 
select 1; 

您可以用正確的標誌運行它,看看交錯帶過了多長時間每條語句。以下是如何和什麼樣的結果是這樣的:

$ psql -ef test.sql 
Timing is on. 
select 1; 
?column? 
---------- 
     1 
(1 row) 

Time: 1.196 ms 

這是方便,因爲你不需要是數據庫超級用戶才能使用它,不像更改配置文件,它是更容易,如果您正在開發新的使用代碼並且想要測試它。

2

如果你想識別慢查詢,那麼方法是使用log_min_duration_statement設置(在postgresql.conf中或使用ALTER DATABASE SET設置每個數據庫)。

當您記錄數據時,您可以使用grep或一些專門的工具 - 如pgFouine或我自己的analyzer--它缺少適當的文檔,但儘管如此 - 運行得非常好。

0

僅供參考使用UINavicat那些:

必須設置你的喜好,利用文件爲where存儲歷史。

如果這是空白,你的Navicat將會是空白的。

enter image description here

PS:我沒有從屬關係或關聯的Navicat或它的分支機構。只是想幫忙。

相關問題