sql >> Base de Datos >  >> RDS >> PostgreSQL

rendimiento por lotes jdbc

AFAIK no es un procesamiento por lotes del lado del servidor en el fe/be protocolo , por lo que PgJDBC no puede usarlo. . Actualizar :Bueno, estaba equivocado. PgJDBC (preciso a partir de 9.3) enviar lotes de consultas al servidor si no necesita recuperar las claves generadas . Simplemente pone en cola un montón de consultas en el búfer de envío sin sincronizarse con el servidor después de cada consulta individual.

Ver:

Incluso cuando se solicitan claves generadas, la consulta extendida protocolo se utiliza para garantizar que no sea necesario enviar el texto de la consulta cada vez, solo los parámetros.

Francamente, el procesamiento por lotes de JDBC no es una gran solución en ningún caso. Es fácil de usar para el desarrollador de la aplicación, pero tiene un rendimiento bastante inferior al óptimo, ya que el servidor todavía tiene que ejecutar cada declaración individualmente, aunque no analizar. y planificar individualmente siempre y cuando use declaraciones preparadas.

Si la confirmación automática está activada, el rendimiento será absolutamente patético porque cada instrucción desencadena una confirmación. Incluso con la confirmación automática desactivada, la ejecución de muchas declaraciones pequeñas no será particularmente rápida, incluso si pudiera eliminar los retrasos de ida y vuelta.

Una mejor solución para muchas UPDATE simples s puede ser para:

  • COPY nuevos datos en un TEMPORARY o UNLOGGED mesa; y
  • Utilice UPDATE ... FROM para UPDATE con un JOIN contra la tabla copiada

Para COPY, consulte los documentos de PgJDBC y el COPY documentación en los documentos del servidor .

A menudo encontrará que es posible modificar las cosas para que su aplicación no tenga que enviar todos esos UPDATE individuales s en absoluto.