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.

    • Iniciar información de la interfaz de programación de uso general.Inicio del cambioEn 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. fin del cambio Para lograr el ahorro de costes de este enfoque, debe omitir las sentencias PREPARE innecesarias del programa de aplicación.Finalizar la información de la interfaz de programación de uso general.

      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.

  • Inicio del cambio Estabilizar las sentencias SQL dinámicas, especialmente las sentencias de ejecución corta que se ejecutan muchas veces al día.fin del cambio
  • 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.