识别导致pg_stat_user_tables中显示的seq_scan的查询

时间:2018-04-08 05:27:16

标签: postgresql postgresql-9.4

我已使用EXPLAIN验证了所有查询,并在计划中显示了索引扫描节点。 但是,当我在表pg_stat_user_tables中看到统计信息时,我看到seq_scan的非零值。

PostgreSQL可能正在进行位图堆扫描,而不仅仅是索引扫描,但我不完全确定。

我有以下问题:

  1. 上面的统计信息表中位图堆扫描是否计为seq_scan

  2. 如何识别执行顺序扫描的查询?数据库的流量不均匀,因此监控pg_stat_activity无效。

1 个答案:

答案 0 :(得分:0)

位图索引扫描idx_scan下计算。

查找执行顺序扫描的查询更难。

让我们假设表格相当大,以便顺序扫描需要一定的时间(对于这个答案,我假设至少500毫秒,但这可能是不同的)。如果顺序扫描很短,你就不会担心。

现在将auto_explain放入shared_preload_libraries并将以下参数添加到postgresql.conf

auto_explain.log_min_duration = 500
auto_explain.log_nested_statements = on

然后重启服务器。

现在,您将获得PostgreSQL日志中超过500毫秒持续时间的所有语句的执行计划,您应该能够找到该查询。

顺便说一句,顺序扫描并不总是你应该担心的事情。如果它们很少发生,那通常很好。您可能正在寻找使用pg_dump的自己的数据库备份!只有经常发生的昂贵的顺序扫描才是问题。