我可以在postgresql日誌中看到某些簡單的查詢(無連接並僅使用匹配使用索引的條件)需要1到3秒的時間才能執行。我記錄的查詢花費的時間超過一秒鐘,因此有類似的查詢在一秒鐘內執行,而且不會被報告。PostgreSQL性能問題
當我使用EXPLAIN ANALYZE嘗試相同的查詢時,需要幾毫秒。
該表包含大約800萬條記錄並被廣泛地寫入和查詢。 我已經啓用了自動真空,甚至最近(幾個小時前)在該表上運行了一個VACUUM ANALYZE。
示例查詢日誌條目: Dec 30 10:14:57 db01 postgres [7400]:[20-1] LOG:duration:3857.322 ms語句:SELECT * FROM「responses」WHERE(「responses」.contest_id = 17469)AND(user_id不是 Dec 30 10:14:57 db01 postgres [7400]:[20-2] null)ORDER BY updated_on desc LIMIT 5
contest_id和user_id被編入索引。 updated_on未被編入索引。如果我將其編入索引,則查詢計劃程序將忽略contest_id索引並使用updated_on,而這會進一步降低查詢速度。上述查詢中沒有LIMIT的最大條目數不會超過1000.
任何幫助將不勝感激。
如果問題是#1(很多其他SELECT ...),我可以做些什麼來提高性能? 我剛剛運行了解釋分析,耗時約4秒。當我用不同的ID再次運行它時,花了幾毫秒。 因此我懷疑它與從緩存中取出數據有關。 – 2008-12-30 05:44:12
@Nikhil:運行它還不夠,你還必須閱讀它。如果您希望其他人幫助您瞭解您的績效問題,我們也必須閱讀它。 – Dustin 2008-12-30 06:34:48