我想测量 postgres 执行查询所花费的总时间,不包括启动成本。早些时候我使用 \timing 但现在我发现 \timing 包括启动成本。
我还尝试了:“解释分析”,其中我发现实际时间以特定格式指定,例如:实际时间 = 12.04..12.09 那么,这是否意味着执行 postgres 查询(不包括启动时间)所花费的时间为 0.05 . 如果没有,那么有没有办法排除启动成本并衡量查询执行时间?
我想测量 postgres 执行查询所花费的总时间,不包括启动成本。早些时候我使用 \timing 但现在我发现 \timing 包括启动成本。
我还尝试了:“解释分析”,其中我发现实际时间以特定格式指定,例如:实际时间 = 12.04..12.09 那么,这是否意味着执行 postgres 查询(不包括启动时间)所花费的时间为 0.05 . 如果没有,那么有没有办法排除启动成本并衡量查询执行时间?
你想要的实际上是非常不明确的。
“启动成本”可能意味着:
网络连接开销和建立新连接的后端启动成本。通过重复使用相同的会话来避免。
发送查询和获取结果的网络往返时间。log_statement_min_duration = 0
通过使用explain analyze
orauto_explain
模块测量服务器端的时间来避免。
查询计划时间。通过PREPARE
ing 查询避免,然后仅对后续EXECUTE
.
锁定获取时间。目前没有任何方法可以排除这种情况。
请注意, usingEXPLAIN ANALYZE
可能不适合您的目的:它会丢弃查询结果,并且由于其详细的时间安排而增加了自己的成本。我会设置log_statement_min_duration = 0
,client_min_messages
适当地设置,并从日志输出中捕获时间。
所以听起来你想要PREPARE
一个查询然后EXPLAIN ANALYZE EXECUTE
它或者只是EXECUTE
它log_statement_min_duration
设置为0。
要分别探索 PLANNING 成本和 EXECUTE 成本,您需要设置几个 postgres.conf 参数:
log_planner_stats = on
log_executor_stats = on
并浏览您的日志文件。
更新:1.通过执行找到您的配置文件位置:
SHOW config_file;
2. 设置参数。不要忘记删除注释符号“#”。3. 重新启动 postgresql 服务 4. 执行您的查询 5. 浏览您的日志文件。