Postgres查询执行时间

73
在MySQL命令行界面中,当您执行查询时,它会在打印结果后告诉您查询执行花费的时间。
在Postgres命令行界面(psql)中不会显示执行时间。我知道如何配置日志以从日志中获取信息,但像MySQL一样将其打印到标准输出中会更方便。
这可行吗?

4
当许多谷歌搜索结果都是“使用谷歌”这样的答案时,这就变得毫无意义了——和巧克力茶壶一样没用! - NickJ
1
\timing --说起来很有趣 - NickJ
2
这是一种方法之一。但是,如果您尝试过它并且不起作用,请在您的问题中描述它。 - Jakub Matczak
8
我认为查找产品信息的更好起点是手册而不是搜索引擎。 - user330315
3个回答

125

按照"如何使用psql计时SQL查询?"所述,使用\timing

另请参阅psql手册

如果您需要不包括传输结果到客户端的服务器端执行时间,则可以在配置中设置log_min_duration_statement = 0,然后SET client_min_messages = log,以便在控制台中获取日志信息。

您还可以使用EXPLAIN ANALYZE来获取详细的执行时间。除非您使用EXPLAIN (ANALYZE TRUE, TIMING FALSE)(仅适用于新版本),否则会有一些时间开销,它会禁用详细的定时来提供只有汇总执行时间的结果。

PgBadgerauto_explain模块相结合,可以从日志分析中提供有用的汇总统计信息。

最后,pg_stat_statements可以在运行中收集有用的汇总信息。


6
如何使用\timing。 - aName
3
在psql控制台中输入\ timing并按回车键。 :) 要停用,请再次输入\ timing. - Jahan

58

我认为EXPLAIN ANALYZE对你可能有帮助

语法:

EXPLAIN ANALYZE query;

例子;

EXPLAIN ANALYZE 
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"

如果存在触发器,那么这个方法就不会起作用。 - Nulik

7
您可以按以下方式在 pgsql 中使用 \timing,以将执行时间打印到标准输出:
psql -d db -c '\timing' -c 'select 1'

摘自此处的评论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接