Tenemos una consulta de selección simple con una sola columna en la cláusula SELECT. Sin condición de cláusula WHERE (porque la aplicación lo exige). La consulta obtiene alrededor de 5000000 filas a la vez. Los DBA a veces ven una mayor carga en la base de datos (Oracle 12c) y han identificado esta consulta de selección como la causa detrás de la carga de la base de datos. El índice se ha creado correctamente en esta única columna. La consulta devuelve resultados en poco tiempo.
Mi aplicación Java (Java 8) establece el tamaño de recuperación (org.hibernate.fetchSize) en 5000. Es para mejorar el rendimiento de la consulta. Mi servidor de aplicaciones Java tiene una buena configuración de memoria, por lo que no vemos ningún problema en el lado del servidor de aplicaciones.
Me pregunto si establecer un tamaño de búsqueda más alto en el lado de la aplicación cargaría la base de datos de alguna manera. Estamos planeando reducir el tamaño de búsqueda en el lado de la aplicación y monitorear el rendimiento de la base de datos, pero pensé en consultar con todos ustedes primero.
Me referí a este documento técnico de administración de memoria de Oracle, pero no tiene nada útil relacionado con la carga de base de datos: https://www.oracle.com/technetwork/database/enterprise-edition/memory.pdf
Por favor, hágame saber sus pensamientos.
Es casi seguro que establecer el tamaño de búsqueda de JDBC más alto no causará problemas de rendimiento de la base de datos. Antes de considerar reducir el valor, debe pedirle a su DBA que aclare exactamente cómo su consulta está causando la carga de la base de datos.
Oracle no experimenta problemas de tamaño del conjunto de resultados de la misma manera que una aplicación. Si bien una aplicación puede quedarse sin memoria para almacenar un millón de filas en la memoria, la mayoría de los sistemas Oracle pueden manejar fácilmente esa cantidad de datos porque los resultados intermedios grandes se escriben en el disco en el espacio de tabla temporal. Y aunque ocasionalmente hay problemas temporales de espacio de tabla, esos problemas ocurren en función del tamaño de los resultados intermedios, no del tamaño de los resultados obtenidos por lote.
Pídale a su DBA más información sobre la consulta y tal vez algún ajuste de consulta. ¿Qué tipo de problemas está causando la consulta, qué espera la base de datos para la consulta, cuál es el plan de ejecución/informe de SQL Monitor, etc. Obtener 5,000,000 de filas a la vez para una aplicación es un poco inusual y es posible que deba ajustar algunos de tus expectativas. Por ejemplo, es muy probable que no desee utilizar un índice para una consulta que devuelve 5 millones de filas, ya que los análisis completos de tablas son más eficaces para recuperar una gran parte de una tabla.