BATCHSQL
Válido Para
Replicat
Descrição
Usar o parâmetro BATCHSQL para aumentar o desempenho do Replicat. BATCHSQL faz com que o Replicat organize instruções SQL semelhantes em arrays e as aplique em uma taxa acelerada. Em seu modo normal, o Replicat aplica uma instrução SQL por vez.
BATCHSQL é válido para:
-
Db2 para i (exceto V5R4 ou i 6.1)
-
Db2 LUW
-
Db2 em z/
OS -
Oracle
-
PostgreSQL
-
SQL Server
-
Sybase
-
Teradados
-
Horários Dez
Quando Usar BATCHSQL
Antes de usar BATCHSQL, use o Replicat paralelo e veja se isso alivia qualquer atraso do Replicat. Se não o fizer, tente ativar BATCHSQL. Se a ativação do BATCHSQL melhorar o desempenho, mantenha-o ativado de outra forma, desative-o e considere outros exercícios de ajuste alternativos para o Replicat, como garantir que todas as tabelas tenham chaves primárias ou exclusivas, operações de lote grandes limitadas e garantir que o Replicat paralelo tenha muita memória e E/S para desempenho ideal, o que implica que o Replicat não esteja vinculado a E/S ou vinculado a memória.
Quando o Replicat estiver no modo BATCHSQL, alterações de linha menores mostrarão um ganho de desempenho maior do que alterações de linha maiores. Com 100 bytes de dados por alteração de linha, sabe-se que o BATCHSQL melhora o desempenho do Replicat em até 300%, mas os benefícios reais de desempenho variarão, dependendo da combinação de operações. Com cerca de 5.000 bytes de dados por linha alterados, os benefícios do uso do BATCHSQL diminuem.
Restrições de Uso
As instruções SQL tratadas como exceções incluem:
-
Instruções que contêm dados
LOBouLONG. -
Instruções que contêm linhas com mais de 25k de comprimento.
-
Instruções nas quais a tabela de destino tem uma ou mais chaves exclusivas além da chave primária. Tais instruções não podem ser processadas em batches porque o
BATCHSQLnão garante a ordenação correta para chaves não principais se seus valores puderem ser alterados. -
Instruções (SQL Server) em que a tabela de destino tem um acionador.
-
Instruções que causam erros.
Quando o Replicat encontra exceções no modo batch, ele faz rollback da operação batch e tenta aplicar as exceções das seguintes maneiras, sempre mantendo a integridade da transação:
-
O primeiro Replicat tenta usar o modo normal: uma instrução SQL por vez dentro dos limites da transação que são definidos com o parâmetro
GROUPTRANSOPS. Para obter mais informações, consulte "GROUPTRANSOPS". -
Se o modo normal falhar, o Replicat tentará usar o modo de origem: aplique o SQL dentro dos mesmos limites de transação que foram usados na origem.
Quando terminar de processar as exceções, o Replicat retomará o modo BATCHSQL.
Tabela 9 Modos de Replicat
| Transações de Origem (Considera a mesma tabela e lista de colunas) | Transação de Replicat no Modo Normal | Replicat da Transação no Modo BATCHSQL |
Replicat de Transações no Modo de Origem |
|---|---|---|---|
Transação 1: `INSERIR` `EXCLUIR` Transaction2: `INSERIR` `EXCLUIR` Transação 3: `INSERIR` `EXCLUIR` |
`INSERIR` `EXCLUIR` `INSERIR` `EXCLUIR` `INSERIR` `EXCLUIR` |
`INSERIR` (x3) `EXCLUIR` (x3) |
Transação 1: `INSERIR` `EXCLUIR` Transação 2: `INSERIR` `EXCLUIR` Transação 3: `INSERIR` `EXCLUIR` |
Como o BATCHSQL Funciona
No modo BATCHSQL, o Replicat organiza instruções SQL semelhantes em batches dentro de uma fila de memória e, em seguida, aplica cada batch em uma operação de banco de dados. Um lote contém instruções SQL que afetam a mesma tabela, tipo de operação (inserir, atualizar ou excluir) e lista de colunas. Por exemplo, cada um dos itens a seguir é um lote:
-
Inserções na tabela A
-
Inserções na tabela B
-
Atualizações na tabela A
-
Atualizações na tabela B
-
Exclui da tabela A
-
Exclui da tabela B Observação: o Oracle GoldenGate analisa as dependências referenciais de chave estrangeira nos batches antes de executá-los. Se existirem dependências entre instruções que estão em diferentes batches, mais de uma instrução SQL por batch poderá ser necessária para manter a integridade referencial.
Controlando o Número de Instruções Armazenadas em Cache
O parâmetro MAXSQLSTATEMENTS controla o número de instruções que são armazenadas no cache. Para obter mais informações, consulte "MAXSQLSTATEMENTS". Instruções antigas são recicladas usando um algoritmo menos usado recentemente. Os lotes são executados com base em um limite especificado (consulte).
Padrão
Desativado (Processo no modo Replicat normal)
Sintaxe
BATCHSQL
[CHECKUNIQUEKEYS | NOCHECKUNIQUEKEYS]
[THREADS (<threadID>[, <threadID>][, ...][, <thread_range> [,<thread_range>][, ...])]
[CHECKUNIQUEKEYS |
NOCHECKUNIQUEKEYS] |
Válido para Replicat.
CHECKUNIQUEKEYS força uma descarga quando uma tabela com uma chave exclusiva é encontrada que ignora o processamento BATCHSQL. Isso garante que a ordem original das operações seja mantida se a chave exclusiva for alterada.
O valor padrão é NOCHECKUNIQUEKEYS e não força um flush quando uma tabela com chaves exclusivas é encontrada e permite que o processamento de BATCHSQL continue.
THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])
Válido para BATCHESPERQUEUE, BATCHTRANSOPS e BYTESPERQUEUE. Aplica essas opções ao thread ou threads especificados de um processo de Replicat coordenado.
<threadID>[, <threadID>][, ...]
Especifica um thread ID ou uma lista de threads delimitada por vírgulas no formato threadID, threadID, threadID.
[, <thread_range>[, <thread_range>][, ...]
Especifica uma faixa de threads na forma de threadIDlow-threadIDhigh ou uma lista de faixas delimitada por vírgulas no formato de threadIDlow-threadIDhigh, threadIDlow-threadIDhigh.
Uma combinação desses formatos é permitida, como threadID, threadID, threadIDlow-threadIDhigh.