sql >> Database >  >> RDS >> PostgreSQL

jdbc batchprestaties

AFAIK is geen server-side batching in de fe/be protocol , dus PgJDBC kan het niet gebruiken. . Bijwerken :Nou, ik had het mis. PgJDBC (nauwkeurig vanaf 9.3) doet stuur batches query's naar de server als het geen gegenereerde sleutels hoeft op te halen . Het plaatst gewoon een aantal zoekopdrachten in de verzendbuffer zonder na elke individuele zoekopdracht te synchroniseren met de server.

Zie:

Zelfs wanneer gegenereerde sleutels worden gevraagd de uitgebreide query protocol wordt gebruikt om ervoor te zorgen dat de vraagtekst niet elke keer hoeft te worden verzonden, alleen de parameters.

Eerlijk gezegd is JDBC batching in ieder geval geen geweldige oplossing. Het is gemakkelijk te gebruiken voor de app-ontwikkelaar, maar behoorlijk suboptimaal voor prestaties omdat de server nog steeds elke instructie afzonderlijk moet uitvoeren - hoewel niet parseren en plan ze afzonderlijk, zolang u voorbereide verklaringen gebruikt.

Als autocommit is ingeschakeld, zullen de prestaties absoluut zielig zijn omdat elke instructie een commit activeert. Zelfs als autocommit is uitgeschakeld, zullen veel kleine overzichten niet bijzonder snel zijn, zelfs als u de vertragingen voor retourvluchten zou kunnen elimineren.

Een betere oplossing voor veel eenvoudige UPDATE s kunnen zijn:

  • COPY nieuwe gegevens in een TEMPORARY of UNLOGGED tafel; en
  • Gebruik UPDATE ... FROM om UPDATE met een JOIN tegen de gekopieerde tabel

Voor KOPIE, zie de PgJDBC-documenten en de COPY documentatie in de serverdocumenten .

Je zult vaak merken dat het mogelijk is om dingen aan te passen, zodat je app niet al die individuele UPDATE hoeft te verzenden is helemaal niet.




  1. RoR:kan de_kolom niet wijzigen in postgres, prima in MySQL (MySQL voor ontwikkeling, Postgres op Heroku)

  2. Oracle + Java-coderingsprobleem tijdens invoegen

  3. Probleem met het maken van een Postgres RDS in Cloudformation-sjabloon

  4. Hoe een module aan Wildfly toe te voegen met behulp van CLI