estamos ejecutando la pila java6/hibernate/c3p0/postgresql. Nuestro controlador JDBC es 8.4-701.jdbc3¿debo activar la agrupación de declaraciones c3p0?
Tengo algunas preguntas sobre Declaraciones preparadas. He leído documento excelente sobre Prepared Statements
Pero todavía tengo una pregunta sobre cómo configurar c3p0 con postgresql.
En el momento en que tienen
c3p0.maxStatements = 0
c3p0.maxStatementsPerConnection = 0
A mi entender las declaraciones preparadas y puesta en común afirmación son dos cosas diferentes:
Nuestra pila Hibernate usa comandos preparados. Postgresql está almacenando en caché el plan de ejecución . La próxima vez que se use la misma declaración, postgresql reutilizará el plan de ejecución . Esto ahorra tiempo en las declaraciones de planificación dentro de DB.
Además, c3p0 puede almacenar en caché instancias Java de "java.sql.PreparedStatement" , lo que significa que está almacenando en caché el objeto java. Por lo tanto, cuando se usa
c3p0.maxStatementsPerConnection = 100 almacena en caché como máximo 100 objetos diferentes
. Ahorra tiempo en la creación de objetos, pero esto no tiene nada que ver con la base de datos postgresql y sus declaraciones preparadas.
Derecho?
Como usamos unos 100 estados diferentes Fijaría c3p0.maxStatementsPerConnection = 100
Pero los documentos c3p0 decir en c3p0 known shortcomings
La sobrecarga de la Declaración de la agrupación es demasiado alto. Para los controladores que no realizan preprocesamiento significativo de PreparedStatements, la agrupación compensa cualquier ahorro. La agrupación de instrucciones se desactiva por lo tanto de forma predeterminada. Si su controlador hace preprocess PreparedStatements, especialmente si lo hace a través de IPC con el RDBMS, probablemente verá una ganancia de rendimiento significativa de en activando la agrupación de sentencias. (Haga esto estableciendo la propiedad de configuración maxStatements o maxStatementsPerConnection en un valor mayor que cero).
Entonces: ¿Es razonable activar maxStatementsPerConnection con c3p0 y Postgresql? ¿Existe un beneficio real al activarlo?
Saludos cordiales Janning
¡¡Gran respuesta !! Con su explicación detallada, pude realizar algunas pruebas. De hecho: es razonable activar el agrupamiento de declaraciones c3p0. antes de que mis declaraciones fueran analizadas y planificadas cada vez, ahora solo se enlazan y se ejecutan. , pero tenga en cuenta si su cambio de datos y los planes antiguos no funcionan óptimamente. Todavía no sé si postgresql replans preparedtestements de vez en cuando. ¡Muchas gracias por su ayuda! – Janning
¡Excelente respuesta! En realidad, siempre estoy confundido acerca de la implementación de PreparedStatement y sus beneficios son sospechosos como todos me dijeron. – Chao