AFAIK er ingen server-side batching i fe/be protokol
, så PgJDBC kan ikke bruge det. . Opdater :Nå, jeg tog fejl. PgJDBC (nøjagtig fra 9.3) gør send batches af forespørgsler til serveren hvis den ikke behøver at hente genererede nøgler . Den sætter bare en masse forespørgsler i kø i sendebufferen uden at synkronisere med serveren efter hver enkelt forespørgsel.
Se:
- Problem #15:Aktiver batching ved returnering af genererede nøgler
- Problem #195:PgJDBC pipelinerer ikke batches, der returnerer genererede nøgler
Selv når der anmodes om genererede nøgler, er den udvidede forespørgsel protokol bruges til at sikre, at forespørgselsteksten ikke skal sendes hver gang, kun parametrene.
Helt ærligt, JDBC batching er ikke en god løsning under alle omstændigheder. Det er nemt at bruge for appudvikleren, men temmelig suboptimalt for ydeevnen, da serveren stadig skal udføre hver sætning individuelt - dog ikke parse og planlægge dem individuelt, så længe du bruger forberedte udsagn.
Hvis autocommit er slået til, vil ydeevnen være absolut patetisk, fordi hver erklæring udløser en commit. Selv når autocommit er slået fra, vil masser af små erklæringer ikke være særlig hurtige, selvom du kunne eliminere forsinkelserne rundtur.
En bedre løsning til mange simple UPDATE
s kan være at:
COPY
nye data til enTEMPORARY
ellerUNLOGGED
bord; og- Brug
UPDATE ... FROM
tilUPDATE
med enJOIN
mod den kopierede tabel
For KOPI, se PgJDBC-dokumenterne
og COPY
dokumentation i serverdokumenterne
.
Du vil ofte opdage, at det er muligt at justere ting, så din app ikke behøver at sende alle disse individuelle UPDATE
overhovedet.