Estabilidad de plan de SQL dinámico
Cuando se habilita la estabilidad del plan de SQL dinámico, Db2 almacena estructuras de memoria caché de sentencias para sentencias de SQL dinámico especificadas en el catálogo de Db2. Siempre que una sentencia de SQL dinámico estabilizada no está presente en la memoria caché de sentencias dinámicas cuando se emite, Db2 puede cargar las estructuras de memoria caché de sentencias desde el catálogo de Db2 y evitar la operación de preparación completa. El objetivo es lograr una estabilidad de vía de acceso comparable a la de las sentencias de SQL estático para las sentencias de SQL dinámico almacenadas en memoria caché repetidas.
Las sentencias de SQL dinámico son más a menudo susceptibles a las regresiones de vía de acceso que las sentencias de SQL estático. Db2 prepara la ruta de acceso para las sentencias SQL estáticas cuando se vinculan los paquetes, y la misma ruta de acceso se reutiliza hasta el siguiente BIND o REBIND para el paquete. Para sentencias de SQL dinámico, Db2 utiliza el proceso de preparación completo para cualquier sentencia de SQL dinámico que no se encuentre en la memoria caché de sentencias dinámicas, a menos que se estabilice. Por ejemplo, las sentencias SQL dinámicas estabilizadas no se exponen al proceso de preparación completo por los siguientes eventos en el subsistema de Db2 que invalidan o eliminan sentencias de la caché de sentencias dinámicas:
- Db2 se detiene y se reinicia
- Las sentencias salen y vuelven a entrar la memoria caché de sentencia dinámica
- RUNSTATS recopila las estadísticas u otros programas de utilidad para cambiar datos
- Cambio de los parámetros de subsistema
- El mantenimiento se aplica a Db2
- Migración del release
Se puede observar otra ventana en cuanto a rendimiento de la estabilidad del plan de SQL dinámico durante los periodos de carga de memoria caché
pesados, como cuando las cargas de trabajo de la aplicación se reanudan después de la actividad del fin de semana. Db2 puede evitar el proceso de preparación completo para instrucciones SQL dinámicas estabilizadas y cargar las estructuras de caché desde el catálogo de Db2 .
Db2 utiliza de nuevo el proceso de preparación completo para una sentencia de SQL dinámico estabilizada cuando se produce cualquiera de los sucesos siguientes:
- La sentencia se elimina del catálogo
- La sentencia está invalidada
- Otros cambios que dan como resultado una falta de memoria caché, como el parámetro de subsistema y determinados registros especiales, incluidos DEGREE y OPTHINT, entre otros.
Sin embargo, la estabilización de sentencias de SQL dinámico implica compensaciones. Los cambios de la vía de acceso a menudo mejoran el rendimiento, por lo tanto cambie esas mejoras de rendimiento potenciales para estabilidad. Las sentencias de SQL dinámico estabilizadas también utilizan espacio de almacenamiento en el catálogo de Db2 para almacenar las estructuras de tiempo de ejecución.
También se necesita esfuerzo para gestionar el SQL dinámico estabilizado, incluidas las siguientes tareas:
- Identificación de consultas a estabilizar y determinación de umbrales de ejecución a utilizar
- Identificación de cuándo habilitar Db2 para seleccionar nuevas vías de acceso para consultas estabilizadas
- Gestión del espacio utilizado por los objetos de catálogo
- Determinación de cuándo ya no se ejecutan las consultas y se pueden liberar
Grupos de estabilización
Un grupo de estabilización es una etiqueta que asocia un conjunto de sentencias de SQL dinámico estabilizadas relacionadas. Puede utilizarlo como captador de atención, y como entrada de mandatos para gestionar un conjunto de sentencias estabilizadas como grupo.
Liberación de sentencias de SQL dinámico estabilizadas
Para obtener una preparación completa o reclamar el almacenamiento de catálogo de Db2 para las sentencias SQL dinámicas estabilizadas no utilizadas, puede emitir el mandato FREE ESTABILIZADO DYNAMIC QUERY. Para obtener más información, consulte Eliminación de sentencias SQL dinámicas estabilizadas del catálogo Db2.