ibatis:提高插入性能

时间:2010-10-19 16:09:51

标签: java sql insert ibatis batch-processing

我使用ibatis作为我的sql insert stmt。在我的代码中,我正在从文件夹中逐行解析文件。每条符合条件的行都需要插入数据库。 单次运行程序中的插入总数可以是沿200k的任何位置。

    SqlSession sess = null;    
    this.sess = sf.openSession(ExecutorType.BATCH, false);
    for (each file) {
     for( each line matching criteria ){
         this.sess.insert("com.logs.util.insertFileInfo", fileData);
         insertcount++;
         if(insert count == 10)
              this.sess.commit();
         }    
      }
      if(insert count > 0){
           this.sess.commit();
      }   
    }

这种风格慢慢占用大量内存,并在一段时间后抛出OutOfMemory异常。 如何在这里提高绩效?

1 个答案:

答案 0 :(得分:0)

你是否有意在每10次插入后提交?看起来你只能在前10次插入后才这样做。我想你需要像

这样的东西
if ((insertCount % 10) == 0) {
   this.sess.commit();
}

那些未提交的更改必须存储在某处。我不熟悉Ibatis,但是如果未提交的更改存储在Ibatis分配的缓冲区中,那么如果不提交更改,最终会耗尽内存。