我想測量postgres執行我的查詢所花費的總時間,不包括啓動成本。早些時候我使用\時間,但現在我發現\時間包括啓動成本。在postgres中測量排除啓動成本的查詢執行時間
我也嘗試過:「解釋分析」,其中我發現實際時間以特定格式指定,如:實際時間= 12.04..12.09 那麼,這是否意味着執行postgres查詢所需的時間不包括開始時間爲0.05。如果沒有,那麼是否有辦法排除啓動成本並衡量查詢執行時間?
我想測量postgres執行我的查詢所花費的總時間,不包括啓動成本。早些時候我使用\時間,但現在我發現\時間包括啓動成本。在postgres中測量排除啓動成本的查詢執行時間
我也嘗試過:「解釋分析」,其中我發現實際時間以特定格式指定,如:實際時間= 12.04..12.09 那麼,這是否意味着執行postgres查詢所需的時間不包括開始時間爲0.05。如果沒有,那麼是否有辦法排除啓動成本並衡量查詢執行時間?
你想要的其實是相當不明確的。
「啓動成本」可能意味着:
網絡連接的開銷和建立新連接的後端啓動成本。避免重複使用同一個會話。
發送查詢並獲取結果的網絡往返時間。通過使用explain analyze
或auto_explain
模塊通過log_statement_min_duration = 0
或(定時開銷)測量定時服務器端來避免。
查詢計劃時間。通過PREPARE
避免查詢,然後只計時後續EXECUTE
。
鎖定採集時間。目前沒有任何方法可以排除這一點。
注意,使用EXPLAIN ANALYZE
你的目的可能不是很理想:它拋出的查詢結果中取出,並增加了,因爲具體的時序它自身的成本。我會設置log_statement_min_duration = 0
,適當設置client_min_messages
,並從日誌輸出中捕獲時間。
所以,它聽起來就像你想PREPARE
查詢然後EXPLAIN ANALYZE EXECUTE
或只是EXECUTE
它log_statement_min_duration
設置爲0
我的啓動成本是查詢計劃時間。我如何準備查詢......並且只有後續的執行時間。實際上,如果我只計算隨後的執行時間,那麼我將得到更快的結果,因爲結果會被緩存。我不想要。 –
@EmmeWatson呃......我說過要怎麼做,而且你甚至用了正確的單詞。 'PREPARE'查詢,然後計時'EXECUTE'。對於緩存效果來說,這很難,而不是你最初問到的問題。閱讀PostgreSQL基準測試 - 如何適當擴展基準測試,如何刪除/清除緩存等。搜索。 –
對於探索計劃成本和分別執行成本,你需要幾個postgres.conf參數進行設置:
log_planner_stats = on
log_executor_stats = on
並探索您的日誌文件。
更新: 1.與執行找到你的配置文件的位置:
SHOW config_file;
2.設置參數。不要忘記刪除註釋符號'#'。 3.重新啓動postgresql服務 4.執行您的查詢 5.探索您的日誌文件。
由於我是一個完整的新手,所以我沒有得到如何...你可以給一些初步的指導..我會盡力弄清楚 –
「啓動成本」是什麼意思?你想要什麼離開測量? – 2013-06-23 22:29:20
@depesz因爲postgres通常在內存中保留一些類似於模式的東西,所以我想排除這個代價。這就是我的意思是啓動成本 –
執行兩次?用不同的參數執行兩次(準備之後)? – wildplasser