Optimierung der Wiedergabeleistung von Transaktionskopien basierend auf dem Ractor-Modell

1. Hintergrund

Wenn die Standby-Datenbank Transaktionen abspielt, können mehrere voneinander unabhängige Transaktionen gleichzeitig abgespielt werden. Diese Methode wird hauptsächlich verwendet, um das Problem der gleichzeitigen Wiedergabe mehrerer Transaktionen zu lösen, die gleichzeitig abgespielt werden können. Durch mehrere gleichzeitige Scan-Threads wird die Ding-Wiedergabewarteschlange gleichzeitig gescannt, mehrere Dinge generiert, die gleichzeitig wiedergegeben werden können, und der Wiedergabe-Thread wird über die gleichzeitige Wiedergabe benachrichtigt.

2. Design der Datenstruktur

Die Transaktionsdaten der Standby-Datenbank werden entsprechend der Transaktions-ID segmentiert und in der Transaktionsdatenwarteschlange gespeichert. Aufgrund der völlig ungeordneten Natur der Transaktions-ID-UUID kann die UUID gleichzeitig gescannt werden nach Transaktions-ID-Segmenten. Nach der Segmentierung der Ding-ID-UUID wird sie an mehrere Scan-Thread-Coroutinen übergeben. Jeder Scan-Thread ist für eine bestimmte UUID-Partition verantwortlich, um gleichzeitiges Scannen durch mehrere Scan-Threads durchzuführen und Dinge zu scannen, die wiedergegeben werden können.

3. Thread-Lebenszyklus

Wenn der Scan-Thread etwas findet, das wiedergegeben werden kann, fügt er die Ding-ID zu txnList hinzu und führt den Enqueu-Vorgang aus. Nach dem Hinzufügen der Ding-ID führt der Scan-Thread den Benachrichtigungsvorgang aus und weckt den schlafenden Wiedergabe-Thread, um dies auszuführen Ein schematisches Diagramm finden Sie in Abbildung 2 unten.

Der Lebenszyklus der Wiedergabe-Thread-Coroutine ist in Abbildung 3 dargestellt. Der Wiedergabe-Thread befindet sich unmittelbar nach dem Start in einem Ruhezustand. Wenn eine Transaktionswiedergabe erfolgt, wird er zufällig aktiviert. Die aktivierte Replay-Thread-Coroutine führt Transaktionswiedergabeaufgaben aus und bereinigt Transaktionsabhängigkeiten.

Wenn eine wiederholbare Transaktion gefunden wird und festgestellt wird, dass die Anzahl der wiederholbaren Transaktionen gleich 1 ist, führt die aktuelle Coroutine eine Wiedergabe durch, um die Kosten eines CPU-Wechsels zu reduzieren Entfernen Sie für eine wiederholbare Transaktion txnList, um andere Coroutinen für die Transaktionswiedergabe zu aktivieren und eine bessere Parallelitätsleistung bei der Wiedergabe zu erzielen.

4. Problem beim gleichzeitigen Umschalten

Wenn eine gleichzeitige Bereinigung eingeführt wird, ist es aufgrund des Problems des CPU-Wechsels erforderlich, die wiederholbaren Transaktionen, die wiederholt erkannt werden, zu verarbeiten und eine defensive Idempotenzverarbeitung für dieselbe Transaktions-ID durchzuführen, die wiederholt erkannt wird, wie in Abbildung 4 unten dargestellt. Daher ist es für die idempotente Verarbeitung erforderlich, txnIDSet für jede abspielbare Transaktion einzuführen.

5. So beurteilen Sie, ob die Wiedergabe beendet ist

Da gleichzeitiges Scannen und gleichzeitige Wiedergabe verwendet werden, muss der Wiedergabevorgang beendet werden, nachdem die Wiedergabe aller abspielbaren Transaktionen abgeschlossen ist. Die Definition des Wiedergabeendes wird hier angegeben.

Wenn alle wiederholbaren Transaktionen wiedergegeben wurden, gilt die Wiedergabe als beendet. Wiederholbare Transaktionen werden in drei Kategorien unterteilt: wiederholbare Transaktionen, die in der Vergangenheit entdeckt wurden/wiederholbare Transaktionen, die jetzt entdeckt wurden/wiederholbare Transaktionen, die in der Zukunft entdeckt wurden.

In der Vergangenheit erkannte wiederholbare Transaktionen werden zur txnList hinzugefügt. Jetzt erkannte wiederholbare Transaktionen werden vom Wiedergabe-Thread wiedergegeben. In der Zukunft erkannte wiederholbare Transaktionen werden vom Scan-Thread erkannt, der UUIDs scannt.

  • Die Bedingung zum Beenden der Wiedergabe von in der Vergangenheit erkannten Transaktionen ist, dass txnList leer ist;
  • Die nun gefundene Bedingung für das Ende der Transaktionswiedergabe ist, dass die Summe aller workerStatus 0 ist;
  • Die Bedingung für das Ende der Wiedergabe künftig erkannter Transaktionen ist, dass nicht alle Scan-Threads von der GatherAll-Suche nach abspielbaren Transaktionen erkannt werden können.

6. Leistungsoptimierung

Abhängig von der Anzahl der CPUs kann die Anzahl der Wiedergabe-Coroutinen des Scan-Threads und des Wiedergabe-Threads dynamisch angepasst werden, um die Last der beiden Coroutinen angemessen zu verteilen. Dadurch wird die Leistung von Multi-Core-Prozessoren voll ausgenutzt und der Systemdurchsatz und die Reaktionsfähigkeit verbessert.

Ich beschloss , auf Open-Source -Industriesoftware zu verzichten – OGG 1.0 wurde veröffentlicht, das Team von Ubuntu 24.04 LTS wurde offiziell entlassen ". Fedora Linux 40 wurde offiziell veröffentlicht. Ein bekanntes Spieleunternehmen veröffentlichte neue Vorschriften: Hochzeitsgeschenke von Mitarbeitern dürfen 100.000 Yuan nicht überschreiten. China Unicom veröffentlicht die weltweit erste chinesische Llama3 8B-Version des Open-Source-Modells. Pinduoduo wird zur Entschädigung verurteilt 5 Millionen Yuan für unlauteren Wettbewerb. Inländische Cloud-Eingabemethode – nur Huawei hat keine Sicherheitsprobleme beim Hochladen von Cloud-Daten
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/5148943/blog/11045388
Empfohlen
Rangfolge