Tabla DSN_PREDICATE_SELECTIVITY

La tabla de selectividad de predicados contienen información sobre la selectividad de los predicados que se utilizan para acceder a la selección de vías de acceso. Se utiliza como una tabla de entrada para el mandato BIND QUERY cuando se especifican alteraciones temporales de selectividad.

Iniciar la información de la interfaz de programación específica del programa.

Cuando no se especifican modificaciones de selectividad o las modificaciones de selectividad especificadas no pueden ser utilizadas por Db2, la tabla DSN_PREDICATE_SELECTIVITY contiene una fila para cada predicado de DSN_PREDICAT_TABLE que se utiliza para la selección de vía de acceso. Estas filas incluyen valores ASSUMPTION='NORMAL'. DSN_PREDICATE_SELECTIVITY no contiene filas de la tabla DSN_PREDICAT_TABLE para predicados que no se utilizan en la selección de vías de acceso.

Cuando Db2 especifica y utiliza modificaciones de selectividad, esta tabla también contiene una fila para cada modificación de selectividad que se ha utilizado. Estas filas incluyen valores ASSUMPTION='OVERRIDE'.

Asimismo, si la suma de las ponderaciones de todas las instancias de sustitución de selectividad especificadas es inferior a uno, esta tabla contiene una fila para cada predicado de la tabla DSN_PREDICAT_TABLE que se utiliza para seleccionar vías de acceso. Estas filas contienen valores ASSUMPTION='NORMAL' y valores WEIGHT equivalentes a uno menos la suma de los valores de ponderación de sustitución especificados.

Recomendación : No introduzca datos manualmente en las tablas EXPLAIN mantenidas por el sistema y tenga cuidado al eliminar datos obsoletos de las tablas EXPLAIN. Los datos están destinados a ser manipulados únicamente por la función EXPLAIN (EXPLICAR) y las herramientas de optimización de Db2 . Algunas herramientas de optimización dependen de instancias de las distintas tablas de EXPLAIN. Tenga cuidado de no suprimir datos ni eliminar las tablas de EXPLAIN de las instancias que se crean para estas herramientas.

Calificadores

Su subsistema o grupo de uso compartido de datos contiene varias instancias de estas tablas cualificadas por el ID de usuario. Estas tablas se llenan con la información de coste de sentencias cuando se emite la sentencia EXPLAIN o se vincula. También se llenan cuando especifica EXPLAIN(YES) o EXPLAIN (ONLY) en un mandato BIND o REBIND. Las herramientas de optimización de SQL también pueden crear tablas de EXPLAIN calificadas por un ID de usuario. Puede encontrar la sentencia de SQL para crear una instancia de estas tablas en el miembro DSNTESC de la biblioteca SDSNSAMP.

Sentencia de CREATE TABLE de ejemplo

Puede encontrar un ejemplo de declaración CREATE TABLE para cada tabla EXPLAIN en el miembro DSNTESC de la biblioteca con prefijo. SDSNSAMP. Para actualizar las tablas EXPLAIN al formato de la actual Db2, puede llamar al procedimiento almacenado ADMIN_EXPLAIN_MAINT. ADMIN_EXPLAIN_MAINT también puede crear tablas EXPLAIN, actualizarlas al formato de la versión actual de Db2 o realizar otras tareas de mantenimiento. Consulte el procedimiento almacenado ADMIN_EXPLAIN_MAINT para obtener información sobre el uso del parámetro de entrada action para solicitar cada una de estas tareas. Alternativamente, para realizar sólo la tarea de actualizar las tablas EXPLAIN al formato de la actual Db2, puede ejecutar la tarea DSNTIJXA. DSNTIJXA invoca al REXX exec DSNTXTA para realizar la actualización. Consulte Migración paso 21: Convertir tablas EXPLAIN al formato actual para obtener más información sobre la ejecución de DSNTIJXA.

Descripciones de columnas

El subsistema o el grupo de compartimiento de datos pueden contener más de una de estas tablas, incluyendo una tabla con el calificador SYSIBM, una tabla con el calificador DB2OSCA y tablas adicionales que están calificadas por los ID de usuario.

En la siguiente tabla se muestran las descripciones de las columnas de la tabla DSN_PREDICATE_SELECTIVITY.

Tabla 1. Descripciones de las columnas de la tabla DSN_PREDICATE_SELECTIVITY
Nombre de columna Tipo de datos Descripción
QUERYNO INTEGER NOT NULL Número que identifica la sentencia que se va a explicar. El origen del valor depende del contexto de la fila:
Para filas generadas por sentencias EXPLAIN
El número especificado en la cláusula QUERYNO, que es una parte opcional de la sintaxis de las sentencias SELECT, INSERT, UPDATE, MERGE y DELETE.
Para las filas no producidas por sentencias EXPLAIN
Db2 asigna un número que se basa en el número de línea de la sentencia de SQL en el programa de origen.

Cuando los valores de QUERYNO se basan en el número de sentencia del programa de origen, los valores que superan 32767 se notifican como 0. Sin embargo, en algunos casos raros, no está garantizado que el valor sea exclusivo.

Cuando la instrucción SQL está incrustada en una función SQL compilada, un procedimiento SQL nativo o un desencadenador avanzado, si se especifica la cláusula QUERYNO, su valor es utilizado por Db2. De lo contrario, Db2 asigna un número basado en el número de línea de la instrucción SQL en la función SQL compilada, el procedimiento SQL nativo o el desencadenador avanzado.

QBLOCKNO SMALLINT NOT NULL Un número que identifica cada bloque de consulta dentro de una consulta. El valor de los números no está en ningún orden en particular, ni son necesariamente consecutivos.
APPLNAME VARCHAR(24) NOT NULL El nombre del plan de aplicación para la fila. Sólo se aplica a sentencias EXPLAIN incorporadas que se ejecutan desde un plan o a sentencias que se explican cuando se vincula un plan. Un blanco indica que la columna no es aplicable.

Cuando la instrucción SQL está incrustada en una función SQL compilada, un procedimiento SQL nativo o un desencadenador avanzado, esta columna no se utiliza y está en blanco.

PROGNAME VARCHAR(128) NOT NULL El nombre del programa o el paquete que contiene la sentencia que se explica. Sólo se aplica a sentencias EXPLAIN incorporadas y a sentencias que se explican como resultado de la vinculación de un plan o paquete. Un blanco indica que la columna no es aplicable.

Cuando la sentencia SQL se incluye en una función SQL compilada o procedimiento de SQL nativo, esta columna indica el nombre específico de la función SQL compilada o procedimiento SQL nativo. Cuando la sentencia SQL se incluye en un activador avanzado, esta columna contiene el nombre del activador.

SECTNOI INTEGER NOT NULL WITH DEFAULT El número de sección de la sentencia. El valor se obtiene de la misma columna en las tablas SYSPACKSTMT o SYSSTMT y puede utilizarse para unir tablas para reconstruir la vía de acceso de la sentencia. Esta columna sólo es aplicable para las sentencias estáticas. El valor predeterminado de -1 indica EXPLAIN información que fue capturada en DB2® 9 o anterior.
COLLID VARCHAR(128) NOT NULL El ID de recopilación:
'DSNEXPLAINMODEYES'
La fila se origina en una aplicación que especifica YES para el valor del registro especial CURRENT EXPLAIN MODE.
'DSNEXPLAINMODEEXPLAIN'
La fila se origina en una aplicación que especifica EXPLAIN para el valor del registro especial CURRENT EXPLAIN MODE.

Cuando la instrucción SQL está incrustada en una función SQL compilada, un procedimiento SQL nativo o un desencadenador avanzado, esta columna indica el nombre del esquema de la función SQL compilada, el procedimiento SQL nativo o el desencadenador avanzado.

Version VARCHAR(122) NOT NULL El identificador de versión del paquete. Solo se aplica a una sentencia EXPLAIN incorporada ejecutada desde un paquete o a una sentencia que se explica al enlazar un paquete.

Si el valor no está en blanco, el valor es el mismo que el valor VERSION para el paquete que se ha utilizado para crear esta fila de tabla EXPLAIN.

El valor está en blanco para un extracto en:
  • Un paquete para un desencadenante básico (TYPE='T')
  • Un paquete para una aplicación que se ha compilado previamente sin la opción de proceso de SQL VERSION
  • Un paquete que se ha compilado previamente con una serie vacía para el valor VERSION (TYPE=blank)
Cuando la sentencia SQL está incorporada en una función SQL compilada o en un procedimiento SQL nativo, esta columna indica el identificador de versión de la función o procedimiento. Cuando la sentencia SQL se incluye en un cuerpo de activador avanzado, esta columna no se utiliza y aparecerá en blanco.
PREDNO INTEGER NOT NULL El número de predicado, un número utilizado para identificar un predicado dentro de una consulta.
INSTANCIA SMALLINT NOT NULL Instancia de selectividad. Se utiliza para agrupar selectividades relacionadas.
SELECTIVITY FLOAT NOT NULL Estimación de la selectividad.
WEIGHT FLOAT(4) NOT NULL Porcentaje de ejecuciones que tienen la selectividad especificada. Por ejemplo, un valor de 0,25 significa que el 25% del tiempo cuando se ejecuta esta consulta tiene esta selectividad.
ASSUMPTION VARCHAR(128) NOT NULL Indica cómo se estima la selectividad o cómo se utiliza. Uno de los valores siguientes:
'NORMAL'
La selectividad se calcula utilizando las hipótesis de selectividad normales.
'OVERRIDE'
La selectividad se basa en una sustitución.
INSERT_TIME TIMESTAMP NOT NULL GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP La hora en que se ha insertado o actualizado la fila.
EXPLAIN_TIME TIMESTAMP Hora a la que se ha capturado la información de EXPLAIN:
Todas las sentencias almacenadas en la antememoria
Hora a la que la sentencia ha entrado en la antememoria, con el formato de un valor de indicación de fecha y hora de precisión total.
Sentencias estáticas no almacenadas en la antememoria
Hora a la que la sentencia se ha vinculado, con el formato de un valor de indicación de fecha y hora de precisión total.
Sentencias dinámicas no almacenadas en la antememoria
Hora a la que se ha ejecutado EXPLAIN, con el formato de un valor equivalente a la representación CHAR(16) de la hora con cuatro ceros añadidos.
REMARKS VARCHAR (762) IBM® solo para uso interno.
EXPANSION_REASON CHAR(2) NOT NULL WITH DEFAULT
Esta columna se aplica sólo a sentencias que hacen referencia a tablas de archivo o tablas temporales. En otras sentencias, esta columna está en blanco.

Indica el efecto del registro especial CURRENT TEMPORAL BUSINESS_TIME, el registro especial CURRENT TEMPORAL SYSTEM_TIME y la variable global incorporada SYSIBMADM.GET_ARCHIVE. Estos elementos están controlados por las opciones de vinculación BUSTIMESENSITIVE, SYSTIMESENSITIVE y ARCHIVESENSITIVE.

Db2 añade implícitamente cierta sintaxis a la consulta si se cumple una de las condiciones siguientes:
  • La variable global SYSIBMADM.GET_ARCHIVE se establece en Y y la opción de vinculación ARCHIVESENSITIVE se establece en YES
  • El registro especial CURRENT TEMPORAL BUSINESS_TIME no es nulo y la opción de vinculación BUSTIMESENSITIVE se establece en YES
  • El registro especial CURRENT TEMPORAL SYSTEM_TIME no es nulo y la opción de vinculación SYSTIMESENSITIVE se establece en YES
MOTIVO DE LA AMPLIACIÓN (continuación)  
Esta columna puede tener uno de los valores siguientes:
«A»
La consulta contiene una transformación de consulta implícita como resultado de la variable global incorporada SYSIBMADM.GET_ARCHIVE.
«B»
La consulta contiene una transformación de consulta implícita como resultado del registro especial CURRENT TEMPORAL BUSINESS_TIME.
«S»
La consulta contiene una transformación de consulta implícita como resultado del registro especial CURRENT TEMPORAL SYSTEM_TIME.
'SB'
La consulta contiene una transformación de consulta implícita como resultado del registro especial CURRENT TEMPORAL SYSTEM_TIME y el registro especial CURRENT TEMPORAL BUSINESS_TIME.
en blanco
La consulta no contiene una transformación de consulta implícita.
PER_STMT_ID BIGINT NOT NULL El identificador de sentencia persistente para sentencias SQL en tablas de catálogo de Db2.
Por ejemplo, esta columna corresponde a las columnas de la tabla de catálogo siguiente que identifican sentencias SQL:
  • STMT_ID en SYSIBM.SYSPACKSTMT, para sentencias SQL en paquetes.
  • SDQ_STMT_ID en SYSIBM.SYSDYNQUERY, para sentencias SQL dinámicas estabilizadas.

Finalizar la información de la interfaz de programación específica del programa.