Postgresql

如何準確測量 PostgreSQL 中的查詢時間(因為 EXPLAIN ANALYZE 似乎沒有這樣做)?

  • September 20, 2019

我知道 EXPLAIN ANALYZE 返回查詢時間,但對於我的案例來說似乎沒有這樣做。(除非我遺漏了什麼……它會是什麼……?)

SELECT cars.*, users.*, makers.*, places.*
 FROM cars
 LEFT OUTER JOIN "users" ON "users"."id" = "cars"."user_id" 
 LEFT OUTER JOIN "makers" ON "makers"."id" = "cars"."company_id" 
 LEFT OUTER JOIN "places" ON "places"."id" = "cars"."location_id" 
 WHERE "cars"."deleted_at" IS NULL 
   AND "cars"."draft" = 'f' 
   AND ((cars.reference_number::text ILIKE '%abc123%') 
     OR (makers.name::text ILIKE '%abc123%') 
     OR (places.name::text ILIKE '%abc123%'))  
 ORDER BY cars.id DESC NULLS LAST 
 LIMIT 20 
 OFFSET 0;

解釋分析輸出:

Planning time: 1.300 ms
Execution time: 105.936 ms

使用 \timing 選擇輸出:

Time: 2100.704 ms (00:02.101)

EXPLAIN ANALYZE 似乎不包括讀取數據的時間。

如何在不使用 SQL(而不是 PSQL 控制台)的情況下獲得總時間?

PostgreSQL 9.6.6

a_horse_with_no_name評論中,

解釋(分析)報告的時間確實不包括將數據發送到SQL客戶端所花費的時間。這是伺服器需要完全準備結果以便將其發送給驅動程序的時間。由於此後的任何延遲完全取決於 SQL 客戶端和客戶端與伺服器之間的網路的組合,因此無法解釋說明

這就是它的全部。其中一個是伺服器端,另一個是網路端。

如果要包括網路和客戶端時間,則在客戶端中啟動和停止計時器;不管是什麼客戶。

引用自:https://dba.stackexchange.com/questions/211465