Opciones de vinculación para aplicaciones distribuidas

Ciertas opciones de vinculación (BIND) pueden mejorar el rendimiento de las sentencias de SQL que se ejecutan como parte de aplicaciones distribuidas.

Procedimiento

Para mejorar el rendimiento de aplicaciones que acceden a datos distribuidos:

Utilice las opciones de enlace que se muestran en la tabla siguiente:
Tabla 1. Valores de opción de enlace recomendados para aplicaciones que acceden a datos distribuidos
Opción de enlace Valor y acciones recomendadas Razón
CURRENTDATA CURRENTDATA(NO) Utilice esta opción de enlace para forzar la captación de bloques para consultas ambiguas.
ISOLATION ISOLATION (CS), o cualquier opción distinta a ISOLATION (RR) Si es posible, no enlace planes de aplicación y paquetes con ISOLATION(RR). Si la aplicación no necesita volver a hacer referencia a filas que ya ha leído, otro nivel de aislamiento podría reducir la contención de bloqueo y la sobrecarga de mensajes durante el proceso de confirmación.
KEEPDYNAMIC KEEPDYNAMIC(YES) Utilice esta opción de enlace para mejorar el rendimiento en el caso de consultas que utilicen cursores que estén definidos con la opción WITH HOLD. Con KEEPNAMIC(YES), Db2 cierra automáticamente el cursor cuando no existen más datos para la recuperación. El cliente no necesita enviar un mensaje de red para indicar a Db2 que cierre el cursor. Esta opción no es necesaria para clientes que cierren el cursor incluso si dicho cursor está definido con la opción WITH HOLD.
NODEFER y DEFER DEFER(PREPARE) Esta opción reduce el tráfico de red, ya que las sentencias PREPARE y EXECUTE y las respuestas se transmiten a la vez.
PKLIST y NOPKLIST PKLIST
Especifique las colecciones de paquetes para esta opción de enlace de acuerdo con las recomendaciones siguientes:
  • Reduzca el número de paquetes por colección que Db2 debe buscar. El ejemplo siguiente especifica únicamente un paquete en cada colección:
    PKLIST(S1.COLLA.PGM1, S1.COLLB.PGM2)
  • Reduzca el número de colecciones de paquetes en cada ubicación que Db2 debe buscar. El ejemplo siguiente especifica únicamente una colección de paquetes en cada ubicación:
    PKLIST(S1.COLLA.*, S2.COLLB.*)
  • Reduzca el número de colecciones que se utilizan para cada aplicación. El ejemplo siguiente especifica una sola colección para buscar:
    PKLIST(*.COLLA.*)
El orden en el que especifique las colecciones de paquetes en una lista de paquetes puede afectar al rendimiento del programa de aplicación. Cuando una instancia local de Db2 intenta ejecutar una instrucción SQL en un servidor remoto, el subsistema local de Db2 debe determinar en qué colección de paquetes se encuentra la instrucción SQL. Db2 debe enviar un mensaje al servidor para solicitar que el servidor compruebe cada ID de colección para la instrucción SQL hasta que se encuentre la instrucción o hasta que no haya más ID de colección en la lista de paquetes. Puede reducir la cantidad de tráfico de red y, por tanto, mejorar el rendimiento si se reduce el número de colecciones de paquetes que cada servidor debe buscar.

Como alternativa a especificar las colecciones de paquetes en la opción de enlace PKLIST, puede especificar la colección de paquetes que esté asociada con una sentencia SQL en el programa de aplicación. Ejecute la sentencia SET CURRENT PACKAGESET antes de ejecutar una sentencia SQL para indicar en Db2 qué colección de paquetes debe buscar la sentencia.

PKLIST y NOPKLIST (cont.)
Requisito : Cuando especifique la opción de enlace DEFER(PREPARE) con acceso DRDA, el paquete que contiene las declaraciones cuya preparación desea aplazar debe ser la primera entrada que cumpla los requisitos en la secuencia de búsqueda de paquetes que utiliza Db2 .
Por ejemplo, supongamos que la lista de paquetes de un plan contiene dos entradas:
PKLIST(LOCB.COLLA.*, LOCB.COLLB.*)
Si el paquete previsto está en la colección COLLB, asegúrese de que Db2 busca primero en esa colección ejecutando la siguiente sentencia de SQL:
SET CURRENT PACKAGESET = 'COLLB';
Como alternativa, puede listar primero COLLB en la opción de enlace PKLIST:
PKLIST(LOCB.COLLB.*, LOCB.COLLA.*)

Para la opción de enlace NODEFER (PREPARE), las colecciones de la lista de paquetes pueden estar en cualquier orden, pero si el paquete no se encuentra en la primera entrada PKLIST cualificada, se puede producir una sobrecarga de red significativa tras la búsqueda de Db2 en la lista.

 
REOPT
Utilice las directrices siguientes para decidir qué opción elegir:
  • Utilice la opción REOPT(AUTO) cuando se cumplan las condiciones siguientes:
    • Se está utilizando la caché de sentencias dinámicas.
    • Desea que Db2 decida si es necesaria una nueva vía de acceso.
    • Las sentencias de SQL dinámico se ejecutan muchas veces con variables de entrada probablemente distintas.
    • Las variables de entrada similares tienden a ejecutarse de forma consecutiva.
  • Utilice la opción REOPT(ALWAYS) únicamente en paquetes o planes que contengan sentencias con mal rendimiento debido a una vía de acceso incorrecta. Si especifica REOPT (ALWAYS) al enlazar un plan que contiene sentencias que utilizan el acceso de protocolo privado de Db2 para acceder a datos remotos, Db2 prepara esas sentencias dos veces.
  • Utilice la opción REOPT(ONCE) cuando se cumplan las condiciones siguientes:
    • Se está utilizando la caché de sentencias dinámicas.
    • Cuenta con planes o paquetes que contienen sentencias de SQL dinámico con mal rendimiento devido a la selección de vía de acceso.
    • Las sentencias de SQL dinámico se ejecutan muchas veces con variables de entrada probablemente distintas.
  • Utilice la opción REOPT (NONE) cuando enlace un plan o paquete que contiene sentencias que utilizan el acceso de protocolo privado de Db2.
Debido a los costes de rendimiento cuando Db2 reoptimiza la vía de acceso en tiempo de ejecución, minimice la reoptimización siempre que sea posible.