sybase 提升jdbc批量插入性能的方法

批量插入sybase数据库的方法我目前想到两个,一个是如果装有sybase客户端,可以使用它的BCP,这个性能提升比较明显。而如果没有,可以使用jdbc批量插入,同时使用sybase的jdbc jar包--jconnect自带的参数设置,也可以显著提升性能。jdbc 批量插入的写法就不多说了,这里说一下提升性能的参数吧。

1.ENABLE_BULK_LOAD
对于jConnect 6.05和7.0版本的,当把这个参数设为true时,性能可以提升几十倍。一秒存入10K的数据量应该是没问题的。具体BCP的原理是什么,欢迎大家拍砖哈。这里给出执行executeBatch时的栈信息,可以看到jConnect会使用BCP插入数据。

at com.sybase.jdbc4.jdbc.SybConnection.getAllExceptions(SybConnection.java:2475)
        at com.sybase.jdbc4.jdbc.SybStatement.handleSQLE(SybStatement.java:2313)
        at com.sybase.jdbc4.jdbc.SybBCP.bcpSendRow(SybBCP.java:1093)
        at com.sybase.jdbc4.jdbc.SybPreparedStatement.executeBulkBatch(SybPreparedStatement.java:1261)
        at com.sybase.jdbc4.jdbc.SybPreparedStatement.executeBatch(SybPreparedStatement.java:1291)

限制:使用这个参数需要Adaptive Server 12.5.2版本以上,且jConnect需要6.05版本以上,且以下参数暂不支持:
unsigned types, bigint, and unitext
encrypted columns and computed columns

当升级到jConnect 7.07时ENABLE_BULK_LOAD的取值有所变化,取值范围有4个:
a.ARRAYINSERT_WITH_MIXED_STATEMENTS 行级记录,当bulk load时可以同时执行别的语句
b.ARRAYINSERT 行级记录,当bulk load时不允许执行别的语句
c.BCP 块级记录,当bulk load时不允许执行别的语句
d.LOG_BCP 块级记录,用的是ASE BCP快速log的功能

2.DYNAMIC_PREPARE
当值为true时,执行语句会预编译在数据库缓存中,这样也能显著提高性能。

猜你喜欢

转载自susiya.iteye.com/blog/2065619