如何计算查询时间的总和?

时间:2019-06-14 14:55:33

标签: sql database postgresql benchmarking timing

我有一个运行许多查询的sql文件。我想查看所有查询的累加总和。我知道如果我打开计时或致电

\timing
 query 1;
 query 2;
 query 3;
 ...
 query n;

在脚本的开头,它将开始显示每个查询运行所花费的时间。但是,我需要累积所有查询的结果,而不必手动添加它们。

有系统的方法吗?如果没有,我该如何获取过渡时间以将其放入变量中。

2 个答案:

答案 0 :(得分:4)

pg_stat_statements是一个很好的模块,它提供了一种跟踪执行统计信息的方法。

  1. 首先,将pg_stat_statements添加到shared_preload_librariespostgresql.conf个文件。要知道此.conf文件在您的位置 文件系统,运行show config_file;

    shared_preload_libraries = 'pg_stat_statements'
    
  2. 重新启动Postgres数据库
  3. 创建扩展名

    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的解决方案是一种更精确的方法,可以直接在服务器上计时执行时间。它还提供了更多有关执行的见解(例如查询级别时间)。