Wenn die Lobster Data Platform eine Datenbank über eine Verbindung im Modus Via Bridge (Standard) abfragt, ruft sie die Ergebnisse in Stapeln ab. Die Fetch Size steuert zwei Werte:
wie viele Zeilen die Bridge in einer HTTP-Antwort an die Plattform überträgt,
wie viele Zeilen der JDBC-Treiber der Bridge pro DB-Roundtrip aus der Datenbank vorablädt.
Der Standardwert beträgt 500 Zeilen pro HTTP-Antwort, sofern auf keiner der beiden Seiten ein Wert konfiguriert ist.
Bei Verbindungen mit vielen schmalen Zeilen (z. B. ID-Abfragen, Referenztabellen) verringert eine höhere Fetch Size die Zahl der HTTP-Roundtrips zwischen Plattform und Bridge und erhöht den Durchsatz. Es gilt jedoch ein HTTP-Antwortlimit von 2 MB. Siehe Abschnitt /v1/docs/jdbc-fetch-size#bekannte-einschränkung-2mbhttplimit.
Konfiguration über die Bridge-JVM-Property (primär)
-Dde.lobster.remoteJdbc.fetchSize=<N>Wird im Bereich der JVM-Argumente in der Datei ./bin/bridge.json der Bridge-Installation gesetzt. Diese eine Property steuert beide Ebenen gleichzeitig:
HTTP batch size (Bridge zur Plattform): Die Bridge verwendet
Nals frame size und überschreibt damit den von der Plattform angeforderten Wert.DB cursor size (Bridge zur Datenbank): Die Bridge ruft vor dem Lesen
ResultSet.setFetchSize(N)auf und gleicht so den internen Prefetch des JDBC-Treibers an. Dies ist ein Hinweis; einige Treiber ignorieren ihn (siehe Abschnitt /v1/docs/jdbc-fetch-size#datenbankspezifisches-verhalten-von-resultsetsetfetchsize).
Fehlt die Property, verwendet die Bridge die von der Plattform angeforderte batch size (Standard 500) und ruft setFetchSize() nicht auf.
Bekannte Einschränkung: 2-MB-HTTP-Limit
Der HTTP-Client des RemoteJdbcDriver (Jetty) hat einen fest eingestellten Antwortpuffer von 2 MB.
Eine Überschreitung erzeugt folgende Meldung (siehe Control Center > Logs > Meldungen pro Profil):
java.lang.IllegalArgumentException: Buffering capacity 2097152 exceededDas 2-MB-Limit erlaubt beim Standardwert von 500 Zeilen im Mittel etwa 4 KB pro Zeile (inklusive Protobuf-Overhead). Für Verbindungen mit breiten Zeilen oder LOB-Spalten liegt der Wert für N bei 100–200.
Überschreitet eine einzelne Antwort 1,7 MB, schreibt die Bridge eine WARN-Meldung in das Bridge-Log, höchstens einmal alle 10 Minuten. Da die Warnschwelle unter dem Limit liegt, geht die WARN-Meldung im Bridge-Log dem clientseitigen Fehler voraus.
WARN de.lobster.remote.RemoteJdbcServlet - SYSTEM:DATAWIZARD:TUNNEL response size 1823456 bytes for alias 'mydb' approaches the 2 MB Jetty client limit — reduce -Dde.lobster.remoteJdbc.fetchSize to avoid 'Buffering capacity 2097152 exceeded'Datenbankspezifisches Verhalten von ResultSet.setFetchSize()
setFetchSize() ist unverbindlich (ein JDBC-Hint). Der Treiber kann den Wert befolgen oder ignorieren. Beispiele:
Datenbank | Verhalten |
|---|---|
PostgreSQL | Wird bei |
MySQL / MariaDB | Positive Werte puffern zuerst alle Zeilen im Heap. Echtes Streaming erfordert |
SQL Server | Adaptive Pufferung (Standard): große Ergebnismengen werden automatisch gestreamt; die Fetch Size hat dabei geringe Wirkung. Mit |
Oracle | Standard-Prefetch: 10 Zeilen. |
H2 / HSQLDB | Wird meist ignoriert; alle Zeilen werden auf einmal abgerufen. |
Weitere Parameter
HINWEIS:
Die Konfiguration in
./bin/bridge.jsonist der empfohlene Weg. Die Property lässt sich je Bridge-Instanz unabhängig einstellen, und die Änderung wird bereits mit einem Neustart der Bridge wirksam. Ein Neustart der Plattform ist deutlich störender.
Platform-JVM-Property (Via Bridge (Standard))
-Dde.lobster.remoteJdbc.fetchSize=<N>Wird im Bereich der JVM-Argumente in der Datei ./bin/platform.json der Plattform gesetzt. Steuert nur die HTTP batch size, also wie viele Zeilen die Plattform pro Antwort anfordert. Die Bridge verwendet diesen Wert, wenn sie keine eigene Property gesetzt hat. Der DB-Cursor auf der Bridge-Seite wird nicht beeinflusst.
Die JDBC-URL akzeptiert zusätzlich einen verbindungsbezogenen Parameter fetch_size=N. Die Plattform erzeugt die URL jedoch automatisch; sie ist nicht durch Anwender editierbar.
Bridge-JVM-Property (Via Bridge (Legacy))
-Dde.lobster.tunnel.fetchSize=<N>Wird im Bereich der JVM-Argumente in der Datei ./bin/bridge.json der Bridge-Installation gesetzt. Gilt nur für den älteren TunnelDriver, also für Verbindungen im Modus Via Bridge (Legacy). Ruft vor dem Materialisieren der Ergebnismenge ResultSet.setFetchSize(N) auf und wirkt nur auf den DB-Cursor. Die vollständige Ergebnismenge wird weiterhin in einer einzigen HTTP-Antwort gesendet; diese Property begrenzt die HTTP-Antwortgröße nicht.
Empfehlungen
Szenario | Empfohlene Maßnahme |
|---|---|
Standardinstallation, keine bekannten Probleme | Keine Konfiguration vornehmen. |
Via Bridge (Standard) – 2-MB-Limit wird erreicht |
|
Via Bridge (Standard) – schmale Zeilen, viele Roundtrips |
|
Via Bridge (Standard) – Oracle mit vielen DB-Roundtrips |
|
Via Bridge (Standard) – PostgreSQL / MySQL mit großen Ergebnismengen | Fetch-Size-Tuning schützt den Bridge-Heap nicht (autocommit puffert alle Zeilen). Stattdessen Abfragen filtern oder Ergebnismengen begrenzen. |
Via Bridge (Legacy) – Oracle mit vielen DB-Roundtrips |
|
Via Bridge (Legacy) – PostgreSQL / MySQL | Fetch-Size-Tuning hat keine Wirkung; alle Zeilen werden gepuffert. |