Maison >base de données >tutoriel mysql >Comment diffuser efficacement de grands ensembles de résultats MySQL au printemps sans erreurs OutOfMemory ?
Diffusion en continu de grands ensembles de résultats MySQL
Description du problème
Lors du chargement de grandes tables MySQL dans un Application Spring, des exceptions OutOfMemory se produisent en raison des tentatives du pilote de charger la table entière en mémoire. Malgré la définition de la taille de récupération sur Integer.MIN_VALUE, la fermeture de ResultSets entraîne des problèmes de blocage. Le blocage persiste même pour les petites tables et empêche la fermeture de la connexion, ce qui entraîne la trace de pile suivante :
[Stack trace of the hang inserted here]
Solution
La définition de la taille de récupération uniquement est insuffisante. Le pilote MySQL JDBC nécessite une méthode de création d'instruction spécifique :
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
Précautions et implications
Cette approche comporte plusieurs mises en garde :
Considérations supplémentaires
Si l'exception OutOfMemory persiste, envisagez de mettre en œuvre un traitement immédiat des données extraites de la base de données pour éviter une allocation de mémoire excessive. Cela peut nécessiter une restructuration importante du code et une approche différente du contrôle de flux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!