Ако приемем, че вече сте проверили основните мрежови неща като интерфейси, защитни стени, проксита, както и хардуерните елементи на DB сървъра.
Вариант 1:
Вместо :
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");
опитайте да използвате:
OracleDataSource ods = new OracleDataSource();
java.util.Properties prop = new java.util.Properties();
prop.setProperty("MinLimit", "2");
prop.setProperty("MaxLimit", "10");
String url = "jdbc:oracle:oci8:@//xxx.xxx.xxx.xxx:1521/orcl";
ods.setURL(url);
ods.setUser("USER");
ods.setPassword("PWD");
ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheProperties (prop);
ods.setConnectionCacheName("ImplicitCache01");
Повече подробности тук
Опция 2:Fetchsize
Както беше подчертано от Стивън, fetchsize изглежда твърде голям.
И за размер на извличане от 500 000 какво е вашето -Xms и -Xmx. Също така, в Profiler, кой е най-големият размер на купчината?
Вариант 3:DB
-
Проверете индексите и плана за заявка за
src_schema.big_table_view
-
Това инструмент ли е или система за приложение. Ако е само инструмент, можете да добавите паралелни степени, подсказки за индекси, разделяне и т.н. въз основа на възможностите на DB системите
Опция 4:Нишки
Кажете n
<Брой ядра на сървъра за приложения
Можете да започнете n
Нишки на писател, всяка конфигурирана да обработва определена кофа, напр. thread1 обработва от 0 до 10000, записвайки в n
различни файлове и след като всички реклами са готови, публикувайте съединяване, обединете файловете заедно, за предпочитане с помощта на OS команда от ниско ниво.
Въпреки това, всичко това никога не трябва да бъде предварително дефиниран код, както сега. 'n'
и кофите трябва да се изчисляват по време на изпълнение. И създаването на брой нишки, по-голям от този, който поддържа вашата система, само се прецаква.
Вариант 5:
Вместо
select * from src_schema.big_table_view
Можете да използвате
SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view
Това избягва създаването на 500 000 StringBuilders
и Strings
. (Ако приемем, че няма друго сложно форматиране). CHR(9) е табулаторът.
Вариант 6:
Междувременно можете също да проверите с вашия DBA за всякакви проблеми със системата на DB и да повдигнете SR с поддръжка на Oracle .