EXPLAIN ANALYZE QUERY对衡量查询性能有何用处?

时间:2018-08-09 17:50:03

标签: postgresql performance psycopg2 psql execution-time

今天,我尝试使用解释分析提取查询的执行时间。我希望能够在不影响查询延迟的情况下正确计算它们的执行时间,但是在documentation中,它指出存在配置开销:

  

为了衡量执行计划中每个节点的运行时成本,EXPLAIN ANALYZE的当前实现将配置开销添加到查询执行中。结果,在查询上运行EXPLAIN ANALYZE有时会比正常执行查询花费更长的时间。开销量取决于查询的性质以及所使用的平台。最糟糕的情况发生在计划节点本身每次执行只需要很少时间的情况下,以及在操作系统调用相对较慢的机器上获取一天中的时间的机器上。

因此,我怀疑解释分析的用处,因为您似乎只是在以分析开销交换延迟时间。更令人惊讶的是,使用代码(在我的情况下为psycopg2库为Python)对数据库查询进行计时会缩短查询的执行时间。

2 个答案:

答案 0 :(得分:2)

EXPLAIN (ANALYZE)是一种优化工具,绝不是优化器。这意味着它会增加实际的开销,并且永远不要在生产中的应用程序中使用它,而只能在调整时使用。

对于数据库开发人员或管理员而言,它是一种宝贵的工具,可以准确地了解数据库引擎将如何执行特定查询以及大部分时间花在哪里。例如,它可以帮助确定添加或删除索引的影响,以及在时间和访问上对查询的详细影响。

因为使用数据库后就不能依赖简单的时间测量,因为它们可以取决于是否将数据库与其他查询一起加载,某些页面是否已经缓存在内存中,而不是外部加载。客户端或服务器计算机。

答案 1 :(得分:1)

EXPLAIN (ANALYZE)很有用,不是因为它可以测量执行时间的准确性,而是因为它告诉您大部分执行时间花在了哪里以及PostgreSQL的估算值在哪里。