sql >> Databasteknik >  >> RDS >> Sqlserver

Vad gör Statement.setFetchSize(nSize)-metoden egentligen i SQL Server JDBC-drivrutinen?

I JDBC, setFetchSize(int) Metoden är mycket viktig för prestanda och minneshantering inom JVM eftersom den styr antalet nätverksanrop från JVM till databasen och på motsvarande sätt mängden RAM som används för ResultSet-bearbetning.

Om setFetchSize(10) anropas och drivrutinen ignorerar det, finns det förmodligen bara två alternativ:

  1. Testa en annan JDBC-drivrutin som följer tipset om hämtningsstorlek.
  2. Titta på drivrutinsspecifika egenskaper på anslutningen (URL och/eller egenskapskartan när man skapar anslutningsinstansen).

RESULTAT-SET är antalet rader som är sorterade på DB som svar på frågan. ROW-SET är den bit av rader som hämtas ut från RESULT-SET per anrop från JVM till DB. Antalet av dessa anrop och resulterande RAM som krävs för bearbetning beror på inställningen för hämtningsstorlek.

Så om RESULTAT-SET har 100 rader och hämtningsstorleken är 10, kommer det att finnas 10 nätverksanrop för att hämta all data, med ungefär 10*{row-content-size} RAM vid varje given tidpunkt.

Den förinställda hämtningsstorleken är 10, vilket är ganska litet. I det aktuella fallet verkar det som att föraren ignorerar inställningen för hämtningsstorlek och hämtar all data i ett samtal (stort RAM-krav, optimalt minimalt nätverksanrop).

Vad händer under ResultSet.next() är att den faktiskt inte hämtar en rad åt gången från RESULTAT-SET. Den hämtar det från den (lokala) ROW-SET och hämtar nästa ROW-SET (osynligt) från servern när den blir uttömd på den lokala klienten.

Allt detta beror på drivrutinen eftersom inställningen bara är ett "tips" men i praktiken har jag funnit att det är så det fungerar för många drivrutiner och databaser (verifierat i många versioner av Oracle, DB2 och MySQL).



  1. SQL Hur man uppdaterar SUMMA för kolumn över grupp i samma tabell

  2. Android - Bättre tillvägagångssätt för att ladda SD-KORT-bilder

  3. 2017 @ Severalnines:Vi firar våra kundberättelser

  4. Hur MariaDB uppnår global skala med Xpand