[英]How to analyze the performance of a loop with postgres?
我有一個 script.sh 執行 1 script.sql。
它將在 data.table 中查找數據。我有一個循環,在這個循環中我有其他循環,這些循環將在 data.table 中查找信息並將它們插入到正確的表中。
在我的項目開始時,我的腳本運行了 45 分鍾。
我做了一些修改,晚上 8 點我在某個地方遇到了問題,但沒有真正理解(除非我忘記了一些,否則我會放置索引)。
在 Postgres 中,我如何分析每個“子循環”以了解執行時間,以便理解為什么它變長了?
例子:
begin
for query
loop
-- loop 2
begin
for query
[...]
end loop;
-> raise notice 'duration or explanation';
end;
-- loop 3
begin
for query
[...]
end loop;
-> raise notice 'duration or explanation';
end;
end loop;
end;
您可以在 pgAdmin 中或通過在查詢之前使用 EXPLAIN 查看整個查詢的運行時間。 這可能還不足以了解如何改進查詢
要測量運行時間,您可以使用
raise notice '%', clock_timestamp();
在 plpgsql function 內。
有時這可能很有用,但我認為這不是改進運行時間的方法。 您應該了解對查詢運行時間有主要影響的參數:
減少任何數量都會改善運行時間。 通常,一個查詢比循環中的多個查詢快得多。 您只需將查詢字符串與以下內容組合即可創建塊; 在各個查詢之間,它會更快。 這是因為所有這些都將在一次交易中。 牽引力的打開和關閉需要時間。
PL/pgSQL 函數是查詢規划器的黑盒。 EXPLAIN
output 中未單獨介紹嵌套語句。附加模塊auto_explain
可讓您記錄包括嵌套語句在內的執行計划。
您必須是超級用戶。
看:
關於時間的基礎知識:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.