【问题标题】:Postgresql table with BigInt primary key column : slow insert具有 BigInt 主键列的 Postgresql 表:慢速插入
【发布时间】: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


【解决方案1】:

这是由于映射错误引起的:

Postgresql:BingInteger(int8) --> Java.math.BigInteger

正确的映射

Postgresql:BingInteger(int8) --> Java.lang.Long

从这篇文章中得到提示:mailing-list

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2011-02-25
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多