postgresql - Postgres解释分析:总时间大大超过部分总和
问题描述
我有一个 python 脚本,它接收外部事件并将它们写入 Postgres 数据库。大多数情况下,INSERT 的运行速度非常快(< 0.3 秒)。但有时查询执行时间超过10-15秒!每分钟大约有 500 个事件,如此缓慢的行为是不可接受的。
查询很简单:
INSERT INTO tests (...) VALUES (...)
我在脚本中的“插入”之前添加了“解释分析”,它给了我这个:
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
下次看到这个我一定会尝试研究一下,谢谢。
解决方案
推荐阅读
- javascript - 占位符不改变表单中的值
- c# - CSV 文件的 StreamReader ReadLine()
- python - 有效的 JSON 可以是无效的 Python 吗?
- javascript - React-Native,重新加载应用程序后错误消失,但随后再次出现
- r - ggplot中x轴下方的表格
- ggplot2 - 条形图中的缺失值
- r - 如何根据 R 中的行值组合创建新变量(列)?
- simulation - ResourceTaskStart 问题由于多个资源在一次占用中
- java - 将解析的 JSONArray 加载到 recyclerView
- swift - 如何更新视图中结构的值