Cruce de índices rápido

El cruce de índices rápido (a veces denominado bloques de cruce rápido o FTB) es un proceso que puede mejorar el rendimiento del acceso aleatorio a los índices.

Db2 supervisa continuamente la actividad en busca de índices que sean aptos para el recorrido rápido de índices. Db2 comienza a utilizar el recorrido rápido de índices en los índices elegibles cuando los índices superan los niveles de actividad definidos internamente. Inicio del cambioDb2 también a veces deja de usar el recorrido rápido de índices para un índice y lo libera automáticamente de la caché, como en las siguientes situaciones:fin del cambio

Inicio del cambio
  • El índice está cerrado.
  • No hay suficiente memoria disponible y otro índice tiene prioridad debido a un mayor número de recuentos transversales, menos divisiones de página o más acceso aleatorio.
  • El índice se queda vacío, como cuando se produce una eliminación masiva.
fin del cambio

Inicio del cambioEl recorrido rápido de índices tampoco se utiliza para ningún índice con más de 2 millones de páginas de hoja.fin del cambio

Elegibilidad de los índices para el cruce de índices rápido

La elegibilidad de los índices depende del tamaño de las claves para las columnas del índice.

Puede consultar el catálogo de Db2 para identificar los índices elegibles.

Elegibilidad de índices exclusivos
FL 500 El tamaño de la clave para las columnas de ordenamiento debe ser Inicio del cambio128fin del cambio bytes o menos. Las columnas de la lista INCLUDE no cuentan para el límite de tamaño de la clave de índice. Pero, el cruce de índices rápido no se utiliza para las columnas de la lista INCLUDE.

La siguiente consulta de ejemplo devuelve una lista de índices únicos que son aptos para el recorrido rápido de índices.

SELECT * FROM
(
SELECT
SUBSTR(A.CREATOR,1,10) AS TABLE_CREATOR,
SUBSTR(A.NAME,1,10) AS TABLE_NAME,
SUBSTR(B.CREATOR,1,10) AS INDEX_CREATOR,
SUBSTR(B.NAME,1,10) AS INDEX_NAME,
SUM(D.LENGTH
+ CASE D.COLTYPE WHEN 'VARBIN' THEN 2
ELSE 0
END
+ CASE D.NULLS WHEN 'Y' THEN 1
ELSE 0
END) AS INDEX_LENGTH FROM
SYSIBM.SYSTABLES A, SYSIBM.SYSINDEXES B,
SYSIBM.SYSKEYS C, SYSIBM.SYSCOLUMNS D
WHERE A.NAME = B.TBNAME
AND A.CREATOR = B.TBCREATOR
AND B.CREATOR = C.IXCREATOR
AND B.NAME = C.IXNAME
AND A.NAME = D.TBNAME
AND A.CREATOR = D.TBCREATOR
AND C.COLNAME = D.NAME
AND C.ORDERING <> ' '
AND B.OLDEST_VERSION = B.CURRENT_VERSION
AND D.COLTYPE <> 'TIMESTZ'
AND B.DBID > 6
AND B.UNIQUERULE NOT IN ( 'D','N')
GROUP BY A.CREATOR,A.NAME, B.CREATOR, B.NAME
ORDER BY A.CREATOR,A.NAME, B.CREATOR, B.NAME
) FTB_UNIQUE
WHERE FTB_UNIQUE.INDEX_LENGTH <= 128;
Elegibilidad de índices no exclusivos
FL 500 El tamaño de la clave para las columnas del índice debe ser Inicio del cambio120fin del cambio bytes o menos.

La consulta de ejemplo siguiente devuelve una lista de índices no exclusivos que son aptos para el cruce de índices rápido.

SELECT * FROM
(
SELECT
SUBSTR(A.CREATOR,1,10) AS TABLE_CREATOR,
SUBSTR(A.NAME,1,10) AS TABLE_NAME,
SUBSTR(B.CREATOR,1,10) AS INDEX_CREATOR,
SUBSTR(B.NAME,1,10) AS INDEX_NAME,
SUM(D.LENGTH
+ CASE D.COLTYPE WHEN 'VARCHAR' THEN 2
WHEN 'VARBIN' THEN 4
ELSE 0
END
+ CASE D.NULLS WHEN 'Y' THEN 1
ELSE 0
END) AS INDEX_LENGTH FROM
SYSIBM.SYSTABLES A, SYSIBM.SYSINDEXES B,
SYSIBM.SYSKEYS C, SYSIBM.SYSCOLUMNS D
WHERE A.NAME = B.TBNAME
AND A.CREATOR = B.TBCREATOR
AND B.CREATOR = C.IXCREATOR
AND B.NAME = C.IXNAME
AND A.NAME = D.TBNAME
AND A.CREATOR = D.TBCREATOR
AND C.COLNAME = D.NAME
AND B.OLDEST_VERSION = B.CURRENT_VERSION
AND D.COLTYPE <> 'TIMESTZ'
AND B.DBID > 6
AND B.UNIQUERULE = 'D'
GROUP BY A.CREATOR,A.NAME, B.CREATOR, B.NAME
ORDER BY A.CREATOR,A.NAME, B.CREATOR, B.NAME
) FTB_NON_UNIQUE
WHERE FTB_NON_UNIQUE.INDEX_LENGTH <= 120;

Índices que más se pueden beneficiar del cruce de índices rápido

Índices que soportan un intenso acceso de lectura se pueden beneficiar más del cruce de índices rápido. En general, los índices que se utilizan para un gran número de operaciones de inserción o supresión es menos probable que se beneficien. Sin embargo, los índices de tablas con patrones de inserción o supresión aleatorios, o índices con grandes valores PCTFREE también pueden beneficiarse.

Puede utilizar el mandato DISPLAY STATS con el recuento INDEXTRAVERSECOUNT para identificar los índices con más cruces. Para más información, consulte el comando -DISPLAY STATS ( Db2 ).

Control de cruce de índices rápido

Para controlar el uso de cruce de índices rápido, utilice los siguientes parámetros de subsistema:

INDEX_MEMORY_CONTROL
La configuración del parámetro del subsistema INDEX_MEMORY_CONTROL permite el uso de la búsqueda rápida de índices para todo el subsistema de catálogo ( Db2 ), solo para los índices seleccionados especificados en la tabla de catálogo ( SYSIBM.SYSINDEXCONTROL ) o deshabilita por completo el uso de la búsqueda rápida de índices. También puede especificar la cantidad de memoria que Db2 asigna para el cruce de índices rápido o dejar que Db2 lo gestione automáticamente. Para obtener más información, consulte el campo INDEX MEMORY CONTROL (parámetro del subsistema INDEX_MEMORY_CONTROL ) y Habilitar o deshabilitar el recorrido rápido de índices a nivel de índice.
FTB_NON_UNIQUE_INDEX
El parámetro del subsistema FTB_NON_UNIQUE_INDEX habilita o deshabilita el uso de la búsqueda rápida de índices para índices no únicos. Para obtener más información, consulte el campo FTB NON UNIQUE INDEX (parámetro del subsistema FTB_NON_UNIQUE_INDEX ).

Para habilitar o inhabilitar el cruce de índices rápido para índices concretos o particiones de índices, utilice la tabla de catálogo SYSIBM.SYSINDEXCONTROL. Véase Habilitar o deshabilitar el recorrido rápido del índice a nivel de índice.

Supervisión del cruce de índices rápido

Para ver una instantánea del uso de memoria para el cruce de índices rápido, emita el mandato DISPLAY STATS:

-DISPLAY STATS(INDEXMEMORYUSAGE)

El mensaje DSNT783I muestra la salida del comando DISPLAY STATS(INDEXMEMORYUSAGE). La salida proporciona la siguiente información sobre los índices para los que se está utilizando el índice rápido transversal (FTB):

DBID  PSID  DBNAME   IX-SPACE LVL PART SIZE(KB)
----- ----- -------- -------- --- ---- --------
00279 00005 DB1      IX1      003 0001 00000816
******* DISPLAY OF STATS ENDED **************

Las líneas de salida están en orden descendente, desde el índice que utiliza la mayor cantidad de memoria para el índice rápido, hasta el índice que utiliza la menor cantidad de memoria para el índice rápido.

DBID
El identificador interno de la base de datos que contiene el índice.
PSID
El descriptor del conjunto de páginas del espacio índice.
DBNAME
El nombre de la base de datos que contiene el índice.
IX-ESPACIO
El nombre del espacio índice.
LVL
Inicio del cambioNúmero de niveles del índice para el que se utiliza el índice rápido. Los FTB (fast traverse blocks) para el índice rápido contienen información para las páginas raíz y las páginas índice no hoja, pero no para las páginas hoja.fin del cambio
PART
El número de partición del índice.
TAMAÑO(KB)
La cantidad de memoria que se utiliza para el índice rápido, en kilobytes.

Para más información, consulte el comando -DISPLAY STATS ( Db2 ).

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

También puede recopilar estadísticas en el uso de memoria para el cruce de índices rápido iniciando los siguientes rastreos:

Rastreo de la clase de estadísticas 8
Los registros IFCD 389 de esta clase de rastreo contienen información sobre las estructuras que se utilizan para el recorrido rápido de índices, incluido el tamaño de dichas estructuras.
Rastreo de la clase de rendimiento 4
Inicio del cambioLos registros IFCID 477 de esta clase de rastreo contienen información sobre la asignación y desasignación de las estructuras que se utilizan para el recorrido rápido de índices.fin del cambio

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