Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提高大容量插入的JDBC性能_Java_Sql_Jdbc_Sybase - Fatal编程技术网

Java 提高大容量插入的JDBC性能

Java 提高大容量插入的JDBC性能,java,sql,jdbc,sybase,Java,Sql,Jdbc,Sybase,目前我的吞吐量约为350MB/小时,这并不多。瓶颈是对Sybase数据库的插入,因此我正在寻找提高吞吐量的方法 我只能使用免费的JDBC驱动程序——据我所知,这些驱动程序都不支持驱动程序级批量插入 目前我已将自动提交设置为false(事务性也是如此)。准备语句,添加到批处理中,然后每2000条记录执行一次批处理(我已经使用了这个数字,但它没有帮助)。然后提交事务,所有插入都已执行 目前正在使用JTDS驱动程序 因此,我求助于任何黑客、技巧和技巧来提高吞吐量 其他详情: 表上没有触发器 唯一的约

目前我的吞吐量约为350MB/小时,这并不多。瓶颈是对Sybase数据库的插入,因此我正在寻找提高吞吐量的方法

我只能使用免费的JDBC驱动程序——据我所知,这些驱动程序都不支持驱动程序级批量插入

目前我已将
自动提交设置为false(事务性也是如此)。准备语句,添加到批处理中,然后每2000条记录执行一次批处理(我已经使用了这个数字,但它没有帮助)。然后提交事务,所有插入都已执行

目前正在使用JTDS驱动程序

因此,我求助于任何黑客、技巧和技巧来提高吞吐量

其他详情:

  • 表上没有触发器
  • 唯一的约束是由3个字段组成的公钥。(附指数)
  • 该语句字面上是
    插入表([col]、[col1]、[col2]、[col3])值(?、、?、?)

    • 我还遇到了性能问题。 我知道使用JDBC进行多个查询会在应用程序和数据库服务器上造成大量网络开销。由于网络往返,也会导致延迟

      请考虑以下事项。这可能有助于:


      在文件中写入红色记录并通过bcp实用程序插入。这比你现在做的要快得多

      表中的索引和触发器是什么?是否可以获取insert查询的执行计划?如果是这样,您可以对此进行分析,并查看是否可以通过微调SQL获得任何收益。如果其他进程未同时访问数据,您是否可以在插入开始之前删除任何非必要的索引/约束,完成后重新应用它们?@NickHolt只是一个PK约束。
      jTDS
      AFAIK是MS SQL Server的强大驱动程序,通常不会导致性能问题。单次插入vs 2000批量一定会给您带来一些好处,这是什么?如果低于2000可能无效,那么JDBC级别的批处理计数集是什么。我怀疑与处理有关,而不是与驱动程序有关..对不起,你所说的
      n/w
      是什么意思?有趣的…可能值得研究一下。