【问题标题】:is there a parameter accelerates Sybase insertion有没有加速sybase插入的参数
【发布时间】:2016-09-21 18:12:42
【问题描述】:

我正在使用 Sybase ASE,并且对于一个表,我将在其中保存由 Java 计算的结果。这个表有10列,一列类型是INT值(但不是ID列),其他9列都是VARCHAR(50)类型。

这个表上没有索引或触发器(实际上这个表是真正独立的)。我需要在这个表中插入大约 160K 行。我尝试将工作按批次分开,每次将执行 10,000 次插入。我用了两种不同的方式,一种是Spring的JdbcTemplate.batchUpdate另一种是原生的JDBCPreparedStatement.executeBatchapi。

但在性能方面没有明确的赢家。对于 10K 插入,它们都需要大约 25 到 30 秒。

然后我觉得可能和JDBC驱动有关,所以我尝试了两个不同的驱动:jConnect和jTDS。对插入性能没有实际影响。

最后我决定将 Sybase 与另一个数据库进行比较,即我测试中的 PostgreSQL。我保留了相同的 Java 代码,令人惊讶的是,PostgreSQL 每 10K 插入只需要 0.3 秒,而 Sybase 需要 25 到 30 秒(长 75 到 100 倍)。

DBA 支持团队解释说,不同之处在于 PostgreSQL 安装在我的本地计算机上,而 Sybase 安装在我们企业的服务器上。但是,我完全不相信这种解释。

有谁知道 Sybase 中是否存在会显着影响插入速度的配置?或者我的上述情况还有其他可能的原因吗?

【问题讨论】:

    标签: java database jdbc sybase


    【解决方案1】:

    您在 sybase 端看到的延迟是因为需要检查许多因素,并将其与本地计算机上的不同数据库进行比较是不正确的。

    首先,我们需要检查网络延迟和 sybase 数据库中使用的存储。我们需要检查您要插入的表的 sybase 服务器配置、页面大小和锁定方案。在插入数据时,我们还需要对服务器进行基本的健康检查。正如您所提到的,您使用了两种不同的方式来插入数据,请务必检查这两种方式是否根据您在系统上安装的 sybase 客户端进行了相应的更新。

    总而言之,这可能是一个简单的问题,例如阻塞 sybase 实例,也可能与无法快速写入的存储有关。如果sybase配置得当,性能会很好。

    【讨论】:

      【解决方案2】:

      数据库服务器是否在本地可能确实会产生重大影响。在你去掉这个因素之前,与本地数据库进行比较是没有意义的。

      除此之外,还有许多方面会影响 ASE 中的插入性能。首先,确保整体内存配置(例如数据缓存和过程缓存)不会太小 - 将其保留在安装默认值是保证结果令人失望的保证。然后是可以发挥作用的网络数据包大小。以及批量大小(提交之前的#rows)。和表的锁定方案。 尝试使用最少记录的插入会有所帮助(需要更改配置设置),尤其是因为表没有索引(也没有 UNIQUE 或 PK 约束?) ASE 服务器页面大小(您在创建服务器时选择)也有所不同:对于插入而言,基本上越大越好。

      【讨论】:

        【解决方案3】:

        将ENABLE_BULK_LOAD 参数设置为True。它会加快速度。

        【讨论】:

          猜你喜欢
          • 2020-09-10
          • 1970-01-01
          • 1970-01-01
          • 2017-10-16
          • 2018-04-17
          • 1970-01-01
          • 1970-01-01
          • 2016-12-30
          • 2016-12-29
          相关资源
          最近更新 更多