2013-06-23 28 views
2

我想測量postgres執行我的查詢所花費的總時間,不包括啓動成本。早些時候我使用\時間,但現在我發現\時間包括啓動成本。在postgres中測量排除啓動成本的查詢執行時間

我也嘗試過:「解釋分析」,其中我發現實際時間以特定格式指定,如:實際時間= 12.04..12.09 那麼,這是否意味着執行postgres查詢所需的時間不包括開始時間爲0.05。如果沒有,那麼是否有辦法排除啓動成本並衡量查詢執行時間?

+1

「啓動成本」是什麼意思?你想要什麼離開測量? – 2013-06-23 22:29:20

+0

@depesz因爲postgres通常在內存中保留一些類似於模式的東西,所以我想排除這個代價。這就是我的意思是啓動成本 –

+0

執行兩次?用不同的參數執行兩次(準備之後)? – wildplasser

回答

3

你想要的其實是相當不明確的。

「啓動成本」可能意味着:

  • 網絡連接的開銷和建立新連接的後端啓動成本。避免重複使用同一個會話。

  • 發送查詢並獲取結果的網絡往返時間。通過使用explain analyzeauto_explain模塊通過log_statement_min_duration = 0或(定時開銷)測量定時服務器端來避免。

  • 查詢計劃時間。通過PREPARE避免查詢,然後只計時後續EXECUTE

  • 鎖定採集時間。目前沒有任何方法可以排除這一點。

注意,使用EXPLAIN ANALYZE你的目的可能不是很理想:它拋出的查詢結果中取出,並增加了,因爲具體的時序它自身的成本。我會設置log_statement_min_duration = 0,適當設置client_min_messages,並從日誌輸出中捕獲時間。

所以,它聽起來就像你想PREPARE查詢然後EXPLAIN ANALYZE EXECUTE或只是EXECUTElog_statement_min_duration設置爲0

+0

我的啓動成本是查詢計劃時間。我如何準備查詢......並且只有後續的執行時間。實際上,如果我只計算隨後的執行時間,那麼我將得到更快的結果,因爲結果會被緩存。我不想要。 –

+0

@EmmeWatson呃......我說過要怎麼做,而且你甚至用了正確的單詞。 'PREPARE'查詢,然後計時'EXECUTE'。對於緩存效果來說,這很難,而不是你最初問到的問題。閱讀PostgreSQL基準測試 - 如何適當擴展基準測試,如何刪除/清除緩存等。搜索。 –

0

對於探索計劃成本和分別執行成本,你需要幾個postgres.conf參數進行設置:

log_planner_stats = on 
log_executor_stats = on 

並探索您的日誌文件。

更新: 1.與執行找到你的配置文件的位置:

SHOW config_file; 

2.設置參數。不要忘記刪除註釋符號'#'。 3.重新啓動postgresql服務 4.執行您的查詢 5.探索您的日誌文件。

+0

由於我是一個完整的新手,所以我沒有得到如何...你可以給一些初步的指導..我會盡力弄清楚 –