2012-06-29 28 views
2

我正在運行日誌(log_min_duration_statement = 200)來分析PostgreSQL 9.0中的一些緩慢查詢,但最糟糕的查詢語句沒有被記錄。有什麼方法可以找出查詢的實際內容嗎?爲什麼長時間運行的查詢在postgresql日誌中是空白的?

(一些值與***爲了簡潔和隱私取代。)

2012-06-29 02:10:39 UTC LOG: duration: 266.658 ms statement: SELECT *** FROM "oauth_accesstoken" WHERE "oauth_accesstoken"."token" = E'***' 
2012-06-29 02:10:40 UTC LOG: duration: 1797.400 ms statement: 
2012-06-29 02:10:49 UTC LOG: duration: 1670.132 ms statement: 
2012-06-29 02:10:50 UTC LOG: duration: 354.336 ms statement: SELECT *** FROM *** 
... 
+2

哦,親愛的,真是個傻瓜。事實證明,因爲我正在用tail -f path |來關注日誌grep'duration。+ ms''任何以換行符開始的語句都不可見。 * Facepalm * – Jake

+1

您可以回答自己的問題並接受該答案。這樣其他人就會知道這個問題已經解決了。 –

回答

0

事實證明,因爲我用tail -f path | grep 'duration .+ ms'來關注日誌,任何以換行符開頭的語句都不可見。我主要是這樣做來突出顯示持續時間字符串。

1

有在postgresql.conf一些日誌文件目的地選項,如下所示。我建議使用csvlog

log_destination = 'csvlog' 
logging_collector = on 
log_directory = '/var/applog/pg_log/1922/' 
log_rotation_age = 1d 
log_rotation_size = 10MB 
log_statement = 'ddl'     # none, ddl, mod, all 
log_min_duration_statement = 200 

做出任何更改後,您需要重新加載postgresql.conf文件。