Supresión de filas de tablas de EXPLAIN

Db2 añade filas a las tablas de EXPLAIN automáticamente. Sin embargo, no suprime filas de las tablas automáticamente.

Acerca de esta tarea

Como ocurre con otras tablas de usuario, puede emitir sentencias DELETE o TRUNCATE para eliminar datos de PLAN_TABLE y de las distintas tablas EXPLAIN relacionadas.

Puede utilizar las columnas QUERYNO, GROUP_MEMBER y EXPLAIN_TIME para identificar las filas correspondientes en las distintas tablas EXPLAIN. También se pueden utilizar otras columnas como APPLNAME y PROGNAME para este propósito.

Cuando tiene en cuenta la estrategia para retener datos de la tabla EXPLAIN, recuerde que puede que no necesite conservar los registros EXPLAIN para sentencias de SQL estático porque puede emitir sentencias EXPLAIN PACKAGE para volver a capturar los datos de EXPLAIN en cualquier momento.

Importante : Algunas herramientas de optimización dependen de instancias de las diversas tablas EXPLAIN. Tenga cuidado de no suprimir datos ni eliminar las tablas de EXPLAIN de las instancias que se crean para estas herramientas.

Procedimiento

Iniciar la información de la interfaz de programación específica del programa. Para eliminar filas de tabla EXPLAIN obsoletas, puede utilizar cualquiera de los siguientes métodos:

  • Utilice sentencias DELETE para eliminar filas de tablas EXPLAIN basándose en la antigüedad de las filas.
    Este método es más adecuado para su uso en entornos de desarrollo.
    Por ejemplo, puede utilizar la siguiente sentencia para suprimir todas las filas que tienen más de un mes de antigüedad de una tabla EXPLAIN concreta:
    DELETE FROM table-name WHERE EXPLAIN_TIME < CURRENT TIMESTAMP - 1 MONTH;
    
  • Establezca una práctica para suprimir de forma selectiva filas de PLAN_TABLE obsoletas o no necesarias y, a continuación, utilice sentencias DELETE para eliminar filas selectivamente de las tablas EXPLAIN relacionadas, basándose en las filas de PLAN_TABLE que quedan.
    Por ejemplo, la siguiente sentencia elimina filas de DSN_DETCOST_TABLE que no tienen filas correspondientes en PLAN_TABLE:
    DELETE FROM DSN_DETCOST_TABLE DT
    WHERE NOT EXISTS
    (SELECT 1
     FROM PLAN_TABLE PT
     WHERE PT.QUERYNO = DT.QUERYNO
     AND PT.APPLNAME = DT.APPLNAME
     AND PT.PROGNAME = DT.PROGNAME
     AND PT.GROUP_MEMBER = DT.GROUP_MEMBER
     AND PT.EXPLAIN_TIME = DT.EXPLAN_TIME);
    En este ejemplo, se incluyen las columnas APPLNAME y PROGNAME para mejorar el rendimiento de la subconsulta si existen muchos valores QUERYNO duplicados. Con este método, realice las siguientes acciones para evitar problemas de rendimiento como la contención de bloqueo:
    • Asegúrese de que existe un índice en las siguientes columnas de PLAN_TABLE: QUERYNO, APPLNAME, PROGNAME, EXPLAIN_TIME, GROUP_MEMBER. El índice de PLAN_TABLE_HINT_IX es adecuado para este propósito. Para obtener más información sobre la creación del índice PLAN_TABLE_HINT_IX, consulte Preparación para influir en las rutas de acceso.
    • Bloquee cada tabla EXPLAIN antes de emitir la sentencia DELETE para esa tabla.
    • Emita una sentencia COMMIT después de la sentencia DELETE para cada tabla.
  • Emita sentencias DROP para las tablas EXPLAIN y cree un nuevo conjunto de tablas EXPLAIN.
    También puede llamar al procedimiento almacenado ADMIN_EXPLAIN_MAINT y especificar la acción DROP_AND_CREATE para sustituir el conjunto de tablas EXPLAIN.
    Si utiliza este método, no se retiene ningún dato de la tabla EXPLAIN existente.Finalizar la información de la interfaz de programación específica del programa.