sql >> Databasteknik >  >> RDS >> PostgreSQL

jdbc batchprestanda

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:

Ä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 en TEMPORARY eller UNLOGGED tabell; och
  • Använd UPDATE ... FROM till UPDATE med en JOIN 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.




  1. 3 sätt att lista alla lagrade procedurer i en SQL Server-databas

  2. Kan vi definiera en GROUP_CONCAT-funktion i PostgreSQL?

  3. Hur infogar jag i en tabell från en annan tabell genom att matcha på värden?

  4. Laravel 5.3 Vältalande transaktioner och restriktioner för främmande nyckel