2

我想测量 postgres 执行查询所花费的总时间,不包括启动成本。早些时候我使用 \timing 但现在我发现 \timing 包括启动成本。

我还尝试了:“解释分析”,其中我发现实际时间以特定格式指定,例如:实际时间 = 12.04..12.09 那么,这是否意味着执行 postgres 查询(不包括启动时间)所花费的时间为 0.05 . 如果没有,那么有没有办法排除启动成本并衡量查询执行时间?

4

2 回答 2

3

你想要的实际上是非常不明确的。

“启动成本”可能意味着:

  • 网络连接开销和建立新连接的后端启动成本。通过重复使用相同的会话来避免。

  • 发送查询和获取结果的网络往返时间。log_statement_min_duration = 0通过使用explain analyzeorauto_explain模块测量服务器端的时间来避免。

  • 查询计划时间。通过PREPAREing 查询避免,然后仅对后续EXECUTE.

  • 锁定获取时间。目前没有任何方法可以排除这种情况。

请注意, usingEXPLAIN ANALYZE可能不适合您的目的:它会丢弃查询结果,并且由于其详细的时间安排而增加了自己的成本。我会设置log_statement_min_duration = 0client_min_messages适当地设置,并从日志输出中捕获时间。

所以听起来你想要PREPARE一个查询然后EXPLAIN ANALYZE EXECUTE它或者只是EXECUTElog_statement_min_duration设置为0。

于 2013-06-23T23:57:39.317 回答
0

要分别探索 PLANNING 成本和 EXECUTE 成本,您需要设置几个 postgres.conf 参数:

log_planner_stats = on
log_executor_stats = on

并浏览您的日志文件。

更新:1.通过执行找到您的配置文件位置:

SHOW config_file;

2. 设置参数。不要忘记删除注释符号“#”。3. 重新启动 postgresql 服务 4. 执行您的查询 5. 浏览您的日志文件。

于 2013-06-24T15:22:57.057 回答