在MySQL命令行界面中,当您执行查询时,它会告诉您在打印出结果后执行查询所用的时间。在Postgres命令行界面(psql)中,它没有告诉你。我知道如何配置日志记录,这样我就可以从日志中获取信息,但让它像在MySQL中那样打印到标准输出会更方便。这能做到吗?
MySQL
psql
1tu0hz3e1#
按照"How can I time SQL-queries using psql?"的说明使用\timing。另请参阅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,它可以收集运行系统上方便的聚合信息。
\timing
log_min_duration_statement = 0
SET client_min_messages = log
EXPLAIN ANALYZE
EXPLAIN (ANALYZE TRUE, TIMING FALSE)
auto_explain
pg_stat_statements
svmlkihl2#
我想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"
ercv8c1e3#
您可以在pgsql中使用\timing,如下所示,将执行时间打印到标准输出:
pgsql
psql -d db -c '\timing' -c 'select 1'
取自此注解。
3条答案
按热度按时间1tu0hz3e1#
按照"How can I time SQL-queries using psql?"的说明使用
\timing
。另请参阅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
,它可以收集运行系统上方便的聚合信息。svmlkihl2#
我想
EXPLAIN ANALYZE
可能对你有帮助语法:
例;
输出量:
ercv8c1e3#
您可以在
pgsql
中使用\timing
,如下所示,将执行时间打印到标准输出:取自此注解。