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
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.
