AFAIK är ingen batchning på serversidan i fe/be protokoll
, så PgJDBC kan inte använda det. . Uppdatera :Tja, jag hade fel. PgJDBC (exakt från 9.3) gör skicka grupper av frågor till servern om den inte behöver hämta genererade nycklar . Det ställer bara ett gäng frågor i sändningsbufferten utan att synkronisera med servern efter varje enskild fråga.
Se:
- Problem #15:Aktivera batchning när genererade nycklar returneras
- Problem #195:PgJDBC pipelinerar inte batcher som returnerar genererade nycklar
Även när genererade nycklar begärs den förlängda frågan protokoll används för att säkerställa att frågetexten inte behöver skickas varje gång, bara parametrarna.
Uppriktigt sagt, JDBC batching är inte en bra lösning i alla fall. Det är lätt att använda för apputvecklaren, men ganska suboptimalt för prestanda eftersom servern fortfarande måste köra varje sats individuellt - dock inte parse och planera dem individuellt så länge du använder förberedda uttalanden.
Om autocommit är på kommer prestandan att vara absolut patetisk eftersom varje uttalande utlöser en commit. Även om autocommit är avstängd kommer många små uttalanden inte att vara särskilt snabba även om du skulle kunna eliminera förseningar tur och retur.
En bättre lösning för många enkla UPDATE
s kan vara att:
COPY
ny data till enTEMPORARY
ellerUNLOGGED
tabell; och- Använd
UPDATE ... FROM
tillUPDATE
med enJOIN
mot den kopierade tabellen
För COPY, se PgJDBC-dokumenten
och COPY
dokumentation i serverdokumenten
.
Du kommer ofta att upptäcka att det är möjligt att justera saker så att din app inte behöver skicka alla dessa individuella UPDATE
s överhuvudtaget.