BATCHQL
Valido per
Replicat
Descrizione
Utilizzare il parametro BATCHSQL per aumentare le prestazioni di Replicat. BATCHSQL consente a Replicat di organizzare istruzioni SQL simili in array e di applicarle a una velocità accelerata. Nella modalità normale Replicat applica un'istruzione SQL alla volta.
BATCHSQL è valido per:
-
Db2 per i (eccetto V5R4 o i 6.1)
-
Db2 LUW
-
Db2 su z/
OS -
Oracle
-
PostgreSQL
-
SQL Server
-
Sybase
-
Teradata
-
Tempi dieci
Quando utilizzare BATCHSQL
Prima di utilizzare BATCHSQL, utilizzare Replicat parallelo e verificare se riduce il ritardo Replicat. In caso contrario, provare ad abilitare BATCHSQL. Se l'abilitazione di BATCHSQL migliora le prestazioni, mantenerla abilitata altrimenti, disabilitarla e prendere in considerazione altri esercizi di tuning alternativi per Replicat, ad esempio assicurando che tutte le tabelle dispongano di chiavi primarie o univoche, limitate operazioni batch di grandi dimensioni e assicurando che Replicat parallelo disponga di molta memoria e I/O per prestazioni ottimali, il che significa che Replicat non è associato a un limite di I/O o a una memoria associata.
Quando Replicat è in modalità BATCHSQL, le modifiche di riga più piccole mostrano un aumento delle prestazioni maggiore rispetto alle modifiche di riga più grandi. Con una variazione di 100 byte di dati per riga, BATCHSQL è stato noto per migliorare le prestazioni di Replicat fino al 300%, ma i vantaggi effettivi delle prestazioni varieranno, a seconda del mix di operazioni. Con una variazione di circa 5.000 byte di dati per riga, i vantaggi dell'uso di BATCHSQL diminuiscono.
Restrizioni utilizzo
Le istruzioni SQL trattate come eccezioni includono:
-
Istruzioni contenenti dati
LOBoLONG. -
Istruzioni contenenti righe più lunghe di 25k.
-
Istruzioni in cui la tabella di destinazione dispone di una o più chiavi univoche oltre alla chiave primaria. Tali istruzioni non possono essere elaborate in batch perché
BATCHSQLnon garantisce l'ordinamento corretto per le chiavi non principali se i loro valori potrebbero cambiare. -
Istruzioni (SQL Server) in cui la tabella di destinazione dispone di un trigger.
-
Istruzioni che causano errori.
Quando Replicat rileva eccezioni in modalità batch, esegue il rollback dell'operazione batch e quindi tenta di applicare le eccezioni nei modi seguenti, mantenendo sempre l'integrità delle transazioni:
-
First Replicat tenta di utilizzare la modalità normale: un'istruzione SQL alla volta all'interno dei limiti della transazione impostati con il parametro
GROUPTRANSOPS. Per ulteriori informazioni, vedere "GROUPTRANSOPS". -
Se la modalità normale non riesce, Replicat tenta di utilizzare la modalità di origine: applicare l'istruzione SQL all'interno degli stessi limiti di transazione utilizzati nell'origine.
Al termine dell'elaborazione delle eccezioni, Replicat riprende la modalità BATCHSQL.
Modalità Replicat tabella 9
| Transazioni di origine (assume lo stesso elenco di tabelle e colonne) | Transazione Replicat in modalità normale | Transazione Replicat in modalità BATCHSQL |
Replicat transazioni in modalità di origine |
|---|---|---|---|
Transazione 1: `INSERT` `ELIMINAZIONE` Transaction2: `INSERT` `ELIMINAZIONE` Transazione 3: `INSERT` `ELIMINAZIONE` |
`INSERISCI` `ELIMINAZIONE` `INSERT` `ELIMINAZIONE` `INSERT` `ELIMINAZIONE` |
`INSERT` (x3) `ELIMINA` (x3) |
Transazione 1: `INSERISCI` `ELIMINAZIONE` Transazione 2: `INSERT` `ELIMINAZIONE` Transazione 3: `INSERT` `ELIMINAZIONE` |
Funzionamento di BATCHSQL
In modalità BATCHSQL, Replicat organizza istruzioni SQL simili in batch all'interno di una coda di memoria e quindi applica ogni batch in un'operazione di database. Un batch contiene istruzioni SQL che interessano la stessa tabella, lo stesso tipo di operazione (inserire, aggiornare o eliminare) e la stessa lista di colonne. Ad esempio, ognuno dei seguenti è un batch:
-
Inserisce nella tabella A
-
Inserisce nella tabella B
-
Aggiornamenti alla tabella A
-
Aggiornamenti alla tabella B
-
Elimina dalla tabella A
-
Elimina dalla tabella B Nota: Oracle GoldenGate analizza le dipendenze referenziali delle chiavi esterne nei batch prima di eseguirle. Se esistono dipendenze tra le istruzioni che si trovano in batch diversi, potrebbe essere necessaria più di un'istruzione SQL per batch per mantenere l'integrità referenziale.
Controllo del numero di istruzioni inserite nella cache
Il parametro MAXSQLSTATEMENTS controlla il numero di istruzioni inserite nella cache. Per ulteriori informazioni, vedere "MAXSQLSTATEMENTS". Le vecchie dichiarazioni vengono riciclate utilizzando un algoritmo utilizzato meno di recente. I batch vengono eseguiti in base a una soglia specificata (vedere).
Predefinito
Disabilitato (elaborazione in modalità Replicat normale)
Sintassi
BATCHSQL
[CHECKUNIQUEKEYS | NOCHECKUNIQUEKEYS]
[THREADS (<threadID>[, <threadID>][, ...][, <thread_range> [,<thread_range>][, ...])]
[CHECKUNIQUEKEYS |
NOCHECKUNIQUEKEYS] |
Valido per Replicat.
CHECKUNIQUEKEYS forza un flush quando si incontra una tabella con una chiave univoca che ignora l'elaborazione BATCHSQL. Ciò garantisce che l'ordine originale delle operazioni venga mantenuto se la chiave univoca cambia.
Il valore predefinito è NOCHECKUNIQUEKEYS e non forza un flush quando viene rilevata una tabella con chiavi univoche che consente di continuare l'elaborazione BATCHSQL.
THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])
Valido per BATCHESPERQUEUE, BATCHTRANSOPS e BYTESPERQUEUE. Applica queste opzioni al thread o ai thread specificati di un Replicat coordinato.
<threadID>[, <threadID>][, ...]
Specifica un thread ID o una lista separata da virgole di thread nel formato threadID, threadID, threadID.
[, <thread_range>[, <thread_range>][, ...]
Specifica un intervallo di thread in formato threadIDlow-threadIDhigh o una lista di intervalli separata da virgole nel formatothreadIDlow-threadIDhigh, threadIDlow-threadIDhigh.
La combinazione di questi formati, ad esempio threadID, threadID, threadIDlow-threadIDhigh, è consentita.