BATCHSQL
Durée de validité
Réplication
Description
Utilisez le paramètre BATCHSQL pour augmenter les performances de la réplication. BATCHSQL permet au processus Replicat d'organiser des instructions SQL similaires en tableaux et de les appliquer à un rythme accéléré. En mode normal, le processus Replicat applique une instruction SQL à la fois.
BATCHSQL est valide pour les éléments suivants :
-
Db2 pour i (sauf V5R4 ou i 6.1)
-
DB2 LUW
-
Db2 sur z/
OS -
Oracle
-
PostgreSQL
-
SQL Server
-
Sybase
-
Teradata
-
Dix fois
Quand utiliser BATCHSQL
Avant d'utiliser BATCHSQL, utilisez le processus Replicat parallèle et vérifiez si cela réduit tout décalage du processus Replicat. Si ce n'est pas le cas, essayez d'activer BATCHSQL. Si l'activation de BATCHSQL améliore les performances, conservez-la activée sinon, désactivez-la et envisagez d'autres exercices de réglage pour le processus Replicat, comme s'assurer que toutes les tables disposent de clés primaires ou uniques, que les opérations par lots sont limitées et que le processus Replicat parallèle dispose de beaucoup de mémoire et d'E/S pour des performances optimales, ce qui implique que le processus Replicat n'est pas lié aux E/S ni lié à la mémoire.
Lorsque le processus Replicat est en mode BATCHSQL, les modifications de ligne plus petites affichent un gain de performances plus important que les modifications de ligne plus importantes. Avec 100 octets de données par modification de ligne, BATCHSQL a été connu pour améliorer les performances du processus Replicat jusqu'à 300 %, mais les avantages réels en termes de performances varient en fonction de la combinaison d'opérations. Avec environ 5 000 octets de données par ligne, les avantages de l'utilisation de BATCHSQL diminuent.
Restrictions d'utilisation
Les instructions SQL qui sont traitées comme des exceptions sont les suivantes :
-
Instructions qui contiennent les données
LOBouLONG. -
Instructions contenant des lignes de longueur supérieure à 25k.
-
Instructions dans lesquelles la table cible comporte une ou plusieurs clés uniques en plus de la clé primaire. Ces instructions ne peuvent pas être traitées par lots car
BATCHSQLne garantit pas l'ordre correct pour les clés secondaires si leurs valeurs peuvent changer. -
Instructions (SQL Server) pour lesquelles la table cible comporte un déclencheur.
-
Instructions qui génèrent des erreurs.
Lorsque le processus Replicat rencontre des exceptions en mode batch, il annule l'opération de batch, puis tente d'appliquer les exceptions de la manière suivante, en conservant toujours l'intégrité des transactions :
-
Le premier processus Replicat tente d'utiliser le mode normal : une instruction SQL à la fois dans les limites de transaction définies avec le paramètre
GROUPTRANSOPS. Pour plus d'informations, reportez-vous à "GROUPTRANSOPS". -
En cas d'échec du mode normal, le processus Replicat tente d'utiliser le mode source : appliquez le code SQL dans les limites de transaction utilisées sur la source.
Lorsque le traitement des exceptions est terminé, le processus de réplication reprend le mode BATCHSQL.
Tableau 9 Modes de réplication
| Transactions source (suppose la même table et la même liste de colonnes) | Transaction de réplication en mode normal | Transaction de réplication en mode BATCHSQL |
Répliquer les transactions en mode source |
|---|---|---|---|
Transaction 1: `INSERTION` `SUPPRIMER` Transaction2: `INSERTION` `SUPPRIMER` Transaction 3: `INSERTION` `SUPPRIMER` |
`INSERTION` `SUPPRIMER` `INSERTION` `SUPPRIMER` `INSERTION` `SUPPRIMER` |
"INSÉRER" (x3) `SUPPRIMER` (x3) |
Transaction 1: `INSERTION` `SUPPRIMER` Transaction 2: `INSERTION` `SUPPRIMER` Transaction 3: `INSERTION` `SUPPRIMER` |
Fonctionnement de BATCHSQL
En mode BATCHSQL, le processus Replicat organise des instructions SQL similaires en batches dans une file d'attente de mémoire, puis il applique chaque batch dans une opération de base de données. Un lot contient des instructions SQL qui affectent la même table, le même type d'opération (insertion, mise à jour ou suppression) et la même liste de colonnes. Par exemple, chacun des éléments suivants est un lot :
-
Insère dans la table A
-
Insère dans la table B
-
Mises à jour du tableau A
-
Mises à jour du tableau B
-
Supprime de la table A
-
Supprime de la table B Remarque : Oracle GoldenGate analyse les dépendances référentielles de clé étrangère dans les batches avant de les exécuter. S'il existe des dépendances entre des instructions appartenant à des lots différents, plusieurs instructions SQL par lot peuvent être nécessaires pour maintenir l'intégrité référentielle.
Contrôle du nombre d'instructions mises en mémoire cache
Le paramètre MAXSQLSTATEMENTS contrôle le nombre d'instructions mises en cache. Pour plus d'informations, reportez-vous à "MAXSQLSTATEMENTS". Les anciennes instructions sont recyclées à l'aide d'un algorithme moins récemment utilisé. Les batches sont exécutés en fonction d'un seuil spécifié (voir).
Valeur par défaut
Désactivé (processus en mode Replicat normal)
Syntaxe
BATCHSQL
[CHECKUNIQUEKEYS | NOCHECKUNIQUEKEYS]
[THREADS (<threadID>[, <threadID>][, ...][, <thread_range> [,<thread_range>][, ...])]
[CHECKUNIQUEKEYS |
NOCHECKUNIQUEKEYS] |
Valide pour la réplication.
CHECKUNIQUEKEYS force un vidage lorsqu'une table avec une clé unique est rencontrée et ignore le traitement BATCHSQL. Cela garantit que l'ordre d'origine des opérations est maintenu si la clé unique change.
La valeur par défaut est NOCHECKUNIQUEKEYS et ne force pas le vidage lorsqu'une table avec des clés uniques est rencontrée, ce qui permet au traitement BATCHSQL de continuer.
THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])
Valide pour BATCHESPERQUEUE, BATCHTRANSOPS et BYTESPERQUEUE. Applique ces options aux threads spécifiés d'un processus de réplication coordonné.
<threadID>[, <threadID>][, ...]
Indique un thread ID ou une liste de threads séparés par une virgule au format threadID, threadID, threadID.
[, <thread_range>[, <thread_range>][, ...]
Indique une plage de threads au formatthreadIDlow-threadIDhigh ou une liste de plages délimitées par une virgule au formatthreadIDlow-threadIDhigh, threadIDlow-threadIDhigh.
Vous pouvez combiner ces formats. Par exemple, threadID, threadID, threadIDlow-threadIDhigh.