肉眼可见:PostgreSQL查询问题一览

我们将继续对公众开放我们的服务的新功能,用于分析,PostgreSQL的查询执行计划explain.tensor.ru今天,我们将学习识别大型计划和复杂计划中的临时痛点,只是用武装的眼神瞥了一眼...





各种可视化选项 将帮助我们







缩小的文字检视



一个相当简单的计划的原始文本已经在分析中引起了问题:







因此,当将有关每个节点的执行时间和已用缓冲区的关键信息从左侧和右侧取出时,我们倾向于使用缩写形式,并且很容易注意到最大值:







饼形图



但是有时候,即使只是了解“最受伤害的地方”也不容易,尤其是当它包含数十个节点并且该计划的缩写形式需要2-3个屏幕时。







在这种情况下,通常可以使用饼图:从







另一方面,您可以立即看到每个节点消耗的资源的大致份额当我们将鼠标悬停在其上方时,在文本视图的左侧,我们将看到所选节点的图标。





pie,饼图没有显示不同节点与“最热”点之间关系为此,“ tile”选项更适合:







执行图



但是,这两个选项均未显示服务节点附件完整链CTE/InitPlain/SubPlan-只能在实际执行图中看到:







需要更多指标!



如果将查询的实际执行计划记为EXPLAIN (ANALYZE),则在那里只会看到经过的时间但是,这常常不足以得出正确的结论!



例如,通过在“冷”高速缓存上执行查询,您将收到(但您看不到!)从媒体接收数据的时间,而不是查询本身的全部工作。



因此,有一些建议:



  • 看减去的数据页的容量。该值实际上不受服务器本身负载的影响,可以用作优化指标。EXPLAIN (ANALYZE, BUFFERS)
  • 使用track_io_timing来确切理解与载体一起工作需要多长时间


并且,如果您的计划不仅包含time,还包含buffersi/o timings,那么在每个图表选项上,您都可以切换到这些指标的分析模式。例如,有时您可以立即看到,所有读数的一半以上落在单个问题节点上:







有关该主题的先前文章:






All Articles