Sziasztok.
A felállás a következő. Szeretnék adatbázis migrálást lebonyolítani. ami jónak is tűnt, de ahogy szaporodtak a rekordok egyre lassabb lett a művelet.
Egy pszeudóféleség:
JDBCDriver newinstance Drivermanager getconnection
Statement1 = connection.createStatement while (ResultSet1) { PreparedStatement = connection.prepareStatement PreparedStatement.execute PreparedStatement.close
Statement2 = connection.createStatement while (ResultSet2) { PreparedStatement = connection.prepareStatement PreparedStatement.execute PreparedStatement.close
Statement1.close
Statement3 = connection.createStatement while (ResultSet3) { PreparedStatement = connection.prepareStatement PreparedStatement.execute PreparedStatement.close
Statement2.close
Statement4 = connection.createStatement while (ResultSet4) { PreparedStatement = connection.prepareStatement PreparedStatement.execute PreparedStatement.close }
Statement3.close Statement4.close } } }
A Statement4 az, ahol összességében mindössze 40.000 rekordot szeretnék beszúrni. fölötte kevesebb, afölött néhány száz, afölött meg néhány 10.
A Statement4 olyan 6.000 rekordig nagyon jól megy, másodpercenként kb 80 insert, de az után egyre lassabb. 30.000 fölött már gyakorlatilag másodpercenként 1 rekord. (a Statement3 -on belül a Statement4 teljesen változó mennyiségben kerül iterálás alá valamikor 10 valamikor 4000 valamikor 200. Az összes eredménye 40.000+)
Nem értem mitől lassul be. A statementeket lezárom ahol kell (az inserteket mindig helyben), memóriába nem kerül be semmi, rekordmennyiségtől függően lassulásra hajlamos lekérdezés nincs, szóval egyszerűen nem értem, hogy mi a helyzet.
van valami trükk? Biztos valamit nem jól csinálok, mert ennél szerintem többet kéne bírnia :)
Köszönöm a válaszokat,
anyul
u.i.: próbálkoztam addBatch - executeBatch párossal, de nem javított a helyzeten. |