PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

performances des lots jdbc

AFAIK n'est pas de traitement par lots côté serveur dans le fe/be protocole , donc PgJDBC ne peut pas l'utiliser. . Mettre à jour :Eh bien, je me suis trompé. PgJDBC (précis à partir de 9.3) fait envoyer des lots de requêtes au serveur s'il n'a pas besoin de récupérer les clés générées . Il met simplement en file d'attente un tas de requêtes dans le tampon d'envoi sans se synchroniser avec le serveur après chaque requête individuelle.

Voir :

Même lorsque les clés générées sont demandées, la requête étendue protocole est utilisé pour s'assurer que le texte de la requête n'a pas besoin d'être envoyé à chaque fois, juste les paramètres.

Franchement, le traitement par lots JDBC n'est en aucun cas une excellente solution. Il est facile à utiliser pour le développeur de l'application, mais assez sous-optimal pour les performances car le serveur doit toujours exécuter chaque instruction individuellement - mais pas parse et planifier individuellement tant que vous utilisez des instructions préparées.

Si la validation automatique est activée, les performances seront absolument pathétiques car chaque instruction déclenche une validation. Même avec la validation automatique désactivée, l'exécution de nombreuses petites instructions ne sera pas particulièrement rapide, même si vous pouviez éliminer les délais aller-retour.

Une meilleure solution pour beaucoup de simples UPDATE s peut être :

  • COPY nouvelles données dans un TEMPORARY ou UNLOGGED table; et
  • Utilisez UPDATE ... FROM à UPDATE avec un JOIN contre la table copiée

Pour COPIER, voir la documentation PgJDBC et la COPY documentation dans la documentation du serveur .

Vous constaterez souvent qu'il est possible de modifier les choses afin que votre application n'ait pas à envoyer toutes ces UPDATE individuelles s du tout.