sql >> Databáze >  >> RDS >> PostgreSQL

dávkový výkon jdbc

AFAIK není žádné dávkování na straně serveru v fe/be protokol , takže jej PgJDBC nemůže použít. . Aktualizovat :No, mýlil jsem se. PgJDBC (přesné od 9.3) dělá odesílat dávky dotazů na server pokud nepotřebuje načítat vygenerované klíče . Prostě zařadí spoustu dotazů do vyrovnávací paměti pro odesílání, aniž by se po každém jednotlivém dotazu synchronizoval se serverem.

Viz:

I když jsou požadovány vygenerované klíče, rozšířený dotaz protokol se používá k zajištění toho, že text dotazu není nutné pokaždé zasílat, pouze parametry.

Upřímně řečeno, dávkování JDBC není v žádném případě skvělé řešení. Pro vývojáře aplikací je to snadné, ale z hlediska výkonu není optimální, protože server musí stále provádět každý příkaz samostatně – i když ne analyzovat a plánovat jednotlivě, pokud používáte připravené příkazy.

Pokud je automatické potvrzení zapnuto, výkon bude naprosto žalostný, protože každý příkaz spustí potvrzení. I když je automatické potvrzení vypnuto, spousta malých příkazů nebude příliš rychlá, i když byste mohli eliminovat zpáteční zpoždění.

Lepší řešení pro spoustu jednoduchých UPDATE s může být:

  • COPY nová data do TEMPORARY nebo UNLOGGED stůl; a
  • Použijte UPDATE ... FROM do UPDATE s JOIN proti zkopírované tabulce

Pro COPY viz dokumenty PgJDBC a COPY dokumentaci v dokumentech serveru .

Často zjistíte, že je možné věci vyladit, aby vaše aplikace nemusela posílat všechny jednotlivé UPDATE s vůbec.




  1. Dotazování Postgresql pomocí Hibernate (JPA) nenajde tabulku

  2. Určete maximální povolenou délku ve sloupci v mysql

  3. Potřebujete MySQL INSERT - SELECT dotaz pro tabulky s miliony záznamů

  4. Testy přijetí kódů v rámci databázových transakcí na MySQL