Maison >base de données >tutoriel mysql >Comment puis-je diffuser efficacement de grands ensembles de résultats MySQL pour éviter les erreurs de mémoire ?

Comment puis-je diffuser efficacement de grands ensembles de résultats MySQL pour éviter les erreurs de mémoire ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 05:37:09889parcourir

How Can I Efficiently Stream Large MySQL Result Sets to Avoid Memory Errors?

Diffusion en continu de grands ensembles de résultats avec MySQL

Lorsque vous travaillez avec de grandes tables dans MySQL, une consommation excessive de ressources et des erreurs de mémoire peuvent survenir en raison de la valeur par défaut comportement des pilotes JDBC chargeant des jeux de résultats entiers en mémoire. Pour atténuer cela, il est essentiel de mettre en œuvre des techniques appropriées pour diffuser les données plutôt que de tout charger en même temps.

Approche

La question fournie suggère d'utiliser Statement.setFetchSize(Integer .MIN_VALUE); pour limiter le chargement des données, mais cela seul est insuffisant. Selon la documentation du pilote MySQL JDBC, définir l'ensemble de résultats sur TYPE_FORWARD_ONLY et CONCUR_READ_ONLY est nécessaire pour un streaming efficace :

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

Cependant, il est crucial de noter que cette approche présente des inconvénients potentiels :

  • Toutes les lignes de l'ensemble de résultats doivent être traitées avant d'émettre d'autres requêtes sur le connexion.
  • Les verrous ne sont libérés qu'une fois la transaction terminée ou lorsque tous les résultats sont lus ou que l'ensemble de résultats actif est fermé.

Autres considérations

Si la définition du jeu de résultats sur TYPE_FORWARD_ONLY et CONCUR_READ_ONLY ne résout pas les problèmes de mémoire, la cause sous-jacente peut être le stockage des données dans La mémoire de Java avant son traitement. Pour résoudre ce problème, un traitement immédiat des données dès leur arrivée est nécessaire, ce qui peut impliquer des modifications importantes du code. Pour plus d'informations, reportez-vous au lien fourni dans la réponse, qui répond à un problème similaire.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn