簡體   English   中英

如何使用 postgres 分析循環的性能?

[英]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 內。

有時這可能很有用,但我認為這不是改進運行時間的方法。 您應該了解對查詢運行時間有主要影響的參數:

  1. 查詢次數。
  2. 查詢返回的數據量
  3. 數據庫中的數據量

減少任何數量都會改善運行時間。 通常,一個查詢比循環中的多個查詢快得多。 您只需將查詢字符串與以下內容組合即可創建塊; 在各個查詢之間,它會更快。 這是因為所有這些都將在一次交易中。 牽引力的打開和關閉需要時間。

PL/pgSQL 函數是查詢規划器的黑盒。 EXPLAIN output 中未單獨介紹嵌套語句。附加模塊auto_explain可讓您記錄包括嵌套語句在內的執行計划。
您必須是超級用戶。

看:

關於時間的基礎知識:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM