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:
COPYnye data til enTEMPORARYellerUNLOGGEDbord; og- Brug
UPDATE ... FROMtilUPDATEmed enJOINmod 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.