Olá, tenho o código abaixo e venho enfrentando um problemão em tratando-se de desempenho. já adicionei o parametro (?-Xmx1280M?) p/ ver se resolve, só que aqui acolá volto a ter problema, de acordo com a quantidade de registros inseridas:
talvez o código abaixo apresente uma falha que eu não consiga ver, em fim..
//ou eu tenho um heap na consulta, ou durante os inserts.
Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
private void migrar(Tabela tabela) throws Exception {
connectionDbIn = new ConnETL(tabela.getBancoIn());
connectionDbOut = new ConnETL(tabela.getBancoOut());
try {
stmtIn = connectionDbIn.getStatement();
stmtOut = connectionDbOut.getStatement();
//Consulta retorna ~3k de registros do banco de entrada.
rsIn = stmtIn.executeQuery(tabela.getSqlSelect());
//exclui todos os registros do banco de saída
stmtOut.executeUpdate(" delete from " + tabela.getNome());
camposLocal = tabela.getCampos();
String sqlinsercao = "insert into bancoOut(COD_TITULO, COD_FILIAL_ESTOQUE, COD_FILIAL_FATURAMENTO, COD_FILIAL_PEDIDO, COD_CLIENTE, COD_VENDEDOR, COD_USUARIO, COD_COND, TIPO_VENDA)values (?, ?, ?, ?, ?, ?, ?, ?, ?)";
int x = 0, z = 0;
ps = connectionDbOut.getPrepareStatement(sqlinsercao);
System.out.println("Insert");
while (rsIn.next()) {
int i = 1;
for (i = 1; i <= camposLocal.size(); i++) {
ps.setObject(i, rsIn.getObject(camposLocal.get(i - 1).getNome()));
}
ps.addBatch();
x++;
c++;
z++;
if (x == 500) {
connectionDbOut.commit();
x = 0;
}
if (z == 50) {
ps.executeBatch();
z = 0;
}
}
connectionDbOut.commit();
} catch (Exception ex) {
connectionDbOut.rollback();
throw new Exception("migrar(Tabela)|" + ex.getMessage());
}
}

