2016-09-21 36 views
0

我正在使用Sybase ASE和一个表,其中我将保存由Java计算的结果。此表有10列,其中一列的类型为INT值(但不是ID列),其他9列均为VARCHAR(50)类型。是否有一个参数加速Sybase插入

这张表没有索引或触发器(实际上这个表真的是独立的)。我需要将约160K行插入此表中。我试图按批次分开工作,每次都会进行10,000次插入。我使用了两种不同的方式,一种是Spring的JdbcTemplate.batchUpdate另一种是原生JDBC PreparedStatement.executeBatch api。

然而,没有明确的表现赢家。对于10K插入,它们都需要大约25到30秒。

然后我认为它可能与JDBC驱动程序有关,所以我尝试了两种不同的驱动程序:jConnect和jTDS。对插入性能没有实际影响。

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

DBA支持团队解释了这种差异,原因是PostgreSQL安装在本地计算机上,而Sybase安装在企业服务器上。但是,我完全不相信这个解释。

有谁知道在Sybase中是否有可能会大幅影响插入速度的配置?还是有任何其他可能的原因,我的上述情况?

回答

0

数据库服务器是否本地可能确实会产生重大差异。直到你删除这个因素,与本地数据库的比较没有多大意义。

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

1

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

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

总结一下,它可能是一个简单的问题,因为它可能会阻塞sybase实例,或者它可能与无法快速写入的存储有关。鉴于sybase配置正确,性能会非常好。