0
我正在對很多查詢運行一些基準測試。我有一系列的查詢,它們會在彼此之後多次運行。我知道PostgreSQL緩存查詢計劃,所以這是重要的考慮,但據我所知,這並不總是發生。PostgreSQL在相同的查詢上接近計劃緩存?
所以我有兩種方法。我正在考慮(a)強制每次運行查詢時生成查詢計劃,或者(b)稍微「預熱」一下,以便計劃被緩存並且每次重用。我該如何執行,或者我可以採取哪些預防措施來確保其中一個發生?
如果我可以監控緩存中的計劃,但是我不確定是否有可能,那將會很棒。
更新:我的查詢是複雜的SELECTs來檢索數據,沒有DELETEs/INSERTs等。這是否意味着我不應該對查詢計劃器在基準測試中給予如此的尊重?如果
- 你使用準備好的語句
- 的語句是PL/pgSQL功能
所以內執行的,如果你想基準你的查詢如何更快成爲如果
謝謝!您建議通過準備好的報表進行基準測試,而不需要計劃開銷你也可以說PostgreSQL也通過PL/pgSQL函數來緩存查詢計劃 - 這意味着我可以期待相同的行爲,即如果我使用PL/pgSQL過程並執行它至少5次,那麼我可以安全地期望緩存計劃第六輪開始? – Zeruno
是的,你說得對 - 在大多數情況下。有時PostgreSQL會認爲通用計劃不夠好,並繼續生成自定義計劃。爲了測試,你可以在函數內部使用'EXPLAIN EXECUTE prepared_statement'或auto_explain來聲明。如果您在那裏看到「$ 1」,則使用通用計劃。沒有參數的陳述當然總是使用通用計劃。 –
感謝您解釋良好的答覆!很有幫助。 – Zeruno