Es posible que haya creado índices personalizados siguiendo los pasos descritos en Creación manual de índices personalizados. En el pasado, estos índices solo duraban hasta la siguiente recarga completa de la tabla. Después de la recarga, había que volver a crear los índices manualmente. Sin embargo, ahora es posible proporcionar plantillas de definición de datos de indexación (DDL) a Data Gatey guardar estas plantillas de forma permanente. Basándose en las plantillas, crea Data Gate automáticamente los índices cada vez que las tablas se recargan por completo. De esta manera, se conservan tus índices personalizados.
Antes de empezar
Las siguientes instrucciones se aplican a las bases Db2 de datos de destino, pero no a las bases Db2 Warehouse de datos de destino. La razón es que Db2 Warehouse tiene un motor orientado a columnas, cuyo rendimiento no se beneficia mucho del uso de índices.
Acerca de esta tarea
Existen los siguientes tipos de índices para las tablas de la base de datos de destino en el Data Gate contexto:
- Índices creados automáticamente y de forma interna por Data Gate. Estos índices están destinados principalmente a optimizar el proceso de sincronización en lo que respecta a la eliminación de registros de la base de datos de destino.
- Índices creados manualmente en las tablas de la base de datos de destino, por ejemplo, mediante un
CREATE INDEX comando de la línea de comandos del Db2 cliente.
La función de plantilla de índice que se describe aquí solo se aplica a los índices de tipo 2.
Los índices creados automáticamente basados en plantillas están disponibles tras completar la carga inicial de la tabla o tras una recarga completa de la tabla. La carga de la tabla no tiene que iniciarse desde la interfaz de Cloud Pak for Data usuario web; también puede ejecutar el procedimiento SYSPROC.ACCEL_LOAD_TABLES almacenado desde una aplicación o desde la línea de comandos.
Además, no es necesario iniciar RUNSTATS manualmente para recopilar estadísticas sobre estos índices. Data Gate inicia RUNSTATS automáticamente tras completar la carga de una tabla.
Nota: Data Gate no utiliza ni copia las definiciones de índice Db2
for z/OS existentes para los índices de las tablas de la base de datos de Db2 destino.
Procedimiento
- Obtenga las definiciones de índice (
CREATE INDEX instrucciones) que utiliza para sus tablas de destino.Estos sirven como base para los comandos SQL en sus plantillas de indexación. Una forma rápida de hacerlo es exportar los índices de las
Db2
for z/OS tablas de origen y modificarlos según corresponda. Por ejemplo:
CREATE UNIQUE INDEX "INDEX_1" ON "SCHEMA_1"."TABLE_1"(COL_1, COL_2, COL_3) CLUSTER;
CREATE INDEX "SCHEMA_INDEX"."INDEX_2" ON "SCHEMA_1"."TABLE_1"(COL_1, COL_2);
CREATE UNIQUE INDEX "INDEX_3" ON "SCHEMA_2". "TABLE_2"(COL_1, COL_2, COL_3) CLUSTER;
CREATE INDEX "SCHEMA_INDEX"."INDEX_4_FOR_ADDRESS" ON "SCHEMA_2"."TABLE_2"(COL_1, COL_2);
CREATE INDEX "SCHEMA_INDEX"."INDEX_5" ON "SCHEMA_2"."TABLE_2"(COL_1);
- Cree un archivo de plantilla con sqlla extensión. Cree exactamente un archivo para cada tabla de destino que desee indexar.
De acuerdo con el ejemplo del paso 1, se utilizaría un único archivo de plantilla de índice para los índices de "SCHEMA_1"."TABLE_1" únicamente.
El nombre de tu archivo de plantilla de indexación debe ajustarse al siguiente patrón:
<LOCATION NAME>_<SOURCE SCHEMA NAME>_<SOURCE TABLE NAME>.sql
Donde:
- <NOMBRE DE LA UBICACIÓN>
- ¿Es el Db2 subsistema o miembro de intercambio de datos que contiene la Db2
for z/OS tabla de origen? Este es el nombre del Db2 subsistema o miembro de intercambio de datos en la SYSIBM.LOCATIONS tabla.
- <NOMBRE DEL ESQUEMA DE ORIGEN>
- Es el nombre del esquema de la tabla de origen.
- <NOMBRE DE LA TABLA FUENTE>
- Es el nombre de la tabla de origen.
Es esencial nombrar correctamente los archivos de plantilla, ya que Data Gate deriva el nombre del esquema de destino y el nombre del índice a partir del nombre del archivo de plantilla. Data Gate No crea un índice personalizado si no se encuentra un archivo de plantilla coincidente. Sin embargo, no importa si el nombre del archivo está en minúsculas o mayúsculas.
- Abra el archivo de sql plantilla en un editor e inserte sentencias SQL para crear uno o más índices según el siguiente patrón.
La forma más fácil de hacerlo es copiar los comandos
CREATE INDEX originales para una tabla concreta del paso
1, sustituir el nombre del esquema original y el nombre de la tabla por
PLACE_HOLDER_TABLE_NAME, y añadir
PLACE_HOLDER_INTERNAL_PARTITION_ID al final de la lista de columnas.
Ejemplo:De acuerdo con los ejemplos del
"SCHEMA_1"."TABLE_1" paso
1, esto te daría:
CREATE UNIQUE INDEX "INDEX_1" ON PLACE_HOLDER_TABLE_NAME(COL_1, COL_2, COL_3, PLACE_HOLDER_INTERNAL_PARTITION_ID) CLUSTER;
CREATE INDEX "SCHEMA_INDEX"."INDEX_2" ON PLACE_HOLDER_TABLE_NAME(COL_1, COL_2, PLACE_HOLDER_INTERNAL_PARTITION_ID);
En general, los comandos SQL de un archivo de plantilla de indexación deben seguir este patrón:
Para índices únicos:
CREATE UNIQUE INDEX "SCHEMA"."INDEX-NAME-PREFIX" ON PLACE_HOLDER_TABLE_NAME (COL1, COL2, ..., PLACE_HOLDER_INTERNAL_PARTITION_ID);
Para índices no únicos:
CREATE INDEX "SCHEMA"."INDEX-NAME-PREFIX" ON PLACE_HOLDER_TABLE_NAME (COL16, COL17, ..., PLACE_HOLDER_INTERNAL_PARTITION_ID);
Donde:
- ESQUEMA
- Es el nombre del esquema del índice. Si no se proporciona un nombre de esquema, se utiliza el nombre de esquema de la Db2
for z/OS tabla de origen.
- ÍNDICE-NOMBRE-PREFIJO
- Es el prefijo del nombre del índice que puede especificar. Data Gate añade el nombre de la tabla de la base de datos de destino al prefijo. Data Gate también añade una cadena única al final para garantizar que los nombres de los índices sean únicos. Esto significa que puede especificar el mismo nombre de esquema y el mismo nombre de índice para varios índices. La cadena única que se añade al final sigue el patrón
_IX_#, donde # es un número entero positivo.
- PLACE_HOLDER_TABLE_NAME
- Es una variable que permite Data Gate insertar el nombre del esquema de la base de datos de destino generado internamente y el nombre de la tabla en la posición correcta de la
CREATE INDEX instrucción.
- COL1, COL2, ...
- Son los nombres de las columnas de las tablas de destino. Reemplace estos con los nombres de las columnas en sus declaraciones
CREATE INDEX originales.
- PLACE_HOLDER_INTERNAL_PARTITION_ID
- Es una variable que representa una columna generada internamente de la tabla de destino. Data Gate lo sustituye por el nombre real de la columna (
"DWA_Partition_ID (hidden)"). PLACE_HOLDER_INTERNAL_PARTITION_ID aumenta el rendimiento del índice. Por lo tanto, se recomienda añadirlo al final de la lista de columnas.
Importante:
- Utiliza punto y coma para separar los comandos de indexación en el archivo de plantilla. Puede utilizar
// para introducir un comentario de una sola línea y /* ... */ para encerrar comentarios de varias líneas.
- Los índices globales, es decir, los índices no particionados en tablas particionadas, no son compatibles. Convierta un índice global en un índice particionado eliminando la palabra clave
NOT
PARTITIONED y añadiendo PLACE_HOLDER_INTERNAL_PARTITION_ID al final de la lista de columnas.
- Como se ha mencionado anteriormente en esta página, Data Gate también crea automáticamente un índice interno para el proceso de sincronización cuando se carga una tabla (el nombre de este índice siempre contiene el sufijo
_INDEX). Si la definición de un índice creado automáticamente es la misma que la de uno creado mediante un archivo de sql plantilla, recibirá la siguiente advertencia SQL:"SQL0605W El índice no se ha creado porque ya existe un índice «xxx_INDEX» con una definición coincidente
Para solucionar esta advertencia, elimine el comando CREATE INDEX correspondiente de su archivo de sql plantilla. No es necesario. Las aplicaciones pueden utilizar el índice que se genera automáticamente mediante Data Gate.
- Puede compartir su plantilla sql entre diferentes Data Gate instancias, y también para su uso con diferentes Db2 subsistemas o grupos de intercambio de datos. Sin embargo, es posible que tenga que cambiar el nombre del archivo de plantilla o los comandos SQL de estos archivos si el nombre Db2
for z/OS de la ubicación, el nombre del esquema del archivo de origen, el nombre de la tabla del archivo de origen o las estructuras de la tabla ya no coinciden. Véase la siguiente tabla:
| Origen de Db2
for z/OS |
Diferencia |
Acción necesaria |
| Igual |
Ninguna |
Ninguna |
| Diferente |
Nombre de la ubicación |
Cambia el nombre de la ubicación en la primera parte del nombre del archivo de plantilla. |
| Diferente |
Nombre del esquema de la tabla de origen |
Cambia el nombre del esquema en la segunda parte del nombre del archivo de plantilla. |
| Diferente |
Nombre de la tabla de origen |
Cambia el nombre de la tabla en la tercera parte del nombre del archivo de plantilla. |
| Estructura de tabla |
La estructura de la tabla es diferente (por ejemplo, los nombres de las columnas son diferentes) |
Cambie los CREATE INDEX comandos del archivo de plantilla según corresponda, como la lista de columnas. |
- Los índices basados en plantillas están disponibles después de una carga inicial de la tabla o después de una recarga completa de la tabla. Si cambia los archivos de plantilla, pero no desea esperar hasta la próxima recarga, también puede crear, eliminar o modificar un índice existente directamente en la base de Db2 datos de destino, utilizando la interfaz de usuario del Db2 servicio.
- Una Data Gate actualización no inicia una recarga completa de sus tablas. Esto significa que una actualización no afecta a los índices personalizados existentes.
Si existen índices en las Db2 tablas de destino antes de la actualización y también existen los archivos de plantilla correspondientes, no es necesario que realice ninguna acción. Si los archivos de plantilla no existen, prepárelos para que se creen los índices correspondientes después de la próxima recarga completa de la tabla.
Si los índices de las Db2 tablas de destino no existen antes de la actualización, prepare los archivos de plantilla para que los índices se creen después de la próxima recarga completa de la tabla. Si no desea recargar sus tablas inmediatamente, puede crear, eliminar o modificar índices directamente en la base de Db2 datos de destino. Prepare también archivos de plantilla para garantizar que sus índices se vuelvan a crear automáticamente después de una recarga completa de la tabla.
- Guarde el archivo de sql plantilla y cópielo en la /head/dwa/index carpeta del contenedor data-gate-server del Data Gate pod. Para ello, puede ejecutar un OpenShift® comando, como en el siguiente ejemplo:
oc cp ./xxx.sql dg-1671405638744964-data-gate-7fb9718689-dqd7c:/head/dwa/index/xxx.sql -c data-gate-server -n ${PROJECT_CPD_INST_OPERANDS}
Recuerda: eliminar una tabla y volver a añadirla en la interfaz de Data Gate usuario web no afecta al archivo de plantilla existente. No es necesario volver a crear el archivo de plantilla. Después de cargar completamente la tabla, los índices se vuelven a crear automáticamente.
- Ejecute el siguiente comando en el Cloud Pak for Data sistema para dar a todos Data Gate los usuarios y grupos acceso al directorio de archivos de plantilla:
chmod -R 777 /head/dwa/index
Ejemplo
Supongamos que ha creado un Db2 subsistema con el nombre LOCNAME y ha creado un archivo de plantilla LOCNAME_SCHEMA_1_TABLE_1.sql para una tabla de origen con el nombre completo "SCHEMA_1.TABLE_1". Tu archivo de plantilla contiene las siguientes plantillas de índice:
CREATE UNIQUE INDEX "INDEX_1" ON PLACE_HOLDER_TABLE_NAME(COL_1, COL_2, COL_3, PLACE_HOLDER_INTERNAL_PARTITION_ID) CLUSTER;
CREATE INDEX "SCHEMA_INDEX"."INDEX_2" ON PLACE_HOLDER_TABLE_NAME(COL_1, COL_2, PLACE_HOLDER_INTERNAL_PARTITION_ID);
Supongamos además que existe otra "SCHEMA_2.TABLE_2" tabla con el nombre en el mismo Db2 subsistema. Por lo tanto, ha creado un archivo de plantilla llamado LOCNAME_SCHEMA_2_TABLE_2.sql, que contiene las siguientes plantillas de índice:
CREATE UNIQUE INDEX "INDEX_3" ON PLACE_HOLDER_TABLE_NAME(COL_1, COL_2, COL_3, PLACE_HOLDER_INTERNAL_PARTITION_ID) CLUSTER;
CREATE INDEX "SCHEMA_INDEX"."INDEX_4" ON PLACE_HOLDER_TABLE_NAME(COL_1, COL_2, PLACE_HOLDER_INTERNAL_PARTITION_ID);
CREATE INDEX "schema_index"."INDEX_5" ON PLACE_HOLDER_TABLE_NAME(COL_1, PLACE_HOLDER_INTERNAL_PARTITION_ID);
Resultado:
El uso de estos archivos de plantilla da como resultado la ejecución de comandos SQL similares a los siguientes después de recargar las tablas de la base de datos de destino que corresponden a las tablas de origen "SCHEMA_1.TABLE_1" y "SCHEMA_2.TABLE_2":
- Para la tabla de destino relacionada con
"SCHEMA_1.TABLE_1":CREATE UNIQUE INDEX "SCHEMA_1"."INDEX_1_TABLE_1-ID_10-V1_IX_1" ON "DWALOCNAME"."TABLE_1-ID_10-V1"(COL_1, COL_2, COL_3, "DWA_Partition_ID (hidden)") CLUSTER;
CREATE INDEX "SCHEMA_INDEX"."INDEX_2_TABLE_1-ID_10-V1_IX_2" ON "DWALOCNAME"."TABLE_1-ID_10-V1"(COL_1, COL_2, "DWA_Partition_ID (hidden)");
- Para la tabla de destino relacionada con
"SCHEMA_2.TABLE_2":CREATE UNIQUE INDEX "SCHEMA_2"."INDEX_3_TABLE_2-ID_11-V1_IX_1" ON "DWALOCNAME"."TABLE_2-ID_11-V1"(COL_1, COL_2, COL_3, "DWA_Partition_ID (hidden)") CLUSTER;
CREATE INDEX "SCHEMA_INDEX"."INDEX_4_TABLE_2-ID_11-V1_IX_2" ON "DWALOCNAME"."TABLE_2-ID_11-V1"(COL_1, COL_2, "DWA_Partition_ID (hidden)");
CREATE INDEX "SCHEMA_INDEX"."INDEX_5_TABLE_2-ID_11-V1_IX_3" ON "DWALOCNAME"."TABLE_2-ID_11-V1"(COL_1, "DWA_Partition_ID (hidden)");
Importante: Los índices personalizados se crean automáticamente como parte de la ejecución del procedimiento almacenado SYSPROC.ACCEL_LOAD_TABLES load table. De forma predeterminada,
Data Gate utiliza el
lock_mode 'ROW' para este procedimiento. Para obtener más información al respecto
lock_mode, consulte esto
SYSPROC.ACCEL_LOAD_TABLES. Si crea un índice único personalizado en la tabla de destino, es posible que se encuentre con un
SQLCODE -803Error durante la carga, incluso si existe un índice único con la misma lista de columnas en la tabla de origen. Esto puede suceder debido a
lock_mode 'ROW' que la utilidad
Db2 UNLOAD está descargando una partición mientras otras aplicaciones están modificando simultáneamente la misma partición en la tabla de origen. En caso de recurrencia
SQLCODE -803errores, considere convertir el índice único personalizado en un índice no único o modificar la
'load.table.lock.mode' configuración dentro
'PARTITIONS' del
Data Gate servicio.
Para modificar el modo de bloqueo, siga estos pasos:
- Abra el archivo /head/clone-api/application-prod.properties en el contenedor data-gate-api para editarlo (consulte este enlace para obtener información sobre cómo localizar el archivo).
- Actualice el valor del
load.table.lock.mode parámetro a 'PARTITIONS' ('load.table.lock.mode=PARTITIONS'). Puede modificar este parámetro en línea y los cambios se activarán al cabo de unos segundos.
- Una vez completada la carga, vuelva a establecer el parámetro en su valor original.