< Anterior | Siguiente >

Lección 6: Ejecución de sentencias SQL de forma estática

Para las aplicaciones que está desarrollando su empresa es necesario ejecutar SQL estáticamente en la base de datos GSDB, que se está ejecutando en DB2. En esta lección, enlazará y ejecutará estáticamente sentencias SQL que se encuentran en la interfaz InventoryLevelsData.
SQL estático ofrece las siguiente ventajas:
Evitar la caché de sentencia dinámica
Si utiliza SQL estático reduce la contienda de la caché de sentencia dinámica de DB2, con lo cual se mejora el rendimiento de las aplicaciones que utilizan el SQL dinámico.
Coherencia de las vías de acceso
El SQL estático hace que se puedan prever los tiempos de respuesta y que sean estables bloqueando las vías de acceso antes de ejecutar una aplicación. Por contra, las vías de acceso para el SQL dinámico se calculan en el momento de la ejecución.
Posible mejora del rendimiento de las aplicaciones
El SQL estático puede mejorar el rendimiento de las aplicaciones.
  • Como los planes de acceso se determinan antes del tiempo de ejecución, se elimina la necesidad de preparar las sentencias SQL en el tiempo de ejecución.
  • Como no es necesario preparar y describir cada sentencia, hay menos tráfico de red entre las aplicaciones cliente y los servidores de bases de datos.
  • El SQL estático impone tipos de datos para variables de host o parámetros que se utilizan en predicados. Esta estricta obligación garantiza que los datos de entrada coincidan con los tipos de datos de destino de la base de datos.
Reforzar la seguridad
Puede otorgar a los usuarios el privilegio EXECUTE en paquetes de DB2, en lugar de otorgarles privilegios en objetos de la base de datos.
Facilitar la revisión de paquetes
Si versiona los paquetes de DB2 podrá volver a enlazar paquetes sin correr el riesgo de perder vías de acceso anteriores y mejores.

Para enlazar y ejecutar estáticamente sentencias SQL que se encuentran en la interfaz InventoryLevelsData:

  1. En el Explorador de paquetes, localice el archivo Default.genProps en la carpeta pureQueryFolder del proyecto pureQuery_test Java™: pureQuery_test > pureQueryFolder > Default.genProps. Efectúe doble pulsación en el archivo para abrirlo a fin de editarlo.
  2. En una línea vacía del archivo Default.genProps, especifique el paquete y el nombre de la interfaz. Puede escribir el paquete y el nombre manualmente o puede ayudarle pureQuery. Para que pureQuery le ayude:
    1. Mantenga pulsada la tecla CONTROL y pulse la barra ESPACIADORA. Se abrirá una pequeña ventana.
      Figura 1. pureQuery hará una lista de las interfaces del proyecto Java
      Ventana Ayuda del contenido
    2. Efectúe doble pulsación en el nombre de la interfaz para incluir el nombre en la línea vacía.
  3. Indique un espacio, un signo igual y otro espacio para que la línea tenga el aspecto siguiente:
    com.mycompany.pureQuery.test.InventoryLevelsData = 
  4. Determine las opciones que utilizará para establecer el nombre de la colección y el nombre del paquete raíz. Mantenga pulsada la tecla CONTROL y pulse la barra ESPACIADORA. Se abrirá otra ventana pequeña.
    Consejo: Al pulsar una opción, aparecerá una descripción de ésta junto a la lista. Puede pulsar la descripción y utilizar la barra de desplazamiento situada en la parte inferior de la ventana amarilla para ver todo el texto.
    Figura 2. Opciones que puede especificar para la interfaz en el archivo Default.genProps
  5. Escriba la línea de modo que se parezca a lo siguiente:
    com.mycompany.pureQuery.test.InventoryLevelsData = -collection "GOSALES" -rootPkgName "invlevl"
  6. Guarde el archivo y pulse para que aparezca el mensaje. pureQuery necesita almacenar en la clase de implementación de la interfaz los valores que ha especificado en el archivo Default.genProps. Al enlazar el SQL que está en la interfaz, el programa de utilidad StaticBinder de pureQuery aparece en la clase de implementación de estos valores, por lo tanto sabe cómo crear los paquetes de la base de datos.
  7. Revise la estructura de los paquetes que tiene pensado crear. En la vista Resumen de SQL, pulse el separador Paquetes de base de datos.
    Consejo: Si la vista Resumen de SQL todavía muestra datos de rendimiento en una tabla, pulse el botón Mostrar vista de árbol o vista de tabla (Botón Mostrar vista de árbol o vista de tabla).

    Aunque solo aparezca un paquete en la vista, creará cuatro paquetes, uno para cada nivel de aislamiento. No obstante, cada paquete tendrá el mismo nombre raíz invlevl y las mismas sentencias SQL. Si desea crear un paquete para un único nivel de aislamiento, podría editar el archivo Default.bindProps. Este archivo le permite especificar opciones para el programa de utilidad StaticBinder, que crea los paquetes. No obstante, para esta guía de aprendizaje, puede dejar las opciones del programa de utilidad StaticBinder con los valores predeterminados.

  8. Enlace el paquete:
    1. Efectúe doble pulsación en el nombre del paquete y seleccione Enlazar. Se abrirá la ventana Seleccionar conexión.
    2. Seleccione la conexión GSDB y pulse Finalizar.

    pureQuery ejecuta el programa de utilidad StaticBinder e imprime la salida de este programa de utilidad en la vista Consola:

    ================================================================================
    
    El programa de utilidad StaticBinder ha vinculado satisfactoriamente el paquete 'invlevl1' de la UR (lectura no confirmada) del nivel de aislamiento.
    El programa de utilidad StaticBinder ha vinculado satisfactoriamente el paquete 'invlevl2' de la CS (estabilidad de cursor) del nivel de aislamiento.
    El programa de utilidad StaticBinder ha vinculado satisfactoriamente el paquete 'invlevl3' de la RS (estabilidad de lectura) del nivel de aislamiento.
    El programa de utilidad StaticBinder ha vinculado satisfactoriamente el paquete 'invlevl4' de la RR (lectura repetible) del nivel de aislamiento.
    
    El programa de utilidad StaticBinder ha vinculado satisfactoriamente 'com.mycompany.pureQuery.test.InventoryLevelsDataImpl'.
    
    ================================================================================
    
    
    Resultados de la actividad del programa de utilidad StaticBinder:
    
        Número de clases de implementación y archivos pureQueryXml para los cuales la operación de vinculación se realizó con éxito (SUCCEEDED): 1
    
    
    El enlace para el paquete invlevl que hace uso de la conexión GSDB se ha realizado con éxito.
    Puede revisar los paquetes en el Explorador de fuentes de datos. Con la vista Resumen de SQL es más fácil encontrarlos.
  9. En la vista Resumen de SQL, efectúe doble pulsación en el nombre del paquete y seleccione Encontrar en el Explorador de fuentes de datos. Se abrirá el Explorador de fuentes de datos se expandirán las carpetas de la conexión GSDB hasta que se encuentren y se resalten los paquetes.
  10. Ejecute las sentencias SQL estáticamente. Puede comprar los datos con los datos que capturó al ejecutar las sentencias SQL dinámicamente.
    1. Efectúe doble pulsación en la carpeta del proyecto y seleccione Ejecutar como > Configuraciones de ejecución.
    2. En la ventana Configuraciones de ejecución, abra la configuración que ha utilizado para capturar el primer conjunto de datos de rendimiento. En el campo Argumentos VM de la página Argumentos, escriba esta línea y pulse Aplicar:
      -Dpdq.executionMode="STATIC"
    3. Pulse Ejecutar.
  11. En el Explorador de proyectos, efectúe doble pulsación en la carpeta del proyecto y seleccione pureQuery > Renovar proyecto en el resumen de SQL. A continuación, revise los datos de rendimiento.
    1. En la vista Resumen de SQL, marque el recuadro de selección Comparar. Se renovará la vista. Si el proyecto contenía más de un conjunto de datos de rendimiento guardado, podría seleccionar uno de los conjuntos en el campo situado junto al recuadro de selección Comparar.
      Figura 3. Controles para comparar conjuntos de datos de rendimiento
      Controles para comparar conjuntos de datos de rendimiento

      Cada columna contiene una columna gris y una columna blanca. Las columnas grises muestran los datos de rendimiento actuales de la ejecución estática de las sentencias SQL. Las columnas blancas muestran los datos de rendimiento de la ejecución dinámica anterior de las mismas sentencias SQL.

      De forma predeterminada, la vista compara el tiempo medido en milisegundos del tiempo de ejecución de las sentencias.

    2. Utilice el campo Mostrar situado en la parte superior de la vista para comparar los datos de rendimiento en dos maneras distintas:
      Diferencia
      Las columnas grises muestran el tiempo medido en milisegundos del conjunto de datos actual. Las columnas blancas muestran las diferencias entre los tiempos. Por ejemplo, a continuación se muestran las estadísticas de la primera sentencia de la vista.
      Tabla 1. Tiempo actual medido en milisegundos de la sentencia comparado con la diferencia entre el tiempo actual y el tiempo anterior
      Tiempo total Tiempo máx. Tiempo promedio Tiempo mín.
      18,32 11,11 15,92 -0,25 6,11 3,70 1,11 1,08
      La figura muestra que en el anterior conjunto de datos:
      • El tiempo de ejecución total es de 11,11 milisegundos más que en el conjunto de datos actual
      • El tiempo de ejecución máximo es de 0,25 milisegundos menos que en el conjunto de datos actual
      • La media del tiempo de ejecución es de 3,70 milisegundos más que en el conjunto de datos actual
      • El tiempo de ejecución mínimo es de 1,08 milisegundos más que en el conjunto de datos actual
      Porcentaje
      Las columnas grises muestran el tiempo medido en milisegundos del conjunto de datos actual. Las columnas blancas muestran las diferencias entre los tiempos en porcentaje. A continuación se muestran las estadísticas para la primera sentencia de la vista.
      Tabla 2. Tiempo actual medido en milisegundos de la sentencia comparado con la diferencia expresada en porcentajes entre el tiempo actual y el tiempo anterior
      Tiempo total Tiempo máx. Tiempo promedio Tiempo mín.
      18,32 60,66% 15,92 -1,56% 6,11 60,66% 1,11 97,29%
      La figura muestra que en el anterior conjunto de datos:
      • El tiempo de ejecución total es un 60,66% superior al tiempo de ejecución del conjunto de datos actual
      • El tiempo de ejecución máximo es un 1,56% inferior al tiempo de ejecución del conjunto de datos actual
      • La media del tiempo de ejecución es un 60,66% superior al tiempo de ejecución del conjunto de datos actual
      • El tiempo de ejecución mínimo es un 97,29% superior al tiempo de ejecución del conjunto de datos actual
< Anterior | Siguiente >

Comentarios