Mejora del rendimiento del SQL dinámico
Puede utilizar varias técnicas para mejorar el rendimiento de las aplicaciones de SQL dinámico.
Acerca de esta tarea
Procedimiento
Para mejorar el rendimiento de las sentencias de SQL dinámico, utilice cualquiera de los métodos siguientes:
- Utilice pureQuery® para ejecutar SQL.Con pureQuery, es posible redirigir las consultas dinámicas para que se sean estáticas. También se puede utilizar pureQuery para bloquear planes de acceso y elegir una modalidad de ejecución estática o dinámica.
Para obtener más información sobre pureQuery,, consulte: Envío de instrucciones SQL a Db2
- Habilite el almacenamiento en memoria caché de sentencias de SQL dinámico.Se puede utilizar el almacenamiento en memoria caché de sentencias dinámicas para otorgar más funcionalidad estática a las sentencias de SQL dinámico. El almacenamiento en memoria caché de sentencias dinámicas guarda sentencias que ya están preparadas y las reutiliza cuando se llama a sentencias idénticas. Las sentencias dinámicas se pueden almacenar en memoria caché cuando han superado las comprobaciones de autorización, si el almacenamiento en memoria caché está habilitado en el sistema. Puede realizar cualquiera de las acciones siguientes, o todas, para habilitar el almacenamiento en memoria caché para sentencias de SQL dinámico:
- En
el nivel de subsistema, utilice el valor del parámetro de subsistema CACHEDYN=YES
para habilitar la memoria caché de sentencias dinámicas. Cuando se establece CACHEDYN=YES, las aplicaciones que emiten sentencias PREPARE o EXECUTE IMMDEDIATE pueden beneficiarse si la copia esqueleto de la sentencia se encuentra en la caché de sentencias dinámicas. Si se cumplen las condiciones adecuadas,
la copia esqueleto se puede copiar en el almacenamiento para la hebra en
un proceso denominado preparación breve. Es decir, dos programas
pueden compartir la misma sentencia preparada. La aplicación tiene operaciones
PREPARE extra, pero se ahorra el coste de una preparación completa.
Para obtener más información sobre este enfoque, consulte Habilitar la caché de sentencias dinámicas para mejorar el rendimiento de SQL dinámico.
En el nivel de paquete, utilice la opción de enlace KEEPDYNAMIC(YES) para permitir que las sentencias SQL dinámicas se mantengan después del punto de confirmación o reversión. Cualquier instrucción SQL individual que esté vinculada con la opción de enlace KEEPDYNAMIC(YES) puede emitir una sola instrucción PREPARE para una instrucción SQL y omitir las operaciones de preparación posteriores, incluso después del punto de confirmación o reversión.
Para lograr el ahorro de costes de este enfoque, debe omitir las sentencias PREPARE innecesarias del programa de aplicación.Para obtener más información sobre este enfoque, consulte Métodos para mantener las declaraciones preparadas después del punto de confirmación o reversión.
- En
el nivel de subsistema, utilice el valor del parámetro de subsistema CACHEDYN=YES
para habilitar la memoria caché de sentencias dinámicas. Cuando se establece CACHEDYN=YES, las aplicaciones que emiten sentencias PREPARE o EXECUTE IMMDEDIATE pueden beneficiarse si la copia esqueleto de la sentencia se encuentra en la caché de sentencias dinámicas. Si se cumplen las condiciones adecuadas,
la copia esqueleto se puede copiar en el almacenamiento para la hebra en
un proceso denominado preparación breve. Es decir, dos programas
pueden compartir la misma sentencia preparada. La aplicación tiene operaciones
PREPARE extra, pero se ahorra el coste de una preparación completa.
Estabilizar las sentencias SQL dinámicas, especialmente las sentencias de ejecución corta que se ejecutan muchas veces al día.Para obtener más información, consulte Estabilización de rutas de acceso para sentencias SQL dinámicas.
- Especifique las opciones de enlace REOPT adecuadas.También puede utilizar la opción de enlace REOPT para controlar cuándo Db2 vuelve a optimizar la vía de acceso de una sentencia de SQL. Estas opciones pueden hacer que las sentencias SQL se comporten más de forma estática o dinámica. Se pueden utilizar para personalizar cuándo y cómo optimizar las sentencias SQL.
Para obtener más información sobre las opciones de enlace REOPT, consulte Reoptimización de sentencias SQL en tiempo de ejecución y Opción de enlace REOPT.
- Especifique la opción de enlace DEFER(PREPARE).Db2 no prepara una sentencia de SQL dinámico hasta que se ejecute la sentencia. Para SQL dinámico que se utiliza en el acceso DRDA, considere especificar la opción DEFER(PREPARE) cuando vincule o revincule sus planes o paquetes. Cuando una sentencia de SQL dinámico accede a datos remotos, las sentencias PREPARE y EXECUTE se pueden transmitir juntas a través de la red y procesarse en el servidor remoto. A continuación, el servidor remoto puede enviar juntas las respuestas de ambas sentencias al subsistema local, reduciendo de este modo el tráfico de la red.
Para obtener más información sobre la opción de enlace DEFER (PREPARAR), consulte la opción de enlace REOPT y las opciones BIND para aplicaciones distribuidas
- Elimine el uso de la opción WITH HOLD para cursores.Para definir un cursor WITH HOLD es necesario enviar un mensaje de red adicional para cerrar el cursor. El rendimiento se puede mejorar si se elimina la opción WITH HOLD cuando la aplicación no necesite mantener cursores abiertos durante una confirmación. Esta recomendación es especialmente útil en el caso de aplicaciones de SQL dinámico.Para obtener más información sobre la opción WITH HOLD para cursores, consulte: