Ajuste de Transacciones de Replicat
Replicat utiliza SQL normal, por lo que su rendimiento depende del rendimiento de la base de datos destino y del tipo de SQL que se está aplicando (inserciones, frente a actualizaciones o supresiones). Sin embargo, puede tomar ciertos pasos para maximizar la eficiencia de Replicat.
Ajuste del rendimiento de coordinación frente a transacciones de barrera
En una configuración coordinada de Replicat, las transacciones de barrera, como las actualizaciones de la clave primaria, provocan un mayor número de confirmaciones en la base de datos y interrumpen la ventaja de la función GROUPTRANSOPS de Replicat. Cuando hay un gran número de transacciones de barrera en la carga de trabajo general de Replicat coordinado, el uso de un gran número de threads puede realmente degradar el rendimiento de Replicat.
Para mantener un alto rendimiento cuando se espera un gran número de transacciones de barrera, puede hacer lo siguiente:
-
Reducir el número de subprocesos activos en el grupo. Esto reduce el número total de confirmaciones que Replicat realiza.
-
Mueva las tablas que representan la mayoría de las transacciones de barrera y las tablas con las que tienen dependencias a un grupo de Replicat coordinado independiente que tiene un pequeño número de threads. Mantenga las tablas que tienen transacciones de barrera mínimas en el grupo Replicat original con el mayor número de threads, de modo que el rendimiento paralelo se mantenga sin interrupción por las transacciones de barrera.
-
(Oracle RAC) En una nueva configuración de Replicat, puede aumentar el atributo
PCTFREEde la tabla de puntos de control de Replicat. Sin embargo, esto debe hacerse antes de que se inicie Replicat por primera vez. El valor recomendado dePCTFREEes 90.
Prevención de exploraciones de tabla completas en ausencia de claves
Si una tabla de destino no tiene una clave primaria, una clave única o un índice único, Replicat utiliza todas las columnas para crear su cláusula WHERE. Se trata, esencialmente, de una exploración de tabla completa.
Para que la selección de filas sea más eficaz, utilice una cláusula KEYCOLS en las sentencias TABLE y MAP para identificar una o más columnas como únicas. Replicat utilizará las columnas especificadas como clave. En el siguiente ejemplo se muestra una cláusula KEYCOLS en una sentencia TABLE:
TABLE hr.emp, KEYCOLS (FIRST_NAME, LAST_NAME, DOB, ID_NO);
Para obtener directrices de uso y sintaxis, consulte los parámetros TABLE y MAP en Referencia de parámetros y funciones para Oracle GoldenGate.
División de transacciones grandes
Si la base de datos destino no puede manejar transacciones grandes de la base de datos origen, puede dividirlas en una serie de transacciones más pequeñas mediante el parámetro Replicat MAXTRANSOPS. Consulte Referencia de parámetros y funciones para Oracle GoldenGate para obtener más información.
Nota: MAXTRANSOPS no es válido para un Replicat integrado en un sistema Oracle AI Database.
Ajuste de cursores abiertos
El proceso Replicat mantiene cursores para sentencias SQL almacenadas en caché y para operaciones SQLEXEC. Sin suficientes cursores, Replicat debe envejecer más sentencias. Por defecto, Replicat mantiene tantos cursores como permite el parámetro MAXSQLSTATEMENTS . Es posible que tenga que aumentar el valor de este parámetro. Si es así, puede que también necesite ajustar el número máximo de cursores abiertos permitidos por la base de datos. Consulte Referencia de parámetros y funciones para Oracle GoldenGate para obtener más información.
Mejora de la velocidad de actualización
Una fragmentación excesiva de bloques hace que Replicat aplique sentencias SQL a una velocidad más lenta de lo normal. Reorganice las tablas muy fragmentadas y, a continuación, pare e inicie Replicat para registrar el nuevo ID de objeto.
Definir un timeout de transacción de replicación
Utilice el parámetro TRANSACTIONTIMEOUT para evitar que una transacción de destino de Replicat sin confirmar retenga bloqueos en la base de datos de destino y consuma sus recursos innecesariamente. Puede cambiar el valor de este parámetro para que Replicat pueda trabajar dentro de los timeouts de la aplicación existentes y otros requisitos de la base de datos en el destino.
TRANSACTIONTIMEOUT limita la cantidad de tiempo que Replicat puede mantener abierta una transacción de destino si no ha recibido el registro de fin de transacción para la última transacción de origen de esa transacción. Por defecto, Replicat agrupa varias transacciones de origen en una transacción de destino para mejorar el rendimiento, pero no confirmará una transacción de origen parcial y esperará indefinidamente para ese último registro. El parámetro Replicat GROUPTRANSOPS controla el tamaño mínimo de una transacción de destino agrupada.
Los siguientes eventos pueden durar el tiempo suficiente para disparar TRANSACTIONTIMEOUT:
-
Los problemas de red impiden que los datos de pista se entreguen en el sistema de destino.
-
Se está agotando el espacio en disco en cualquier sistema, lo que impide que se escriban datos de pista.
-
La extracción finaliza de forma anormal o termina en medio de la escritura de registros para una transacción.
-
Hay un fallo del sistema de origen, como un corte de energía o un fallo del sistema.
Consulte TRANSACTIONTIMEOUT en Referencia de parámetros y funciones para Oracle GoldenGate para obtener más información.