Wie um herauszufinden, die optimale fetch-Größe für die select-Abfrage
In JDBC die Standard-fetch-Größe ist 10, aber ich denke, das ist nicht die beste-fetch-Größe, wenn ich eine million Zeilen. Ich verstehe, dass ein fetch-Größe zu niedrig ist reduziert die Leistung, sondern auch dann, wenn die fetch-Größe ist zu hoch.
Wie finde ich die optimale Größe? Und hat dies Auswirkungen auf die DB-Seite, macht es zu kauen, bis eine Menge Speicher?
Es nicht zu kauen, bis keine Speicher. Oracle verwendet producer-consumer design pattern so entstehenden Zeilen generiert werden, auf Anfrage(wenn Sie anrufen, Holen). Einstellung-fetch-Größe ist, soll zur Reduzierung der Anzahl von round-trips zwischen der Datenbank und der Anwendung. Ich bin mir nicht sicher, JDBC, aber zumindest im OCI können Sie auch die Größe des Puffer in Byte(Megabyte).
Der Standardwert ist null.
hier heißt es "standardmäßig, wenn die Oracle-JDBC eine Abfrage ausführt, erhält er das Ergebnis 10 Zeilen zu einer Zeit aus der Datenbank-cursor. "docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm
JDBC verfügt nicht über eine Standard-fetch-Größe. Es ist bis zu den einzelnen Treibern. Und es gibt keine "optimale" fetch-Größe. Es kommt auf die Abfrage, und wie verarbeiten Sie Ihre Ergebnisse (und die Datenbank, die Sie verwenden, die Latenz der Verbindung, etc.). Es ist auch ein trade-off zwischen Zeit und Speicher.
Der Wert
Der Standardwert ist null.
hier heißt es "standardmäßig, wenn die Oracle-JDBC eine Abfrage ausführt, erhält er das Ergebnis 10 Zeilen zu einer Zeit aus der Datenbank-cursor. "docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm
JDBC verfügt nicht über eine Standard-fetch-Größe. Es ist bis zu den einzelnen Treibern. Und es gibt keine "optimale" fetch-Größe. Es kommt auf die Abfrage, und wie verarbeiten Sie Ihre Ergebnisse (und die Datenbank, die Sie verwenden, die Latenz der Verbindung, etc.). Es ist auch ein trade-off zwischen Zeit und Speicher.
Der Wert
0
für fetchSize
bedeutet, dass der Fahrer frei zu wählen, seinen eigenen Standard (obwohl der Treiber ist frei, Sie zu ignorieren, Ihren Hinweis wenn Sie einstellen, dass es alles andere als 0
).InformationsquelleAutor KKO | 2015-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als mit (fast) nichts, den Weg zu finden, die optimale Größe für einen bestimmten parameter ist die benchmark, die Arbeitsbelastung, die Sie versuchen zu optimieren, aber mit unterschiedlichen Werten der parameter. In diesem Fall würden Sie benötigen, um ausführen von code mit unterschiedlichen fetch-Größe Einstellungen, die Ergebnisse zu bewerten, und wählen Sie die optimale Einstellung.
In der überwiegenden Mehrzahl der Fälle, die Leute Holen fetch-Größe von 100 oder 1000, und stellt sich heraus, dass eine halbwegs optimale Einstellung. Der performance-Unterschied zwischen den Werten an diesem Punkt sind in der Regel ziemlich minimal-man würde erwarten, dass die meisten den Unterschied in der Leistung zwischen den Läufen wurde das Ergebnis der normalen variation eher, als dass Sie durch änderungen, die in der fetch-Größe. Wenn Sie versuchen, um den letzten Funken Leistung für eine bestimmte Arbeitsauslastung in einer bestimmten Konfiguration, können Sie sicherlich tun, die Analyse. Für die meisten Leute, obwohl, 100 oder 1000 ist gut genug.
InformationsquelleAutor Justin Cave
Wenn Ihre Zeilen groß ist, dann Bedenken Sie, dass alle Zeilen Holen Sie sich auf einmal gespeichert werden, die in der Java-heap-in der Fahrer-interne Puffer. In 12c, Oracle hat den Datentyp VARCHAR(32k) Spalten, wenn Sie haben 50 von denen und Sie sind voll, als 1.600.000 Zeichen pro Zeile. Jedes Zeichen 2 Byte in Java. Also jede Zeile kann bis zu 3,2 MB. Wenn Sie das abrufen der Zeilen 100 und 100, dann brauchen Sie 320 MB heap zur Speicherung der Daten, und das ist nur ein Statement. So sollten Sie nur erhöhen die row-prefetch-Größe für die Abfragen fetch relativ kleinen Zeilen (klein in der Größe der Daten).
InformationsquelleAutor Jean de Lavarene
Den default-Wert des JDBC-fetch-size-Eigenschaft ist Treiber und-Treiber für Oracle ist es 10 in der Tat.
Für einige Abfragen fetch-Größe sollte größer, für manche kleiner.
Denke ich eine gute Idee, einige globalen - fetch-Größe für das gesamte Projekt und überschreiben es für einige einzelne Abfragen, wo Sie es soll größer sein.
Blick auf diese Artikel:
http://makejavafaster.blogspot.com/2015/06/jdbc-fetch-size-performance.html
gibt es Beschreibung darüber, wie fetch-Größe, die Global und überschreibt es für sorgfältig ausgewählte Abfragen mit unterschiedlichen Ansätzen: Hibernate, JPA, Spring jdbc-templates oder core-jdbc-API. Und einige einfache benchmark für oracle Datenbank.
Als Faustregel können Sie:
InformationsquelleAutor przemek hertel
JDBC hat Standard-prefetch-Größe der 10. Check-out
OracleConnection.getDefaultRowPrefetch in JDBC-Javadoc
InformationsquelleAutor Nirmala