我有一个运行许多查询的sql文件。我想查看所有查询的累加总和。我知道如果我打开计时或致电
\timing
query 1;
query 2;
query 3;
...
query n;
在脚本的开头,它将开始显示每个查询运行所花费的时间。但是,我需要累积所有查询的结果,而不必手动添加它们。
有系统的方法吗?如果没有,我该如何获取过渡时间以将其放入变量中。
答案 0 :(得分:4)
pg_stat_statements
是一个很好的模块,它提供了一种跟踪执行统计信息的方法。
首先,将pg_stat_statements
添加到shared_preload_libraries
的
postgresql.conf
个文件。要知道此.conf文件在您的位置
文件系统,运行show config_file;
shared_preload_libraries = 'pg_stat_statements'
创建扩展名
CREATE EXTENSION pg_stat_statements;
现在,该模块提供了View
, pg_stat_statements
,可帮助您分析各种查询执行指标。
重置运行查询之前收集的统计信息的内容。
SELECT pg_stat_statements_reset();
现在,执行包含查询的脚本文件。
\i script_file.sql
您可能会获得所有已执行查询的所有计时统计信息。要获取总时间,只需运行
select sum(total_time) from pg_stat_statements
where query !~* 'pg_stat_statements';
您获得的时间是milliseconds
,可以使用各种timestamp
相关的Postgres函数将其转换为所需的格式
答案 1 :(得分:0)
如果要定时整个脚本,请在Linux或Mac上使用time
实用程序启动脚本。
在这种情况下,测量结果比原始查询时间的总和还多一点,因为它包括启动和运行psql
命令的开销。在我的系统上,此开销约为20毫秒。
$ time psql < script.sql
…
real 0m0.117s
user 0m0.008s
sys 0m0.007s
real
值是执行整个脚本所花费的时间,包括上述开销。
此答案中的方法是一种粗略,简单的客户端方法,用于测量整个脚本的运行时间。测量毫秒级的服务器端精确执行时间没有用。对于许多用例来说仍然足够。
Kaushik Nayak的解决方案是一种更精确的方法,可以直接在服务器上计时执行时间。它还提供了更多有关执行的见解(例如查询级别时间)。