【发布时间】:2020-06-26 00:10:45
【问题描述】:
我有一个带有“BigInt”(int8) primaryKey 列的表,在这个表上插入非常慢,并且随着行数的增加它不断降级。
更多细节:
- Postgres 版本:10.7
- 表上没有单独的索引
- 每分钟插入数 ~2000,随着数据行的增加而降级
- 我们有大约 25k 条记录,我们尝试截断数据并从零行插入,但没有任何改进
- 我们使用 Spring-data-jpa 插入数据 (.save()) 方法。 SpringBoot:2.2.4.RELEASE/Hoxton.SR1
- 最大池大小为 50 的 Hikari 数据源。
- 列映射到实体中的java.math.BigInteger
- 单行插入(非批处理)
问题似乎与 BiGInt 列本身有关,当我们将列类型从 BigInt 更改为 varchar 时,速度消失了,一分钟内插入了 25k 条记录。
我对 BigInt 列做错了吗?为什么 BigInt 类型使插入如此缓慢?
感谢任何见解和帮助。
谢谢!
【问题讨论】:
-
我们可以有
EXPLAIN (ANALYZE, BUFFERS)输出用于快速插入和慢速插入吗?您可以使用auto_explain来获取。 -
你是如何生成主键的?
-
行数越多越慢,行数越少就不会越快?
-
@LaurenzAlbe - 这里解释一下输出:在 xxxx 上插入(成本=0.00..0.01 行=1 宽度=1502)(实际时间=0.122..0.122 行=0 循环=1)缓冲区:共享hit=12 -> Result (cost=0.00..0.01 rows=1 width=1502) (实际时间=0.001..0.001 rows=1 loops=1) 计划时间:0.038 ms 执行时间:0.183 ms
-
你是如何生成主键的值的?
标签: postgresql spring-data-jpa spring-data