So überwachen Sie Spring Data JPA-Streams
Der
php-Editor Youzi bietet Ihnen Java-Fragen und Antworten zur Überwachung des Spring Data JPA-Flusses. Während der Entwicklung ist die Überwachung des Datenflusses in Echtzeit für die Optimierung der Systemleistung und Fehlerbehebung von entscheidender Bedeutung. In diesem Artikel erfahren Sie, wie Sie den JPA-Fluss von Spring Data überwachen, damit Sie den Datenverarbeitungsprozess besser verstehen, Probleme rechtzeitig erkennen und entsprechend behandeln können. Lassen Sie uns besprechen, wie Sie den JPA-Fluss von Spring Data effektiv überwachen und die Systemstabilität und -leistung verbessern können!
Frageninhalt
Ich versuche, Spring Data JPA-Streaming zu verwenden, wie in diesem Blog erläutert. Allerdings kann ich den Prozess oder Fortschritt nicht mit Protokollen überwachen. Sollte ich im Protokoll mehrere SQL-Abfragen sehen, wenn der Prozess versucht, Daten stapelweise zu extrahieren? Wenn nicht, woher weiß ich dann, dass nicht alle Zeilen auf einmal geladen werden?
Andere Blogs (wie dieser und dieser) schlugen vor, dass ich MySQL in hint_fetch_size
设置为 integer.min_value
konvertieren sollte, was meiner Meinung nach die Lösung sein könnte, aber dies löst die folgende Ausnahme aus:
29.01.2024 14:40:20.843 Warnung 78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper: sql Error: 0, sqlstate: s1000 29.01.2024 14:40:20.843 Fehler 78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper: Streaming-Ergebnissatz com.mysql.cj.protocol.a.result. 4ca63fa5 ist noch aktiv. Es dürfen keine Anweisungen ausgegeben werden, während ein Streaming-Ergebnissatz geöffnet ist und für eine bestimmte Verbindung verwendet wird. Bevor Sie weitere Abfragen versuchen, stellen Sie sicher, dass Sie .close() für alle aktiven Streaming-Ergebnismengen aufgerufen haben. Endzeit: 48 org.springframework.orm.jpa.jpasystemException: Ergebnismenge kann nicht extrahiert werden; verschachtelte Ausnahme ist org.hibernate.Exception.genericjdbceception: Ergebnismenge kann nicht extrahiert werden unter org.springframework.orm.jpa.vendor.hibernatejpadialect.converthibernateaccessException(hibernatejpadialect.java:331)
Das ist mein Repository-Code:
@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();
Ich denke, ich würde gerne eine Garantie erhalten, ob die oben genannte Methode die richtige Art ist, Stream-Abfragen in Spring Data JPA zu verwenden, da ich die Leistung des Streamings selbst nicht zuverlässig überwachen kann?
Aktualisiert
Die obige Ausnahme tritt aufgrund wiederholter Aufrufe der findallstream-Methode in derselben aufrufenden Methode auf. Durch das Entfernen einer davon wurde die Ausnahme behoben.
Problemumgehung
Ich kann keine Protokollkonfiguration finden, die anzeigt, ob die Daten stapelweise abgerufen werden. Aber ich habe eine Möglichkeit gefunden, die Leistung lokal zu testen.
Um die Streaming-Funktionalität zu testen, muss ich auf eine Datenbank zugreifen, die Millionen von Datensätzen enthält. Ich verwende das Docker-Image https://www.php.cn/link/7092d5eb1bbca1a22bdc69ba3f517e68, um MySQL-Mitarbeiterdaten zu verwenden
Nachdem ich das Docker-Image eingerichtet habe, habe ich Probleme, MySQL Workbench mit dem Server zu verbinden. Es sieht so aus, als ob das Docker-Image standardmäßig nicht für die Annahme von SSL-Verbindungen konfiguriert ist. Ich musste das use ssl
-Flag deaktivieren, um die Verbindung herzustellen. Diese Einstellung wird in der MySQL-Workbench auf der Registerkarte „SSL“ angezeigt.
Der Verbindungsstring in der Anwendung muss außerdem wie folgt konfiguriert sein:
spring.datasource.url=jdbc:mysql://localhost:3307/employees?verifyservercertificate=false&usessl=false&requiressl=false
Die Daten in der Mitarbeiterdatenbank bestehen aus einer Tabelle mit dem Namen salaries
, die etwa 2,8 Millionen Zeilen enthält.
Zum Testen habe ich eine kleine Spring Data JPA-Anwendung geschrieben, die die folgenden Methoden in der Repository-Klasse und einen einfachen Controller zum Aufrufen dieser Methoden enthält:
@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();
Ich habe dann einen kleinen Code geschrieben, der die gelesenen Daten in ein JSON-Objekt konvertierte und es dann mithilfe mehrerer Threads zurück in die Datei schrieb. Dies dient dazu, die Verarbeitung in realen Fällen zu simulieren.
Das habe ich beobachtet.
-
Der Speicherverbrauch erhöht sich erheblich, wenn die Listenmethode verwendet wird. Die erste Abfrage nahm die meiste Zeit in Anspruch, aber sobald alle Daten geladen waren, war die eigentliche Datenverarbeitung schnell abgeschlossen.
-
Bei Verwendung der Stream-Methode sind die Auswirkungen auf die Speichernutzung nahezu unmerklich. Insgesamt ist die Leistung des Vervollständigungsverarbeitungsteils jedoch ähnlich oder sogar schlechter als bei der Listenmethode.
Fazit
Meine obigen Erkenntnisse lassen mich zu dem Schluss kommen, dass der Repository-Ansatz stream
返回类型仅应在存在内存不足风险时使用,即获得 out 内存异常
ist. Andernfalls, wenn Ihre Anwendung bereits auf einem ausreichend großen Server ausgeführt wird, sind die Gesamtauswirkungen auf die Speichernutzung kaum spürbar und nur vorübergehend, wenn Ihr Prozess schnell abgeschlossen wird.
Speichernutzungsstatistiken vom Intellij Profiler
- links -> wenn die Listenmethode ausgeführt wird
- Richtig -> Wenn die Stream-Methode ausgeführt wird
Das obige ist der detaillierte Inhalt vonSo überwachen Sie Spring Data JPA-Streams. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Verwendung von PHP-Skripten zur Protokollüberwachung in Linux-Systemen Mit der weit verbreiteten Anwendung von Linux-Systemen sind Systemüberwachung und Protokollanalyse immer wichtiger geworden. Unter diesen ist die Verwendung von PHP-Skripten zur Protokollüberwachung eine gängige Methode. In diesem Artikel wird die Verwendung von PHP-Skripten zur Implementierung einer einfachen Protokollüberwachung vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Erstellen Sie zunächst eine PHP-Skriptdatei mit dem Namen „log_monitor.php“ auf dem Linux-System. Diese Datei wird zur Überwachung des angegebenen verwendet

Wie implementiert man Protokollüberwachung und -warnung über Linux-Tools? Im täglichen Serververwaltungs- sowie Betriebs- und Wartungsprozess ist die Echtzeitüberwachung und -analyse von Protokollen sehr wichtig. Das Linux-System bietet einige leistungsstarke Tools, die uns bei der Implementierung von Protokollüberwachungs- und Alarmfunktionen helfen können. In diesem Artikel wird erläutert, wie Sie Linux-Tools zum Überwachen und Warnen von Protokollen verwenden, und es werden einige Codebeispiele bereitgestellt. Verwenden Sie den Befehl tail, um Protokolle in Echtzeit anzuzeigen. Der Befehl tail kann den aktualisierten Inhalt von Protokolldateien in Echtzeit anzeigen. Mit dem tail-Befehl können wir das tun

So lösen Sie das Problem fehlender Systemprotokolle auf Linux-Servern Zusammenfassung: Auf Linux-Servern sind Systemprotokolle für die Überwachung und Fehlerbehebung sehr wichtig. Allerdings können Systemprotokolle manchmal verloren gehen oder nicht ordnungsgemäß aufgezeichnet werden, was eine Fehlerbehebung erforderlich macht. In diesem Artikel werden einige Lösungen vorgestellt, die dabei helfen, das Problem des Systemprotokollverlusts auf Linux-Servern zu lösen. Einführung: Auf einem Linux-Server ist das Systemprotokoll eine sehr wichtige Ressource. Es wird zum Aufzeichnen des Betriebsstatus, Fehlerinformationen, Warninformationen usw. verwendet

Als effiziente und prägnante Programmiersprache bietet Golang eine hervorragende Leistung bei der Dateiverarbeitung. Unter diesen ist die Dateiüberwachung eine sehr häufige und nützliche Funktion, mit deren Hilfe wir Änderungen im Dateisystem in Echtzeit überwachen und die entsprechende Verarbeitung zeitnah durchführen können. In diesem Artikel wird erläutert, wie Golang die Dateiüberwachungsfunktion implementiert, und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, diese Funktion besser zu verstehen und anzuwenden. Warum benötigen Sie Dateiüberwachungsfunktionen? Im modernen Softwareentwicklungsprozess ist der Dateibetrieb ein sehr wichtiges Glied. insbesondere

Quellcode-Kompilierung und Installation von PHPP DOMySQL: Praktische Tipps und Vorsichtsmaßnahmen PHP ist eine weit verbreitete serverseitige Skriptsprache, und MySQL ist ein beliebtes relationales Open-Source-Datenbankverwaltungssystem. Die Kombination der beiden kann eine leistungsstarke Unterstützung für die Website-Entwicklung bieten. In der tatsächlichen Entwicklung ist es häufig erforderlich, die PHPPDO-Erweiterung zu verwenden, um eine Verbindung zur MySQL-Datenbank herzustellen und Datenspeicherung und -betrieb zu erreichen. In diesem Artikel erfahren Sie, wie Sie PHP durch Quellcode-Kompilierung installieren, PDO für die Verbindung mit MySQL konfigurieren und bereitstellen

Mit dem Aufkommen des Internets und des Big-Data-Zeitalters wird die MySQL-Datenbank als häufig verwendetes Open-Source-Datenbankverwaltungssystem von immer mehr Unternehmen und Organisationen übernommen. Im eigentlichen Anwendungsprozess können jedoch verschiedene Fehler und Ausnahmen in der MySQL-Datenbank auftreten, z. B. Systemabstürze, Abfragezeitüberschreitungen, Deadlocks usw. Diese Anomalien haben schwerwiegende Auswirkungen auf die Systemstabilität und Datenintegrität. Daher ist die schnelle Erkennung und Analyse von MySQL-Fehlern und -Anomalien eine sehr wichtige Aufgabe. Die Protokollüberwachung ist eine wichtige Funktion von MySQL

Lösung des Problems des Verlusts von Oracle-Diensten Die Oracle-Datenbank ist für viele Unternehmen und Organisationen das bevorzugte relationale Datenbankverwaltungssystem. Bei der tatsächlichen Verwendung kommt es jedoch manchmal zu einem Verlust von Datenbankdiensten, der den normalen Betrieb des Systems beeinträchtigt. In diesem Artikel wird erläutert, wie das Problem des Verlusts von Oracle-Diensten gelöst werden kann, und es werden spezifische Codebeispiele angegeben, die den Lesern helfen sollen, diesen häufigen Datenbankfehler besser zu bewältigen. 1. Überprüfen Sie den Oracle-Dienststatus. Bevor Sie das Problem des Oracle-Dienstverlusts lösen, müssen Sie zunächst den aktuellen Status des Dienstes bestätigen.

Vergleich von Redis -Warteschlangen und MySQL -Stabilität: Warum ist Redis für den Datenverlust anfällig? In der Entwicklungsumgebung, die mit PHP7.2- und ThinkPhp -Frameworks verwendet wird, stehen wir häufig vor der Wahl der Zusammenarbeit ...