Utilice un perfil de optimización en procedimiento almacenado de DB2 para Linux, UNIX y Windows

Modificar un plan de ejecución mediante SQL PL

El optimizador de IBM® DB2® para Linux®, UNIX® y Windows® usa un diseño basado en costos. Utilizando un argumento SQL de entrada por un usuario o una aplicación, el optimizador selecciona un plan de ejecución con el menor costo para lograr el mejor desempeño. Si el desempeño todavía no cumple los requerimientos después de haber utilizado todas las mejores prácticas para ajustar el argumento SQL, usted puede utilizar un perfil de optimización para guiar a DB2 en la creación del plan de ejecución que el usuario espera. Este artículo explica cómo usar perfiles de optimización dentro de procedimientos almacenados de DB2.

Rui Bo Han, Software Engineer, IBM

Photo of author Rui Bo HanRui Bo Han trabaja en el departamento de ETI de IBM CDL y se concentra en el ajuste de desempeño de TPC-E y DB2 en pataforma Power7.



25-09-2012

Introducción

La mayoría de los principales sistemas de administración de bases de datos relacionales, incluyendo DB2 para Linux, UNIX y Windows, usan un diseño de optimizador basado en costos. El optimizador estima el costo basado en diferentes condiciones, incluyendo las condiciones externas como paralelismo y velocidad de la CPU, las características del almacenamiento de E/S y el ancho de banda de comunicación, además de condiciones internas como las variables del registro de DB2, el nivel de optimización de DB2, la información estadística, y así sucesivamente. Por otra parte, muchas de estas condiciones cambian durante todo el tiempo de ejecución del sistema, por lo que el proceso de escoger el mejor plan de ejecución es un procedimiento muy complejo para cualquier sistema de base de datos. El perfil de optimización de DB2 es un complemento importante para el optimizador. Para los argumentos SQL que no cumplan los requerimientos de desempeño después de haber implementado otras prácticas de ajuste, usted puede usar esta función para modificar el plan de ejecución predeterminado. Si es más útil para la depuración de aplicaciones y la optimización del desempeño de los argumentos SQL.

Los procedimientos almacenados son otra función útil de los sistemas de bases de datos. Utilizando procedimientos almacenados, la base de datos puede implementar funciones que existen en lenguajes de programación avanzados, como definición de variable, argumento de condición, argumento de control, etcétera. Los procedimientos almacenados en DB2 están escritos en DB2 SQL Procedure Language (SQL PL). SQL PL es un subconjunto del estándar de lenguaje, SQL Persistent Storage Module. Este estándar combina la conveniencia de acceder a datos mediante SQL y la función de control de flujo de un lenguaje de programación.

Los argumentos SQL en procedimientos almacenados a menudo tienen una lógica más compleja y son muy difíciles de depurar o ajustar y, en algunos casos, el plan de acceso seleccionado por DB2 no es el que desea utilizar, especialmente en una situación de depuración de una aplicación. Si después de utilizar las mejores prácticas, aún no ha podido obtener el desempeño esperado del procedimiento almacenado, usted puede utilizar un perfil de optimización para ayudar. Los argumentos SQL en procedimientos almacenados pueden ser un poco diferentes de los argumentos SQL en otra parte, en que a menudo incluyen algunas variables de entrada (salida). Cuando usted desee utilizar un perfil de optimización con este tipo de argumentos, son necesarios algunos pasos adicionales para lograr los resultados esperados. En este artículo, con un ejemplo, usted aprenderá a utilizar un perfil de optimización para modificar el plan de ejecución de argumentos SQL en un procedimiento almacenado.


Introducción a perfiles de optimización

Un perfil de optimización es un documento XML que contiene las directrices de optimización para uno o más argumentos de lenguaje de manipulación de datos (DML). Un perfil de optimización puede contener directrices globales, que se aplican a todos los argumentos DML que se ejecutan mientras el perfil está en efecto, y puede contener directrices específicas que se aplican a argumentos DML individuales en un paquete. Perfiles de optimización pueden utilizarse para modificar el plan de acceso de argumentos SQL, pero eso no significa que usted puede especificar arbitrariamente un plan de acceso para un argumento.

Se debe prestar especial atención a las dos cuestiones siguientes:

  1. La clase de optimización anula los perfiles de optimización. Es decir, el optimizador utilizará las directrices solo si siguen las reglas de la clase actual de optimización. Por ejemplo, usted no puede utilizar unión de fusión o combinación hash en el nivel 0 de optimización.
  2. Una directriz de optimización se escogerá solo si es uno de los planes evaluados por el optimizador. Si por alguna razón el optimizador no evaluó el plan especificado en el perfil de optimización, no lo usará.

El formato básico del perfil de optimización se muestra en el Listado 1.

Listado 1. Ejemplo de archivo de perfil de optimización
<?xml version="1.0" encoding="UTF-8"?>
<OPTPROFILE VERSION="9.1.0.0">
  <!-- Global optimization guidelines section. Optional but at most one. -->
  <OPTGUIDELINES>
    Here is for the global guidelines
  </OPTGUIDELINES>

  <!-- Statement profile section. Zero or more. -->
  <STMTPROFILE ID="profile id">
    <STMTKEY>
      Here is for the statement that we want to apply this statement level 
      optimization guidelines to
    </STMTKEY>
    <OPTGUIDELINES>
      Here is for the optimization guidelines for the statement defined in the 
      <STMTKEY> element
    </OPTGUIDELINES>
  </STMTPROFILE>
</OPTPROFILE>

OPTPROFILE

Un perfil de optimización empieza con el elemento OPTPROFILE. Este elemento se compone de un atributo denominado VERSIÓN que especifica la edición del esquema XML que este archivo mantiene. Un perfil de optimización debe incluir y solo puede incluir un elemento OPTPROFILE.

Directrices de optimización global

Un perfil de optimización puede tener como máximo una sección de directrices globales de optimización. Mientras el perfil de optimización esté en efecto, se aplicará a todas los argumentos que se ejecuten. Las directrices de optimización global están definidas en el elemento OPTGUIDELINES. Por ejemplo, usted puede especificar cuál MQT usar, el nivel de optimización, el grado de la consulta concurrente, etcétera.

Sección de argumento de perfil

Un perfil de optimización puede tener cero o más secciones de argumentos de perfil. Mientras el perfil de optimización esté en efecto, solo se aplicará al argumento SQL que coincida exactamente. Las directrices de argumentos de optimización se definen dentro del elemento STMTPROFILE. Consiste de un elemento STMTKEY y un elemento OPTGUIDELINES.

El elemento STMTKEY define el argumento SQL al que se aplicarán las directrices de argumentos de optimización. DB2 utiliza el contenido definido dentro del elemento STMTKEY para que coincida con el argumento SQL. Si coincide correctamente, las directrices de optimización relacionadas con este STMTKEY se aplicarán a este argumento SQL. El argumento definido dentro del elemento STMTKEY debe coincidir exactamente con el argumento cuyo plan de acceso es afectado, y esta coincidencia distingue mayúsculas de minúsculas. Permite espacios en blanco redundantes y caracteres de control, como un carácter de salto de línea. Sin embargo, no permite el uso de un carácter comodín para que coincida con el grupo de argumentos. Los argumentos que sea necesario afectar solo deben tener una sección separada de STMTPROFILE. Si hay más de un STMTPROFILE que coincida con el argumento de ejecución, solo elegiremos y aplicaremos el primero.

Dentro del elemento OPTGUIDELINES, usted puede especificar el método de acceso de DB2 a alguna tabla (exploración de tabla o índice), modificar la secuencia de la operación de unión y el método unión a utilizar, especificar las reglas de regrabación de consulta, etcétera. Cuando el argumento SQL de ejecución coincide exactamente con el contenido del elemento STMTKEY, todas las directrices de optimización en el elemento OPTGUIDELINES relacionado se aplicarán a la creación del plan de acceso para este argumento SQL.


Modificando el plan de acceso de los argumentos SQL en un procedimiento almacenado

Los argumentos SQL que se usan dentro de un procedimiento almacenado pueden ser especiales en la forma. Por ejemplo, a menudo contienen algunas variables de entrada (salida). Este tipo de argumento SQL no puede ser utilizado directamente por el elemento STMTKEY. Cuando DB2 compila estos argumentos, reemplazará estas variables con la forma interna, y luego usa esta forma interna como la versión final. Si utiliza el argumento SQL original como el STMTKEY, mientras que DB2 utiliza la forma interna para equiparar, no tendrá éxito. Por lo tanto, es necesario encontrar la forma interna de estos argumentos SQL al principio y luego utilizarlos como el STMTKEY para crear el perfil de optimización. Las siguientes secciones muestran los pasos necesarios.

Entorno de prueba

En este artículo, para las pruebas y los ejemplos se utiliza el siguiente entorno:

  • Sistema operativo: AIX 6.1
  • DB2 para Linux, UNIX y Windows Versión 9.7
  • Base de datos: base de datos de MUESTRA

Todos los ejemplos en este artículo se basan en DB2 V9.7 ejecutando el sistema operativo AIX 6.1. Para otros sistemas operativos, la implementación debe ser la misma.

Preparando la base de datos de prueba

Como se muestra en la Figura 1, la base de datos de MUESTRA es una pequeña base de datos provista por DB2. Si no la instaló durante la configuración, puede ir al directorio sqllib/bin de la instancia actual y ejecutar el comando db2sampl para crearla automáticamente.

Figura 1. Crear base de datos de prueba
Crear base de datos de prueba

Creando las tablas de explicación

Es necesario que utilice la herramienta DB2 Explain para ver si las directrices de optimización se han seleccionado, y si los planes de acceso de los argumentos SQL se han modificado. La salida de la herramienta Explain mostrará el nombre del perfil de optimización y las directrices válidas que se usan. Por lo tanto, debe crear las tablas necesarias para la herramienta Explain. De manera predeterminada, DB2 no creará estas tablas.

Como se muestra en el Listado 2, desde el directorio sqllib/misc del propietario de la instancia actual, ejecute el archivo EXPLAIN.DDL para finalizar la creación de todas las tablas Explain.

Listado 2. Script para crear la tabla Explain
db2 connect sample db2 -tvf EXPLAIN.DDL db2 connect reset

Después de ejecutar el comando anterior, vuelva a conectarse a la base de datos y ejecute db2 list tables. Usted puede ver todas las tablas recién creadas en el catálogo del sistema con el prefijo EXPLAIN, como se muestra en la Figura 2. Estas tablas la herramienta Explain las utiliza para almacenar información.

Figura 2. Tablas Explain recién creadas
Tablas Explain recién creadas

Crear tabla SYSTOOLS.OPT_PROFILE

Como se muestra en el Listado 3, todos los perfiles de optimización que usted ha definido se almacenarán en la tabla OPT_PROFILE bajo el esquema SYSTOOLS. De manera predeterminada, DB2 no creará esta tabla. Si desea usar el perfil de optimización para modificar el plan de acceso del argumento SQL, debe crearlo usted mismo.

Listado 3. SQL para crear la tabla SYSTOOLS.OPT_PROFILE
CREATE TABLE SYSTOOLS.OPT_PROFILE (
      SCHEMA VARCHAR(128) NOT NULL,
      NAME VARCHAR(128) NOT NULL,
      PROFILE BLOB (2M) NOT NULL,
      PRIMARY KEY ( SCHEMA, NAME ) );

Esta tabla contiene las siguientes tres columnas:

  • Columna SCHEMA que se refiere al nombre del esquema del perfil de optimización.
  • Columna NAME que se refiere al nombre del esquema del perfil de optimización.
  • Columna PROFILE que almacena el contenido del perfil de optimización.

SCHEMA.NAME puede utilizarse para identificar un perfil de optimización de manera única en la base de datos. Como se muestra en el Listado 4, guarde el script anterior en el archivo SYSTOOLS.OPT_PROFILE.DDL y vuelva a conectarse a la base de datos.

Listado 4. Script para crear la tabla SYSTOOLS.OPT_PROFILE
db2 connect to sample db2 -tvf SYSTOOLS.OPT_PROFILE.DDL db2 connect reset

Después de ejecutar el script, usted finalizará la creación de esta tabla como se muestra en la Figura 3.

Figura 3. Creación de la tabla SYSTOOLS.OPT_PROFILE
Creación de la tabla SYSTOOLS.OPT_PROFILE

Creando el procedimiento almacenado

Para la sintaxis detallada del procedimiento almacenado, refiérase a la sección del procedimiento almacenado en el IBM DB2 9.7 Information Center, consulte la sección Resources . Como se muestra en el Listado 5, para finalizar todos sus ejemplos usted creará un simple procedimiento almacenado con el nombre ET_EMP_NUM. Este procedimiento almacenado utiliza las tablas DEPARTMENT y EMPLOYEE en la base de datos de muestra. Tiene dos parámetros, uno de entrada denominado DEPT_NO (ID del departamento), y uno de salida denominado EMP_NUM (el número del empleado en este departamento). La función de este procedimiento almacenado es calcular la cantidad de empleados en un departamento basado en el ID del departamento que el usuario introduce.

Listado 5. Script para definir el procedimiento almacenado
CONNECT TO SAMPLE%

CALL SYSPROC.SET_ROUTINE_OPTS('EXPLAIN ALL')%

CREATE PROCEDURE GET_EMP_NUM(
  IN DEPT_NO CHAR(50),
  OUT EMP_NUM INTEGER)

LANGUAGE SQL

BEGIN

  SELECT COUNT(*) INTO EMP_NUM 
  FROM DEPARTMENT, EMPLOYEE 
  WHERE DEPARTMENT.DEPTNO = EMPLOYEE.WORKDEPT 
  AND DEPARTMENT.DEPTNAME = DEPT_NO;

END%

CONNECT RESET%

Llamar el procedimiento almacenado SYSPROC.SET_ROUTINE_OPTS para configurar las opciones de precompilación y empaquetamiento antes de la definición del procedimiento almacenado GET_EMP_NUM. Usted también puede implementar la misma función modificando la variable de registro DB2_SQLROUTINE_PREPOPTS. Si llama el procedimiento almacenado SYSPROC.SET_ROUTINE_OPTS, anulará el valor de esta variable de registro. Aquí, usted pasa el parámetro EXPLAIN ALL al procedimiento almacenado SYSPROC.SET_ROUTINE_OPT. Significa que durante la creación del procedimiento almacenado, los planes de acceso de todos los argumentos SQL se guardarán en tablas Explain.

Guardar el script anterior en el archivo create_procedure.ddl como se muestra en el Listado 6, y ejecutar los comandos que se muestran en la Figura 4 para finalizar la creación del procedimiento almacenado. Observe que usted debe ejecutar RUNSTATS en estas dos tablas antes de crear el procedimiento almacenado de manera que DB2 use la última información estadística para generar planes de acceso más eficaces.

Listado 6. Script para crear el procedimiento almacenado
db2 connect to sample
db2 'runstats on table db2inst1.department and indexes all'
db2 'runstats on table db2inst1.employee and indexes all'
db2 connect to reset
db2 -td% -vf create_procedure.ddl
Figura 4. Crear el procedimiento almacenado GET_EMP_NUM
Crear el procedimiento almacenado GET_EMP_NUM

Visualizar la forma interna de los argumentos SQL definidos en el procedimiento almacenado

Para estos argumentos SQL definidos en el procedimiento almacenado, DB2 remplazará la variable de entrada (salida) por su forma interna. Usted puede usar el argumento SQL que se muestra en el Listado 7 para visualizar la forma interna de estos argumentos.

Listado 7. SQL para visualizar la forma interna de los argumentos SQL definidos en el procedimiento almacenado
SELECT PKGNAME,  S.TEXT
  FROM SYSCAT.STATEMENTS AS S,
       SYSCAT.ROUTINEDEP AS D,
       SYSCAT.ROUTINES   AS R
 WHERE PKGSCHEMA = BSCHEMA
   AND PKGNAME = BNAME
   AND BTYPE = 'K'
   AND R.SPECIFICNAME = D.SPECIFICNAME
   AND R.ROUTINESCHEMA = D.ROUTINESCHEMA
   AND R.ROUTINENAME = 'GET_EMP_NUM'
   AND R.ROUTINESCHEMA = 'DB2INST1'
 ORDER BY STMTNO;

Uste debe remplazar el valor de R.ROUTINESCHEMA por el nombre del esquema del procedimiento almacenado que utiliza (en este ejemplo es DB2INST1), y remplazar el valor de R.ROUTINENAME por el nombre del procedimiento almacenado (en este ejemplo es GET_EMP_NUM). Después, guarde el script en el archivo get_routine_sqls.sql y conéctese a la base de datos para ejecutar el script, como se muestra en el Listado 8.

Listado 8. Script para visualizar la forma interna de los argumentos SQL definidos en el procedimiento almacenado
db2 connect to sample db2 -tvf get_routine_sqls.sql db2 connect reset

La salida del SQL anterior incluye dos columnas. Una es el nombre del paquete relacionado al procedimiento almacenado, y la otra es la forma interna del o los argumentos SQL. La salida después de ejecutar el script se muestra en la Figura 5.

Figura 5. Consulta de la forma interna de los argumentos SQL definidos en el procedimiento almacenado
Consulta de la forma interna de los argumentos SQL definidos en el procedimiento almacenado

Usted puede ver que el parámetro de salida EMP_NUM ha sido remplazado por :HV00009 :HI00009, y que el parámetro de entrada DEPT_NO ha sido remplazado por :HV00008 :HI00008. Es muy diferente del argumento SQL definido originalmente en el procedimiento almacenado. Como esta nueva forma es la que DB2 utilizará durante la compilación y ejecución, esta es la que usted usará en el elemento STMTKEY. Además, la primera columna del resultado es el nombre del paquete relacionado a este procedimiento almacenado ( en este ejemplo es P1513856). Usted debe usar esta información en una consulta posterior para recuperar el plan de acceso a este procedimiento almacenado.

Visualización del plan de acceso predeterminado

Para comprobar que el perfil de optimización modifica el plan de acceso predeterminado de DB2, usted primero debe obtener el plan de acceso del argumento SQL. Al utilizar la herramienta db2exfmt, la opción –n se relaciona con el nombre del paquete. Para obtener información detallada acerca de las opciones de esta herramienta, refiérase a la sección relacionada en el IBM DB2 9.7 Information Center, consulte la sección Resources . Como se muestra en el Listado 9 y en la Figura 6, usted guarda el plan original de acceso en el archivo orig_plan.out.

Listado 9. Script para visualizar el plan original de acceso del argumento SQL
db2exfmt -d sample -e db2inst1 -g -l -n 'P1513856' -s db2inst1 
-o orig_plan.out -w -1 -# 0 -v %
Figura 6. Plan original de acceso
Plan original de acceso

En el plan de acceso anterior, usted puede ver que DB2 eligió una unión de bucle anidado para ejecutar este argumento de manera predeterminada. DEPARTMENT se escoge como la tabla externa (mediante el método de exploración de tabla), y EMPLOYEE se escoge como la tabla interna (mediante el método de exploración de índice, XEMP2 es un índice de la tabla EMPLOYEE). En los ejemplos siguientes, el perfil de optimización se utilizará para modificar esta secuencia de unión (EMPLOYEE será la tabla externa y DEPARTMENT será la tabla interna). El propósito de hacer esto no es para mejorar el desempeño, sino que para mostrar que el perfil de optimización se ha aplicado al argumento SQL.

Creando el perfil de optimización

Como se muestra en el Listado 10, utilice la forma interna de los argumentos SQL definidos en el procedimiento almacenado para crear el archivo del perfil de optimización.

Listado 10. Script of optimization profile
<?xml version='1.0' encoding='UTF-8'?>
<OPTPROFILE VERSION='9.1.0.0'>
  <STMTPROFILE ID='example profile'>
    <STMTKEY>
       <![CDATA[SELECT COUNT(*) INTO :HV00009 :HI00009
FROM DEPARTMENT, EMPLOYEE
WHERE DEPARTMENT.DEPTNO = EMPLOYEE.WORKDEPT AND DEPARTMENT.DEPTNAME =
        :HV00008 :HI00008]]>
    </STMTKEY>
    <OPTGUIDELINES>
        <NLJOIN>
          <ACCESS TABLE='EMPLOYEE'/>
          <ACCESS TABLE='DEPARTMENT'/>
        </NLJOIN>
    </OPTGUIDELINES>
  </STMTPROFILE>
</OPTPROFILE>

Los siguientes puntos del script anterior deben recibir atención especial:

  • Atributo ID del elemento STMTPROFILE: el valor del atributo ID es la identificación única de esta directriz de optimización de nivel de argumento en este perfil de optimización. Si esta directriz de optimización se aplica a algunos argumentos SQL, usted puede ver esta identificación desde el plan de acceso del argumento.
  • Elemento STMTKEY: usted debe usar la forma interna del argumento SQL como el STMTKEY, de lo contrario, no puede equipararse correctamente. En común, siempre utilice <! [CDATA []]> para encerrar el argumento.
  • Elemento NLJOIN: este elemento especifica la secuencia de unión. Aquí, usted utiliza EMPLOYEE como la tabla externa y DEPARTMENT como la tabla interna.

Insertar el perfil de optimización en la base de datos

Después de definir el perfil de optimización, guárdelo en el archivo test_profile.prof. A continuación, cargue estos datos en la tabla SYSTOOLS.OPT_PROFILE, y utilice el comando importar para concluir esta operación.

Primero, defina el archivo de origen de los datos a importar con el nombre profile_file.load. Como se muestra en el Listado 11, este archivo especifica el nombre del esquema del perfil de optimización como Test, el nombre del perfil de optimización es OPTPROF, y el contenido detallado del perfil de optimización está en el archivo test_profile.prof .

Listado 11. archivo de origen de los datos a importar
"TEST","OPTPROF","test_profile.prof"

A continuación, ejecute el comando importar como se muestra en el Listado 12 y en la Figura 7, para cargar los datos en la base de datos.

Listado 12. Script de perfil de optimización
db2 "IMPORT FROM profile_file.load OF DEL MODIFIED BY LOBSINFILE 
INSERT_UPDATE INTO SYSTOOLS.OPT_PROFILE"
Figura 7. comando importar
comando importar

Modificar el archivo de definición del procedimiento almacenado para usar este perfil de optimización

Si usted desea utilizar un perfil de optimización en el procedimiento almacenado, más allá de configurar la anterior variable de registro para habilitar esta función, también es necesario llamar el procedimiento almacenado de sistema, SYSPROC.SET_ROUTINE_OPTS, para configurar el nombre del esquema y, entonces, el nombre del perfil de optimización que se utilizará durante el tiempo de precompilación y empaquetamiento, como se muestra en el Listado 13. Es necesario que usted especifique la opcion OPTPROFILE en el parámetro de SYSPROC.SET_ROUTINE_OPTS, y su valor es TEST.OPTPROF. Así, el perfil de optimización previamente definido se utilizará para crear planes de acceso para los argumentos SQL en este procedimiento almacenado. Por supuesto, usted puede obtener los mismos resultados mediante configuración de la variable de registro DB2_SQLROUTINE_PREPOPTS.

Listado 13. Procedimiento almacenado modificado
CONNECT TO SAMPLE%

CALL SYSPROC.SET_ROUTINE_OPTS('EXPLAIN ALL OPTPROFILE TEST.OPTPROF')%

CREATE PROCEDURE GET_EMP_NUM(
  IN DEPT_NO CHAR(50),
  OUT EMP_NUM INTEGER)

LANGUAGE SQL

BEGIN

  SELECT COUNT(*) INTO EMP_NUM 
  FROM DEPARTMENT, EMPLOYEE 
  WHERE DEPARTMENT.DEPTNO = EMPLOYEE.WORKDEPT 
  AND DEPARTMENT.DEPTNAME = DEPT_NO;

END%

CONNECT RESET%

Como se muestra en el Listado 14, elimine el procedimiento almacenado que ha sido creado y, entonces, recréelo.

Listado 14. procedimiento almacenado recreado
db2 connect to sample db2 drop procedure GET_EMP_NUM db2 -td% -vf create_procedure.ddl

Visualización del nuevo plan de acceso para comprobar que el perfil de optimización es utilizado

Para comprobar que el perfil de optimización se utiliza correctamente, usted debe comparar el plan de acceso original con el nuevo plan de acceso.

Primero, a medida que el procedimiento almacenado es recreado, DB2 le asigna un nuevo paquete. Ejecute el comando que se muestra en el Listado 15 y en la Figura 8 para obtener nombre del paquete relacionado para su procedimiento almacenado.

Listado 15. Obtener el nombre del paquete del procedimiento almacenado
db2 connect to sample db2 -tvf get_routine_sqls.sql
Figura 8. Nombre del nuevo paquete para el procedimiento almacenado recreado
Nombre del nuevo paquete para el procedimiento almacenado recreado

A continuación utilice el nombre del paquete anterior para visualizar el nuevo plan de acceso del procedimiento almacenado y guarde el resultado en el archivo curr_plan.out, que se muestra en el Listado 16.

Listado 16. Obtenga el nuevo plan de acceso
db2exfmt -d sample -e db2inst1 -g -l -n 'P2270199' -s db2inst1 
-o curr_plan.out -w -1 -# 0 -v %

Desde el nuevo plan de acceso, usted puede ver que hay una parte adicional de Información de Perfil, como se muestra en la Figura 9. Incluye el nombre del esquema y el nombre del archivo de optimización que se utiliza para generar el plan de acceso de este argumento SQL (en este ejemplo, es TEST.OPTPROF), y el ID de la directriz de optimización de nivel de argumento que coincide con el argumento. Este ID se especifica cuando usted define el perfil de optimización.

Figura 9. Nuevo plan de acceso del procedure_1 almacenado
Nuevo plan de acceso del procedure_1 almacenado

Al mismo tiempo, desde el nuevo plan de acceso usted puede ver que la secuencia de unión ha sido cambiada, como se muestra en la Figura 10. Ahora la tabla externa es la tabla EMPLOYEE y la tabla interna es la tabla DEPARTMENT. Así, usted puede probar que el perfil de optimización es utilizado correctamente para acceder a la generación de planes de acceso del argumento SQL en el procedimiento almacenado.

Figura 10. Nuevo plan de acceso del procedure_2 almacenado
Nuevo plan de acceso del procedure_2 almacenado

Conclusión

Los procedimientos almacenados son una función muy útil de DB2. Los argumentos SQL definidos dentro de un procedimiento almacenado a menudo son muy complejos y difíciles de depurar y ajustar. En algunas situaciones, el plan de acceso seleccionado por DB2 puede no ser el que desea usar, especialmente al depurar problemas de desempeño. Al utilizar un perfil de optimización, usted puede afectar los planes de acceso de los argumentos SQL sin cambiar las configuraciones de la aplicación y de la base de datos. Es una herramienta muy eficaz para depurar su aplicación y optimizar su SQL.

Recursos

Aprender

Obtener los productos y tecnologías

  • Ahora usted puede utilizar DB2 gratuitamente. Descargas DB2 Express-C, una versión sin costo del DB2 Express Edition para la comunidad, que ofrece los mismos recursos de datos esenciales que el DB2 Express Edition y que proporciona una base sólida para desarrollar e implementar aplicaciones.
  • Evalúe productos de IBM de la manera que le convenga: descargue una evaluación de producto, pruebe un producto online, úselo en un entorno de nube o pase algunas horas en la SOA Sandbox aprendiendo a implementar con eficiencia la Arquitectura Orientada a Servicios.

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt
ArticleID=837061
ArticleTitle=Utilice un perfil de optimización en procedimiento almacenado de DB2 para Linux, UNIX y Windows
publish-date=09252012