sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad gør Statement.setFetchSize(nSize)-metoden virkelig i SQL Server JDBC-driveren?

I JDBC er setFetchSize(int) metoden er meget vigtig for ydeevne og hukommelsesstyring i JVM'en, da den styrer antallet af netværksopkald fra JVM'en til databasen og tilsvarende mængden af ​​RAM, der bruges til ResultSet-behandling.

Hvis setFetchSize(10) kaldes, og driveren ignorerer det, er der sandsynligvis kun to muligheder:

  1. Prøv en anden JDBC-driver, der overholder tippet om hentning af størrelse.
  2. Se på driverspecifikke egenskaber på forbindelsen (URL og/eller egenskabskort, når du opretter forbindelsesforekomsten).

RESULTAT-SETT er antallet af rækker, der er rangeret på DB som svar på forespørgslen. ROW-SET er den del af rækker, der hentes ud af RESULT-SET pr. opkald fra JVM til DB. Antallet af disse opkald og resulterende RAM, der kræves til behandling, afhænger af indstillingen for hentestørrelse.

Så hvis RESULTAT-SET har 100 rækker og hente-størrelsen er 10, vil der være 10 netværksopkald til at hente alle data, ved at bruge ca. 10*{row-content-size} RAM på et givet tidspunkt.

Standard-hentningsstørrelsen er 10, hvilket er ret lille. I det nævnte tilfælde ser det ud til, at driveren ignorerer hentestørrelsesindstillingen og henter alle data i et opkald (stort RAM-krav, optimalt minimalt netværksopkald).

Hvad sker der under ResultSet.next() er, at den faktisk ikke henter en række ad gangen fra RESULTAT-SET. Det henter det fra det (lokale) ROW-SET og henter det næste ROW-SET (usynligt) fra serveren, efterhånden som det bliver udtømt på den lokale klient.

Alt dette afhænger af driveren, da indstillingen kun er et 'tip', men i praksis har jeg fundet ud af, at det er sådan, det fungerer for mange drivere og databaser (verificeret i mange versioner af Oracle, DB2 og MySQL).



  1. Vedhæft en database i SQLite

  2. Er det muligt at sende tabelnavn som en parameter i Oracle?

  3. MySQL FEJL 1045 (28000):Adgang nægtet for brugeren 'bill'@'localhost' (ved hjælp af adgangskode:JA)

  4. Migrering fra Postgres til SQL Server 2008