Tratando Erros no BATCHSQL para Operações de Replicat do Google Spanner

Os seguintes erros são gerenciados pelo Replicat GoldenGate ao usar o BATCHSQL com o Google Spanner:

Se qualquer operação DML falhar com qualquer um desses erros, por padrão, a transação será abortada e o Replicat será encerrado. Se o usuário tiver ativado HANDLECOLLISIONS, OVERRIDEDUPS, INSERT_MISSING_UPDATES ou qualquer outra regra REPERROR, ele repetirá, ignorará ou modificará e, em seguida, executará o DML para resolver o erro.

Se qualquer operação DML falhar com qualquer outro erro, a transação será abortada e o processo Replicat será encerrado. Como alternativa, com base nas regras REPERROR, o Replicat aborta e repete toda a transação.

Um erro RESOURCE_EXHAUSTED no Cloud Spanner geralmente indica que o limite de transações foi excedido para o número de mutações ou o tamanho total da transação. Ocorreu um erro semelhante ao seguinte, sugerindo reduzir MAXTRANSOPS ou 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.

Usando a API Spanner Mutations

O parâmetro BATCHSQL USEMUTATIONS é necessário para aumentar a eficiência ao aplicar DMLs no Spanner, chamadas Mutações do Spanner.

Isso significa que ExecuteBatchDml é mais atraente para dados pré-implantados de carga inicial em que as operações são inserções predominantemente contíguas para a mesma tabela.

Para cargas de trabalho genéricas com DMLs mistas em tempo real, o modo BATCHSQL USEMUTATION fornece melhores métricas de desempenho.

Limitações Operacionais ao usar a opção USEMUTATIONS do BATCHSQL

As seguintes limitações existem ao usar Spanner Mutations:

Embora o comportamento da Mutação do Spanner não mude devido a essas limitações, ele pode causar degradação do desempenho.

Comportamento do Modo BATCHSQL com USEMUTATIONS

Veja a seguir um resumo de como cada modo BATCHSQL GoldenGate é mapeado para os tipos de mutação Spanner:

  1. Caso padrão:

    1,1 Inserções: A transação deve falhar no caso de inserções de chave duplicada e o erro é retornado apenas no momento do commit.

    1,2 Atualizações: A transação deve falhar em caso de atualizações de linha ausentes e o erro é retornado apenas no momento do commit.

    1,3 Exclui: Ignora a exclusão se a linha for NOT_FOUND

  2. HANDLECOLLISIONS/OVERRIDEDUPS:

    2,1 Inserções: Inserir deve ser convertido em uma Atualização no caso de um erro de chave duplicada e o erro é retornado apenas no momento do commit, e não teríamos nenhuma estatística de Colisão de Chave Primária.

    2,2 Atualizações: As atualizações devem ser ignoradas em caso de erros de linha ausentes.

     **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 Exclui: DELETEMUTATION ignora a exclusão se a linha for NOT_FOUND.

  3. Inserir Atualizações que Faltam:

    3,1 Inserções: A transação deve falhar no caso de inserções de chave duplicada e o erro é retornado apenas no momento do commit.

    3,2 Atualizações: A atualização deve inserir a linha em caso de erro de linha ausente e o erro é retornado apenas no momento do commit.