Manejo de Errores en BATCHSQL para Operaciones de Replicación de Google Spanner

Los siguientes errores son gestionados por GoldenGate Replicat cuando se utiliza BATCHSQL con Google Spanner:

Si alguna operación DML falla con cualquiera de estos errores, la transacción se aborta por defecto y Replicat finaliza de forma anormal. Si el usuario ha activado HANDLECOLLISIONS, OVERRIDEDUPS, INSERT_MISSING_UPDATES o cualquier otra regla REPERROR, reintentará, omitirá o modificará y, a continuación, ejecutará el DML para resolver el error.

Si alguna operación DML falla con cualquier otro error, la transacción se anula y Replicat finaliza de forma anormal. Como alternativa, en función de las reglas REPERROR, Replicat aborta y reintenta toda la transacción.

Un error RESOURCE_EXHAUSTED en Cloud Spanner suele indicar que el límite de transacción se ha superado para el número de mutaciones o el tamaño total de la transacción. Se produce un error similar al siguiente, que sugiere reducir MAXTRANSOPS o BATCHTRANSOPS.

Error: Operation failed on Spanner database due to quota, session limit, or batch size limit error:

Poosible causes :
BATCH LIMIT: Transaction >80,000 mutations or >100 MiB
QUOTA LIMIT: Spanner API quota exhausted (rate-limited)
SESSION LIMIT: Max concurrent sessions (100,000+) exceeded

Action:
For BATCH LIMIT: Reduce batch size or reduce MAXTRANSOPS and restart Replicat.
For QUOTA LIMIT: Increase Spanner quota in Google Cloud Console and restart Replicat.
For SESSION LIMIT: Reduce concurrent sessions to the Spanner and restart Replicat.
Retry using REPERROR with TRANSABORT, MAXRETRIES 5, DELAYSECS 1 is suggested.

Uso de la API Spanner Mutations

El parámetro BATCHSQL USEMUTATIONS es necesario para aumentar la eficiencia al aplicar DML en Spanner, denominadas mutaciones de Spanner.

Esto significa que ExecuteBatchDml es más atractivo para los datos iniciales de carga inicial en los que las operaciones son inserciones predominantemente contiguas para la misma tabla.

Para cargas de trabajo genéricas con DML mixtas en tiempo real, el modo USEMUTATION de BATCHSQL proporciona mejores métricas de rendimiento.

Limitaciones Operativas al Utilizar la Opción USEMUTATIONS de BATCHSQL

Existen las siguientes limitaciones al utilizar mutaciones de llaves:

Aunque el comportamiento de la mutación del espaciador no cambia debido a estas limitaciones, puede provocar una degradación del rendimiento.

Comportamiento del Modo BATCHSQL con USEMUTATIONS

A continuación se muestra un resumen de cómo cada modo BATCHSQL GoldenGate se asigna a los tipos de mutación Spanner:

  1. Mayúsculas/Minúsculas por Defecto:

    1,1 Inserciones: la transacción debe fallar en caso de inserciones de clave duplicada y el error solo se devuelve en el momento de la confirmación.

    1,2 Actualizaciones: la transacción debe fallar en caso de que falten actualizaciones de fila y el error solo se devuelve en el momento de la confirmación.

    1,3 Supresiones: omite la supresión si la fila es NOT_FOUND

  2. HANDLECOLLISIONS/OVERRIDEDUPS:

    2,1 Inserciones: la inserción se debe convertir en una actualización en caso de un error de clave duplicada y el error se devuelve solo en el momento de la confirmación y no tendríamos ninguna estadística de colisión de clave primaria.

    2,2 Actualizaciones: las actualizaciones se deben omitir en caso de que falten errores de fila.

     **NOTE:** Spanner locks the row for that specific primary key using Replicat transaction even if it does not exist, which means that Spanner would not allow any other transaction to INSERT that row until Replicat transaction is committed or aborted.  
     {: .infoboxnote}
    

    2,3 Supresiones: DELETEMUTATION omite la supresión si la fila es NOT_FOUND.

  3. Insertar Actualizaciones que Faltan:

    3,1 Inserciones: la transacción debe fallar en caso de inserciones de clave duplicada y el error solo se devuelve en el momento de la confirmación.

    3,2 Actualizaciones: la actualización debe insertar la fila en caso de que falte un error de fila y el error solo se devuelve en el momento de la confirmación.