Replicat-Transaktionen optimieren
Replicat verwendet reguläres SQL, so dass seine Performance von der Performance der Zieldatenbank und dem angewendeten SQL-Typ abhängt (einfügt, aktualisiert oder löscht). Sie können jedoch bestimmte Schritte unternehmen, um die Replicat-Effizienz zu maximieren.
Koordinationsperformance für Barrierentransaktionen optimieren
In einer koordinierten Replicat-Konfiguration verursachen Sperrtransaktionen wie Aktualisierungen des Primärschlüssels eine erhöhte Anzahl von Commits in der Datenbank, und sie unterbrechen die Vorteile des Features GROUPTRANSOPS von Replicat. Wenn in der Gesamt-Workload des koordinierten Replicats eine hohe Anzahl von Sperrtransaktionen vorhanden ist, kann die Verwendung einer hohen Anzahl von Threads die Replicat-Performance tatsächlich beeinträchtigen.
Um eine hohe Performance zu erhalten, wenn eine große Anzahl von Barrieretransaktionen erwartet wird, können Sie Folgendes tun:
-
Reduzieren Sie die Anzahl der aktiven Threads in der Gruppe. Dadurch wird die Gesamtzahl der Commits reduziert, die Replicat ausführt.
-
Verschieben Sie die Tabellen, auf die der Großteil der Sperrentransaktionen entfällt, und alle Tabellen, mit denen sie Abhängigkeiten haben, in eine separate koordinierte Replicat-Gruppe, die eine kleine Anzahl von Threads aufweist. Behalten Sie die Tabellen mit minimalen Barrieretransaktionen in der ursprünglichen Replicat-Gruppe mit der höheren Anzahl von Threads bei, sodass die parallele Performance ohne Unterbrechung durch Barrieretransaktionen beibehalten wird.
-
(Oracle RAC) In einer neuen Replicat-Konfiguration können Sie das Attribut
PCTFREEder Replicat-Checkpoint-Tabelle erhöhen. Dies muss jedoch erfolgen, bevor Replicat zum ersten Mal gestartet wird. Der empfohlene Wert vonPCTFREEist 90.
Vollständige Table Scans ohne Schlüssel verhindern
Wenn eine Zieltabelle keinen Primärschlüssel, keinen eindeutigen Schlüssel oder einen eindeutigen Index enthält, verwendet Replicat alle Spalten, um die WHERE-Klausel zu erstellen. Dies ist im Wesentlichen ein Full Table Scan.
Um die Zeilenauswahl effizienter zu gestalten, verwenden Sie eine KEYCOLS-Klausel in den Anweisungen TABLE und MAP, um eine oder mehrere Spalten als eindeutig zu identifizieren. Replicat verwendet die angegebenen Spalten als Schlüssel. Das folgende Beispiel zeigt eine KEYCOLS-Klausel in einer TABLE-Anweisung:
TABLE hr.emp, KEYCOLS (FIRST_NAME, LAST_NAME, DOB, ID_NO);
Verwendungsrichtlinien und Syntax finden Sie in den Parametern TABLE und MAP in der Referenz zu Parametern und Funktionen für Oracle GoldenGate.
Große Transaktionen aufteilen
Wenn die Zieldatenbank große Transaktionen aus der Quelldatenbank nicht verarbeiten kann, können Sie sie mit dem Replicat-Parameter MAXTRANSOPS in eine Reihe kleinerer Transaktionen aufteilen. Weitere Informationen finden Sie in der Referenz zu Parametern und Funktionen für Oracle GoldenGate.
Hinweis: MAXTRANSOPS ist für ein integriertes Replicat in einem Oracle AI Database-System nicht gültig.
Offene Cursor anpassen
Der Replicat-Prozess verwaltet Cursor für gecachte SQL-Anweisungen und für SQLEXEC-Vorgänge. Ohne genügend Cursor muss Replicat mehr Aussagen altern. Standardmäßig verwaltet Replicat so viele Cursor, wie der Parameter MAXSQLSTATEMENTS zulässt. Möglicherweise muss der Wert dieses Parameters erhöht werden. In diesem Fall müssen Sie möglicherweise auch die maximale Anzahl offener Cursor anpassen, die von der Datenbank zugelassen werden. Weitere Informationen finden Sie in der Referenz zu Parametern und Funktionen für Oracle GoldenGate.
Verbesserung der Aktualisierungsgeschwindigkeit
Übermäßige Blockfragmentierung führt dazu, dass Replicat SQL-Anweisungen langsamer als normal anwendet. Reorganisieren Sie stark fragmentierte Tabellen, und stoppen und starten Sie Replicat, um die neue Objekt-ID zu registrieren.
Replicat-Transaktionstimeout festlegen
Verwenden Sie den Parameter TRANSACTIONTIMEOUT, um zu verhindern, dass eine nicht festgeschriebene Replicat-Zieltransaktion Sperren in der Zieldatenbank aufhält und deren Ressourcen unnötig belegt. Sie können den Wert dieses Parameters ändern, sodass Replicat innerhalb vorhandener Anwendungstimeouts und anderer Datenbankanforderungen am Ziel arbeiten kann.
TRANSACTIONTIMEOUT begrenzt die Zeit, die Replicat eine Zieltransaktion offen halten kann, wenn sie den Datensatz für das Transaktionsende für die letzte Quelltransaktion in dieser Transaktion nicht erhalten hat. Standardmäßig gruppiert Replicat mehrere Quelltransaktionen in einer Zieltransaktion, um die Performance zu verbessern. Es wird jedoch keine teilweise Quelltransaktion festgeschrieben und auf diesen letzten Datensatz unbegrenzt gewartet. Der Replicat-Parameter GROUPTRANSOPS steuert die Mindestgröße einer gruppierten Zieltransaktion.
Die folgenden Ereignisse können lange genug dauern, um TRANSACTIONTIMEOUT auszulösen:
-
Netzwerkprobleme verhindern, dass Traildaten an das Zielsystem übermittelt werden.
-
Kein Speicherplatz mehr auf einem System, sodass Traildaten nicht geschrieben werden.
-
Extract wird beendet oder beendet, wenn Datensätze für eine Transaktion geschrieben werden.
-
Es tritt ein Ausfall des Quellsystems auf, z. B. ein Stromausfall oder ein Systemabsturz.
Weitere Informationen finden Sie unter TRANSACTIONTIMEOUT in der Referenz zu Parametern und Funktionen für Oracle GoldenGate.