DB2: ТАБЛИЦА ПЛАНОВ пуста после ОБЪЯСНЕНИЯ

#sql #database #db2 #explain #db2-luw

#sql #База данных #db2 #объясните #db2-luw

Вопрос:

Я установил IBM — DB2 Express Server Edition и пытаюсь выполнить инструкцию EXPLAIN для запроса.

Я уже вызвал следующую процедуру для создания таблиц EXPLAIN в SYSTOOLS

 CALL SYSPROC.SYSINSTALLOBJECTS('EXPLAIN', 'C', 
      null),   null))
  

и создал ТАБЛИЦУ PLAN_TABLE для моего пользователя

     CREATE TABLE PLAN_TABLE
   (QUERYNO             INTEGER        NOT NULL,
    QBLOCKNO            SMALLINT       NOT NULL,
    APPLNAME            CHAR(8)        NOT NULL,
    PROGNAME            VARCHAR(128)   NOT NULL,
    PLANNO              SMALLINT       NOT NULL,
    METHOD              SMALLINT       NOT NULL,
    CREATOR             VARCHAR(128)   NOT NULL,
    TNAME               VARCHAR(128)   NOT NULL,
    TABNO               SMALLINT       NOT NULL,
    ACCESSTYPE          CHAR(2)        NOT NULL,
    MATCHCOLS           SMALLINT       NOT NULL,
    ACCESSCREATOR       VARCHAR(128)   NOT NULL,
    ACCESSNAME          VARCHAR(128)   NOT NULL,
    INDEXONLY           CHAR(1)        NOT NULL,
    SORTN_UNIQ          CHAR(1)        NOT NULL,
    SORTN_JOIN          CHAR(1)        NOT NULL,
    SORTN_ORDERBY       CHAR(1)        NOT NULL,
    SORTN_GROUPBY       CHAR(1)        NOT NULL,
    SORTC_UNIQ          CHAR(1)        NOT NULL,
    SORTC_JOIN          CHAR(1)        NOT NULL,
    SORTC_ORDERBY       CHAR(1)        NOT NULL,
    SORTC_GROUPBY       CHAR(1)        NOT NULL,
    TSLOCKMODE          CHAR(3)        NOT NULL,
    TIMESTAMP           CHAR(16)       NOT NULL,
    REMARKS             VARCHAR(762)   NOT NULL,
    PREFETCH            CHAR(1)        NOT NULL WITH DEFAULT,
    COLUMN_FN_EVAL      CHAR(1)        NOT NULL WITH DEFAULT,
    MIXOPSEQ            SMALLINT       NOT NULL WITH DEFAULT,
    VERSION             VARCHAR(64)    NOT NULL WITH DEFAULT,
    COLLID              VARCHAR(128)   NOT NULL WITH DEFAULT,
    ACCESS_DEGREE       SMALLINT       ,
    ACCESS_PGROUP_ID    SMALLINT       ,
    JOIN_DEGREE         SMALLINT       ,
    JOIN_PGROUP_ID      SMALLINT       ,
    SORTC_PGROUP_ID     SMALLINT       ,
   SORTN_PGROUP_ID     SMALLINT       ,
    PARALLELISM_MODE    CHAR(1)        ,
    MERGE_JOIN_COLS     SMALLINT       ,
    CORRELATION_NAME    VARCHAR(128)   ,
    PAGE_RANGE          CHAR(1)        NOT NULL WITH DEFAULT,
    JOIN_TYPE           CHAR(1)        NOT NULL WITH DEFAULT,
    GROUP_MEMBER        CHAR(8)        NOT NULL WITH DEFAULT,
    IBM_SERVICE_DATA    VARCHAR(254)   FOR BIT DATA NOT NULL WITH DEFAULT,
    WHEN_OPTIMIZE       CHAR(1)        NOT NULL WITH DEFAULT,
    QBLOCK_TYPE         CHAR(6)        NOT NULL WITH DEFAULT,
    BIND_TIME           TIMESTAMP      NOT NULL WITH DEFAULT,
    OPTHINT             VARCHAR(128)   NOT NULL WITH DEFAULT,
    HINT_USED           VARCHAR(128)   NOT NULL WITH DEFAULT,
    PRIMARY_ACCESSTYPE  CHAR(1)        NOT NULL WITH DEFAULT,
    PARENT_QBLOCKNO     SMALLINT       NOT NULL WITH DEFAULT,
    TABLE_TYPE          CHAR(1)        ,
    TABLE_ENCODE        CHAR(1)        NOT NULL WITH DEFAULT,
    TABLE_SCCSID        SMALLINT       NOT NULL WITH DEFAULT,
    TABLE_MCCSID        SMALLINT       NOT NULL WITH DEFAULT,
    TABLE_DCCSID        SMALLINT       NOT NULL WITH DEFAULT,
    ROUTINE_ID          INTEGER        NOT NULL WITH DEFAULT,
    CTEREF              SMALLINT       NOT NULL WITH DEFAULT,
    STMTTOKEN           VARCHAR(240))
  

Затем я запускаю инструкцию EXPLAIN, как показано ниже (я также пробовал EXPLAIN PLAN вместо EXPLAIN ALL)

 EXPLAIN ALL SET QUERYNO=1 FOR SELECT * FROM SYSIBM.SYSDUMMY1   
  

Я вижу, что таблицы EXPLAIN, такие как EXPLAIN_INSTANCE или EXPLAIN_STATEMENT, получают данные в них, но ТАБЛИЦА PLAN_TABLE пуста.

Есть ли что-то, чего мне здесь не хватает, или все еще нужно настроить? Я привык выполнять объяснения в среде мэйнфреймов, и моя ТАБЛИЦА PLAN_TABLE всегда заполняется правильно.

Спасибо!

Комментарии:

1. Как вы думаете, зачем вам нужна эта ТАБЛИЦА PLAN_TABLE?

2. @a_horse_with_no_name Вот для чего EXPLAIN_* нужны таблицы в DB2 для LUW; Я спрашиваю конкретно PLAN_TABLE .

3. Я привык просматривать таблицу PLAN_TABLE, чтобы увидеть тип доступа, используемые индексы, совпадающие столбцы, используются ли сортировки и т. Д. Я не вижу, где я могу найти эту информацию в таблицах EXPLAIN_ *. Как я уже сказал, я привык делать это на мэйнфрейме, так что, возможно, здесь что-то по-другому.

4. Я не уверен, почему вы не можете найти то, что ищете, в таблицах explain: все там, как описано в руководстве . Рассмотрите возможность использования db2exfmt утилиты вместо ручного запроса таблиц explain.

5. Итак, из того, что я понимаю, невозможно использовать таблицы плана таким же образом в DB2 для LUW, как они используются в DB2 для z / OS. Это правильно? Тогда я рассмотрю эти альтернативные методы. Спасибо.