批处理执行中的最佳插入查询数

时间:2014-02-23 15:17:25

标签: java sql performance jdbc

我正在使用JDBC的executeBatch方法运行一些插入查询。 我先来解释一下应用程序。 有一个Web应用程序,当用户浏览一些网页时,它会以异步方式向缓存发送一些插入语句。当缓存查询的大小增长到某个数字时,例如'n',查询将使用JDBC的executeBatch方法作为批处理执行。

我不是真的来自数据库背景,也不确定如何提出'n'的值。所有因素将决定它以及如何在进行负载测试之前以数学方式计算出一些近似值。

就使用情况而言,我预计一小时内会有大约72000个插入查询,优先级是Web应用程序的顺利运行而不是数据的插入。

请建议。

编辑 - 从2000年开始,每小时将查询数量更新为72000,道歉,之前有错误的数据:(

2 个答案:

答案 0 :(得分:3)

2000插入查询一小时约为每1.5秒一次。这不是任何现代设备上运行的任何数据库的严重负载。唯一的例外是插入非常长,例如存储兆字节长度的blob或插入,这些blob或插入可能具有执行复杂工作的长触发链。

我怀疑尝试优化应用程序的这个方面还为时过早。您应该能够为每个操作单独插入而不影响性能。这也将简化应用程序。通过不使用缓存,您不必担心与缓存保持一致性,如果应用程序端失败该怎么办,如果在前一个缓存更新之前发生第二次缓存更新,该怎么办,等等。在实际更新缓存时,您也不必担心如何处理缓存。

我应该注意,在锁定表/页面较长时间方面,缓存更新会产生一些负面影响。总的来说,它们更有效率(如果只是因为如果正确完成,只有一次数据库往返)。但是,效率可能会掩盖数据库中锁定较长时间的对象。

答案 1 :(得分:2)

您的问题不包含任何有用的数据来回答这个问题。插入的速度取决于:

  1. 行的大小(即您告诉数据库的限制)
  2. 插入所触及的索引数
  3. 某些类型如(C)LOB比其他类型更贵
  4. 每行的实际数据量
  5. 您使用的数据库
  6. 延迟
  7. 磁盘上表存储的布局
  8. 根据经验,我们为小插入连接10000行(2-3列,整行为<100字节),正常行为1-2000(每行<1KB),大行为1( &gt; 100K)

    编辑编写一个小型性能测试,插入具有不同批量大小和时间的1百万条记录。其他任何东西都只是猜测。