微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Postgres EXPLAIN ANALYZE:总时间大大超过部分的总和

如何解决Postgres EXPLAIN ANALYZE:总时间大大超过部分的总和

我有一个 python 脚本,它接收外部事件并将它们写入 Postgres 数据库。 大多数情况下,INSERT 的运行速度非常快(

查询很简单:

INSERT INTO tests (...) VALUES (...)

这个表(大约有 500 万条记录)也很简单:

Table tests

我在脚本中的“INSERT”之前添加了“EXPLAIN ANALYZE”,它给了我这个:

Insert on tests  (cost=0.00..0.01 rows=1 width=94) (actual time=0.051..0.051 rows=0 loops=1)
  ->  Result  (cost=0.00..0.01 rows=1 width=94) (actual time=0.010..0.010 rows=1 loops=1)
Planning time: 0.014 ms
Execution time: 15624.374 ms

这怎么可能?我怎样才能知道这 15 秒它在做什么?

我使用的是 Windows 服务器和 Postgres 9.6。 Script 和 Postgres 在同一台机器上。

此外,我在此期间收集了 Windows 性能计数器的数据(磁盘队列长度、处理器时间),但没有显示任何内容

此服务器是 VMWare ESXi 上的虚拟服务器,但我不知道我可以在其中检查什么以了解这种情况。

添加

这些查询在多个线程中运行(多个并行脚本执行此操作)。
INSERT 是在没有显式交易的情况下完成的。
没有触发器(有一个触发器,但我删除了它,没有任何改变),也没有外键。

如果你再次执行它会怎样?

这个查询在几个脚本中执行,每分钟大约 400 次(总计)。大多数时候它执行得很快。我无法在查询工具中捕获这么长的执行时间。

下次我看到这个时,我肯定会尝试研究pg_stat_activity,谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。