2013-07-15 202 views
15

MySQL命令行界面中,當您執行查詢時,它會告訴您在打印結果後執行查詢需要多長時間。Postgres查詢執行時間

在Postgres命令行界面(psql)中,它不會告訴您。我知道如何配置日誌記錄,以便我可以從日誌中獲取信息,但將它打印到標準輸出會更方便,就像它在MySQL中那樣。

可以這樣做嗎?

+1

這是毫無意義的時候,許多谷歌的點擊率是回答說:「使用谷歌」 - 大約爲巧克力茶壺一樣有用! – NickJ

+0

\時間 - 這很有趣談話 – NickJ

+1

這是一對夫婦的一種方式。但是,如果你嘗試了它並且不起作用,請在你的問題中描述它。 –

回答

42

使用\timing,如"How can I time SQL-queries using psql?"所解釋的。請參閱the manual for psql

如果你想服務器端執行時間不包括將結果傳送到客戶端的時候,你可以在配置中設置log_min_duration_statement = 0,然後SET client_min_messages = log等你拿在控制檯中的日誌信息。

您還可以使用EXPLAIN ANALYZE來獲取詳細的執行時間。除非您使用EXPLAIN (ANALYZE TRUE, TIMING FALSE)(僅適用於較新的版本),並且禁用詳細的計時,以便僅給出總計執行時間,否則會有一些計時開銷。

PgBadger,特別是當與the auto_explain module結合使用時,可以從日誌分析中提供有用的彙總統計信息。

最後,有pg_stat_statements,它可以收集正在運行的系統上的便捷聚合信息。

+1

以及如何使用\ timing – aName

+0

使用[手動](https://www.postgresql.org/docs/current/static/app-psql.html)或[google](https://www.google .com.au /搜索q = PSQL +定時)。哦,我注意到你[只是發佈了一個關於它的問題](http://stackoverflow.com/q/40593723/398670)。也許你應該聯繫到它,所以我沒有浪費時間在這裏回答你。 –

5

我認爲EXPLAIN ANALYSE可能會對你有所幫助

語法:

EXPLAIN ANALYSE query; 

例;

EXPLAIN ANALYSE 
SELECT * 
FROM demotable; 

輸出:

"Seq Scan on demotable (cost=0.00..12.10 rows=210 width=356) 
         (actual time=0.020..0.021 rows=8 loops=1)" 
"Planning time: 18.477 ms" 
"Execution time: 0.042 ms"