Comment surveiller les flux Spring Data JPA
L'éditeur php Youzi vous propose des questions et réponses Java sur la surveillance du flux Spring Data JPA. Pendant le développement, la surveillance des flux de données en temps réel est essentielle pour l'optimisation des performances du système et le dépannage. Cet article explique comment surveiller le flux Spring Data JPA, vous permettant de mieux comprendre le processus de traitement des données, de détecter les problèmes à temps et de les gérer en conséquence. Discutons de la manière de surveiller efficacement le flux Spring Data JPA et d'améliorer la stabilité et les performances du système !
Contenu de la question
J'essaie d'utiliser le streaming jpa de données Spring comme expliqué sur ce blog. Cependant, je ne peux pas surveiller le processus ou la progression avec aucun journal. Dois-je voir plusieurs requêtes SQL imprimées dans le journal lorsque le processus tente d'extraire des données par lots ? Si ce n'est pas le cas, comment puis-je savoir que toutes les lignes ne sont pas chargées en même temps ?
D'autres blogs (comme celui-ci et celui-ci ) m'ont suggéré de convertir mysql en hint_fetch_size
设置为 integer.min_value
, ce qui, à mon avis, pourrait être la solution, mais cela génère l'exception suivante :
2024-01-29 14:40:20.843 avertissement 78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper : erreur sql : 0, sqlstate : s1000 2024-01-29 14:40:20.843 Erreur 78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper : jeu de résultats de streaming com.mysql.cj.protocol.a.result resultsetrowsstreaming@. 4ca63fa5 est toujours actif. Aucune déclaration ne doit être émise lorsqu'un ensemble de résultats de streaming est ouvert et utilisé sur une connexion donnée. Avant d'essayer d'autres requêtes, assurez-vous d'avoir appelé .close() sur tous les jeux de résultats de streaming actifs. Heure de fin : 48 org.springframework.orm.jpa.jpasystemexception : impossible d'extraire l'ensemble de résultats ; l'exception imbriquée est org.hibernate.exception.genericjdbcexception : impossible d'extraire l'ensemble de résultats sur org.springframework.orm.jpa.vendor.hibernatejpadialect.converthibernateaccessexception(hibernatejpadialect.java:331)
Voici mon code de dépôt :
@QueryHints(value = { @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE), @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_CACHEABLE, value = "false"), @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_READONLY, value = "true"), }) @Query("SELECT s FROM Salary s") Stream<Salary> findAllStream();
Je suppose que j'aimerais obtenir une garantie si ce qui précède est la bonne façon d'utiliser les requêtes de flux dans Spring Data JPA, car je ne peux pas surveiller moi-même de manière fiable les performances du streaming ?
Mise à jour
L'exception ci-dessus se produit en raison d'appels répétés à la méthode findallstream dans la même méthode d'appel. La suppression de l’un d’eux a corrigé l’exception.
Solution de contournement
Je ne trouve aucune configuration de journal indiquant si les données sont récupérées par lots. Mais j'ai trouvé un moyen de tester les performances localement.
Pour tester la fonctionnalité de streaming, je dois accéder à une base de données contenant des millions d'enregistrements. J'utilise l'image Docker https://www.php.cn/link/7092d5eb1bbca1a22bdc69ba3f517e68 pour utiliser les données des employés MySQL
Après avoir configuré l'image Docker, j'ai du mal à connecter MySQL Workbench au serveur. Il semble que l'image Docker ne soit pas configurée pour accepter les connexions SSL par défaut. J'ai dû désactiver le drapeau use ssl
pour établir la connexion. Ce paramètre apparaît dans le workbench mysql sous l'onglet ssl.
La chaîne de connexion dans l'application doit également être configurée comme suit :
spring.datasource.url=jdbc:mysql://localhost:3307/employees?verifyservercertificate=false&usessl=false&requiressl=false
Les données de la base de données des employés consistent en une table nommée salaries
qui compte environ 2,8 millions de lignes.
Pour les tests, j'ai écrit une petite application jpa Spring Data qui possède les méthodes suivantes dans la classe du référentiel et un contrôleur simple pour appeler ces méthodes :
@Override List<Salary> findAll(); @QueryHints(value = { @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE), @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_CACHEABLE, value = "false"), @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_READONLY, value = "true"), }) @Query("SELECT s FROM Salary s") Stream<Salary> findAllStream();
J'ai ensuite écrit un petit morceau de code qui a converti les données lues en un objet json, puis je les ai réécrites dans le fichier à l'aide de plusieurs threads. Il s’agit de simuler le traitement dans des cas réels.
C'est ce que j'ai observé.
-
L'utilisation de la mémoire augmente considérablement lors de l'utilisation de la méthode de liste. La requête initiale a pris la plupart du temps, mais une fois toutes les données chargées, le traitement proprement dit des données s'est terminé rapidement.
-
Lors de l'utilisation de la méthode stream, l'impact sur l'utilisation de la mémoire est presque imperceptible. Mais dans l’ensemble, les performances de la partie traitement de complétion sont similaires, voire pires, par rapport à la méthode de liste.
Conclusion
Mes découvertes ci-dessus m'amènent à conclure que l'approche du référentiel est stream
返回类型仅应在存在内存不足风险时使用,即获得 out 内存异常
. Sinon, si votre application s'exécute déjà sur un serveur suffisamment grand, l'impact global sur l'utilisation de la mémoire sera à peine perceptible et ne sera que temporaire si votre processus se termine rapidement.
Statistiques d'utilisation de la mémoire du profileur IntelliJ
- gauche -> lorsque la méthode de liste s'exécute
- Droit -> Lorsque la méthode stream est en cours d'exécution
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser les scripts PHP pour la surveillance des journaux dans les systèmes Linux Avec l'application généralisée des systèmes Linux, la surveillance du système et l'analyse des journaux sont devenues de plus en plus importantes. Parmi eux, l'utilisation de scripts PHP pour la surveillance des journaux est une méthode courante. Cet article explique comment utiliser les scripts PHP pour implémenter une surveillance simple des journaux et fournit des exemples de code spécifiques. 1. Créez un fichier de script PHP. Tout d'abord, créez un fichier nommé "log_monitor.php" sur le système Linux. Ce fichier sera utilisé pour surveiller le spécifié.

Comment mettre en œuvre la surveillance des journaux et les alertes via les outils Linux ? Dans le processus quotidien de gestion, d'exploitation et de maintenance des serveurs, la surveillance et l'analyse en temps réel des journaux sont très importantes. Le système Linux fournit des outils puissants qui peuvent nous aider à mettre en œuvre des fonctions de surveillance des journaux et d'alarme. Cet article explique comment utiliser les outils Linux pour surveiller et alerter les journaux, et fournit quelques exemples de code. Utilisez la commande tail pour afficher les journaux en temps réel. La commande tail peut afficher le contenu mis à jour des fichiers journaux en temps réel. En utilisant la commande tail, nous pouvons

Comment résoudre le problème des journaux système manquants sur les serveurs Linux Résumé : Sur les serveurs Linux, les journaux système sont très importants pour la surveillance et le dépannage. Cependant, il arrive parfois que les journaux système soient perdus ou ne soient pas enregistrés correctement, ce qui entraîne un dépannage. Cet article présentera quelques solutions pour aider à résoudre le problème de perte de journaux système sur les serveurs Linux. Introduction : Sur un serveur Linux, le journal système est une ressource très importante. Il est utilisé pour enregistrer l'état d'exécution, les informations d'erreur, les informations d'avertissement et.

En tant que langage de programmation efficace et concis, Golang présente d'excellentes performances en matière de traitement de fichiers. Parmi eux, la surveillance des fichiers est une fonction très courante et utile qui peut nous aider à surveiller les modifications dans le système de fichiers en temps réel et à effectuer le traitement correspondant en temps opportun. Cet article expliquera comment Golang implémente la fonction de surveillance des fichiers et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et appliquer cette fonction. Pourquoi avez-vous besoin de fonctionnalités de surveillance de fichiers ? Dans le processus de développement logiciel moderne, l’exploitation des fichiers constitue un maillon très important. en particulier

Compilation du code source et installation de PHPP DOMySQL : conseils pratiques et précautions. PHP est un langage de script côté serveur largement utilisé, et MySQL est un système de gestion de bases de données relationnelles open source populaire. La combinaison des deux peut fournir un support puissant pour le développement de sites Web. Dans le développement réel, il est souvent nécessaire d'utiliser l'extension PHPPDO pour se connecter à la base de données MySQL afin de réaliser le stockage et le fonctionnement des données. Cet article explique comment installer PHP via la compilation du code source, configurer PDO pour se connecter à MySQL et fournir

Résoudre le problème de la perte de service Oracle La base de données Oracle est le système de gestion de base de données relationnelle préféré de nombreuses entreprises et organisations. Cependant, en utilisation réelle, une perte de service de base de données se produit parfois, affectant le fonctionnement normal du système. Cet article explique comment résoudre le problème de la perte de service Oracle et donne des exemples de code spécifiques pour aider les lecteurs à mieux gérer cette défaillance courante de la base de données. 1. Vérifiez l'état du service Oracle. Avant de résoudre le problème de perte du service Oracle, vous devez d'abord confirmer l'état actuel du service.

Avec l'avènement d'Internet et de l'ère du Big Data, la base de données MySQL, en tant que système de gestion de base de données open source couramment utilisé, est adoptée par de plus en plus d'entreprises et d'organisations. Cependant, dans le processus de candidature réel, diverses erreurs et exceptions peuvent survenir dans la base de données MySQL, telles que des pannes du système, des délais d'expiration des requêtes, des blocages, etc. Ces anomalies auront un impact sérieux sur la stabilité du système et l'intégrité des données. Par conséquent, détecter et analyser rapidement les erreurs et anomalies MySQL est une tâche très importante. La surveillance des journaux est une fonction importante de MySQL

Comparaison des files d'attente Redis et de la stabilité de MySQL: Pourquoi Redis est-il sujet à la perte de données? Dans l'environnement de développement, en utilisant des cadres Php7.2 et ThinkPhp, nous sommes souvent confrontés au choix de la coopération ...