1
我有一個未優化的查詢,在1分鐘到14小時的不同時間運行一系列不同的執行時間。數據庫上的CPU利用率,內存和其他併發負載保持不變,可能會導致這種變化?請注意,自動真空過程在午夜運行,並且性能在早上大幅度提高。我的斷言是,由於表碎片,死元組和大量的讀取,同一個表上的統計信息發生變化,從而產生不同的執行計劃。爲了證明這個斷言,我想獲得正在運行的當前查詢的查詢計劃。請注意,我不可能在執行前簡單地使用EXPLAIN
查詢。如何獲得postgresql中正在運行的查詢的執行計劃?
https://www.postgresql.org/docs/current/static/auto-explain.html –
AFAIU,這將需要重新啓動數據庫,這也不是一個選項。此外,這對於爲所有長時間運行的查詢產生查詢計劃而不僅僅是有關的查詢。 –
1:這不需要重新啓動,最多隻能重新加載。 2:PostgreSQL必須爲每個查詢生成查詢計劃(除非它已經準備好了,否則它只會制定一次計劃)。 3:這裏唯一的開銷是記錄最小的查詢計劃。只需將auto_explain.log_min_duration設置爲10000即可,因此它必須是10秒查詢等。 –