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

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

El recorrido rápido de índices tampoco se utiliza para ningún índice con más de 2 millones de páginas de hoja.
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
128
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
120
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
Nú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.
- 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 ).
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
Los 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.