1

500,000レコードのリストがあります。バッチ更新コードを使用してデータベースにデータを挿入しています。これらの多くのレコードを1回のバッチ挿入で送信する必要がありますか?または、コミットサイズを使用して50000の間隔でコミットする必要があります。コミットサイズを設定するにはどうすればよいですか?

try   
    {  
                 strInsertQry = "INSERT INTO file_upload_tbl_xm"  
                            + "(rec_id,fupload_id)"  
                            + "values" + "(UPLOAD_S.nextval,"  
                            + " ? " //   
                            +  ")";  

                 getJdbcTemplate().getDataSource().getConnection().setAutoCommit(false);  


                 int[] updateCounts = getJdbcTemplate().batchUpdate(strInsertQry,new BatchPreparedStatementSetter()   
              {  
                       public void setValues(PreparedStatement ps, int i) throws SQLException {  
                           FileDataDTO dataDTO = (FileDataDTO)lstSqlFinalData.get(i);  
                           ps.setInt(1,dataDTO.getIntFuploadId());  

                       }  
                       public int getBatchSize() {  
                            return lstSqlFinalData.size();  
                       }  
                   } );  
                 //intResult = updateCounts[0];  
//                 getJdbcTemplate().getDataSource().getConnection().commit();  
                 return true;    
          }  
4

1 に答える 1

0

私は常に500のサイズをコミットします。「SQLManagerforMySQL」を使用した後、その練習を始めました。エクスポートとインポートのデフォルトは500で、復元時のコミットのパフォーマンスが向上し、問題が発生したときにコンソールをハングさせることなく簡単に再開できました。

SQLだけでなくHQLでも実行しています。

于 2011-01-18T04:23:28.447 に答える