En supposant que vous ayez déjà vérifié les éléments de base du réseau tels que les interfaces, les pare-feu, les proxys, ainsi que les éléments matériels du serveur de base de données.
Option 1 :
Au lieu de :
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");
essayez d'utiliser :
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");
Plus de détails ici
Option 2 :Récupérer la taille
Comme l'a fortement souligné Stephen, la fetchsize semble trop grande.
Et, pour une taille de récupération de 500 000, quel est votre -Xms et -Xmx. De plus, dans le profileur, quelle est la taille de tas la plus élevée ?
Option 3 :BD
-
Vérifier les index et le plan de requête pour
src_schema.big_table_view
-
Est-ce un outil ou un système d'application. S'il ne s'agit que d'un outil, vous pouvez ajouter des degrés parallèles, des indications d'index, un partitionnement, etc. en fonction des capacités du système de base de données
Option 4 :Fils
Dites
Vous pouvez démarrer
Cela dit, tout cela ne devrait jamais être un code prédéfini comme c'est le cas maintenant.
Option 5 :
Au lieu de
Vous pourriez utiliser
Cela évite de créer 500000
Option 6 :
En attendant, vous pouvez également vérifier auprès de votre administrateur de base de données tout problème lié au système de base de données et émettre une SR avec l'assistance Oracle
.n
n
Threads d'écrivain, chacun configuré pour traiter un certain compartiment, par ex. thread1 traite de 0 à 10000, écrivant dans n
différents fichiers, et une fois toutes les annonces terminées, publiez la jointure, fusionnez les fichiers ensemble, de préférence à l'aide d'une commande de système d'exploitation de bas niveau.'n'
et les compartiments doivent être calculés au moment de l'exécution. Et créer un nombre de threads supérieur à ce que votre système prend en charge ne fait que foutre le bordel.select * from src_schema.big_table_view
SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view
StringBuilders
et Strings
. (En supposant qu'aucun autre formatage complexe n'est impliqué). CHR(9) est le caractère de tabulation.