Tengo una aplicación de código abierto de Java que utiliza Hibernate y HSQLDB para la persistencia. En todas mis pruebas de juguetes, las cosas corren rápido y todo está bien. Tengo un cliente que ha estado ejecutando el software durante varios meses continuamente y su base de datos ha crecido significativamente durante ese tiempo, y el rendimiento ha disminuido gradualmente. Finalmente se me ocurrió que la base de datos podría ser el problema. Por lo que puedo decir de las instrucciones de registro, todo el cálculo en el servidor ocurre rápidamente, por lo que esto es consistente con la hipótesis de que el DB podría tener la culpa.Cómo ajustar el rendimiento de la aplicación hsqldb/hibernate
Sé cómo hacer un perfil normal de un programa para descubrir dónde están los puntos calientes y lo que está ocupando una cantidad significativa de tiempo. Pero todos los perfiladores que conozco monitorean el tiempo de ejecución dentro del programa y no le doy ayuda acerca de las llamadas a recursos externos. ¿Qué herramientas usan las personas para perfilar los programas que usan llamadas de db externas para averiguar dónde optimizar el rendimiento?
Una pequeña búsqueda a ciegas ya ha encontrado algunos puntos calientes: noté una llamada en la que enumeraba todos los objetos de una clase en particular para ver si había alguno. Un cambio de una línea al criterio [.setMaxResults (1)] cambió esa llamada de medio segundo a virtualmente instantánea. También veo lugares donde hago la misma pregunta desde el DB muchas veces en una sola transacción. Todavía no he resuelto cómo guardar la respuesta en caché, pero lo que realmente quiero es una herramienta que me ayude a buscar este tipo de cosas de forma más sistemática.
No he realizado ningún ajuste de rendimiento en la configuración de base de datos. Había asumido que mi problema tenía más probabilidades de ser consultas mal concebidas o hacer la pregunta incorrecta muchas veces. Supongo que me gustaría encontrar una forma de reducir el número de consultas y sus gastos primero, y luego (después de reducir el uso en un 80%) acelerar el db mismo usando el almacenamiento en caché y otros trucos en esa carga reducida. Pero no soy un experto en ajustar el uso de DB. ¿Sugeriría ajustar el DB antes de la aplicación? – PanCrit
Si está seguro de que el problema está en hibernación, ajustar la base de datos no ayudaría. Antes de sintonizar, use una herramienta de perfilador o algo que le ayude a rastrear exactamente la raíz de sus problemas de rendimiento, luego optimícela. Desafortunadamente, no hay una manera fácil. La buena noticia es que todos los IDEs en la actualidad tienen un soporte de perfiles decente. – razenha