PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

prestazioni batch jdbc

AFAIK non è un batch lato server in fe/be protocollo , quindi PgJDBC non può usarlo. . Aggiorna :Beh, mi sbagliavo. PgJDBC (preciso a partire dalla 9.3) fa invia batch di query al server se non è necessario recuperare le chiavi generate . Mette semplicemente in coda un sacco di query nel buffer di invio senza sincronizzarsi con il server dopo ogni singola query.

Vedi:

Anche quando vengono richieste chiavi generate, la query estesa protocollo viene utilizzato per garantire che il testo della query non debba essere inviato ogni volta, ma solo i parametri.

Francamente, il batching JDBC non è comunque un'ottima soluzione. È facile da usare per lo sviluppatore dell'app, ma piuttosto non ottimale per le prestazioni poiché il server deve comunque eseguire ogni istruzione singolarmente, anche se non analisi e pianifica singolarmente, purché utilizzi dichiarazioni preparate.

Se l'autocommit è attivo, le prestazioni saranno assolutamente patetiche perché ogni istruzione attiva un commit. Anche con l'autocommit off, l'esecuzione di molte piccole istruzioni non sarà particolarmente veloce anche se potresti eliminare i ritardi di andata e ritorno.

Una soluzione migliore per molti semplici UPDATE s può essere a:

  • COPY nuovi dati in un TEMPORARY o UNLOGGED tavolo; e
  • Usa UPDATE ... FROM a UPDATE con un JOIN contro la tabella copiata

Per COPIA, vedere i documenti PgJDBC e il COPY documentazione nei documenti del server .

Scoprirai spesso che è possibile modificare le cose in modo che la tua app non debba inviare tutti quei singoli UPDATE è proprio così.