Pessimistisches Sperren und optimistisches Sperren in MySQL

Pessimistisches Sperren und optimistisches Sperren in MySQL

In relationalen Datenbanken sind pessimistisches und optimistisches Sperren Lösungen für Ressourcenparallelitätsszenarien. Als Nächstes werden wir die tatsächliche Verwendung sowie die Vor- und Nachteile dieser beiden Parallelitätslösungen ausführlich erläutern.

Definieren Sie zunächst die Datenbank und erstellen Sie eine einfache Inventartabelle wie folgt:

CREATE TABLE `order_stock` (
 `id` int(11) NICHT NULL AUTO_INCREMENT KOMMENTAR 'ID',
 `oid` int(50) NOT NULL COMMENT 'Produkt-ID',
 `Menge` int(20) NICHT NULL KOMMENTAR 'Inventar',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

Die Menge stellt den Bestand verschiedener Rohstoffe dar. Als nächstes verwenden OCC und PCC diese Datenbank zur Demonstration.

Optimistisches Sperren (OCC)

Dabei wird davon ausgegangen, dass sich gleichzeitige Transaktionen mehrerer Benutzer während der Verarbeitung nicht gegenseitig beeinflussen und jede Transaktion den von ihr betroffenen Teil der Daten verarbeiten kann, ohne Sperren zu generieren. Vor dem Übernehmen von Datenaktualisierungen prüft jede Transaktion zunächst, ob andere Transaktionen die Daten nach dem Lesen geändert haben. Wenn es bei anderen Transaktionen Aktualisierungen gibt, wird für die festgeschriebene Transaktion ein Rollback durchgeführt.

Das heißt, beim „optimistischen Sperren 🔒“ wird davon ausgegangen, dass der Benutzer, der die Sperre nimmt, höchstwahrscheinlich Erfolg haben wird. Daher reicht es aus, die Sperre im letzten Schritt des Geschäftsvorgangs zu nehmen, der tatsächlich eine Aktualisierung der Daten erfordert. Dadurch können die von der Datenbank selbst definierten Zeilensperren vermieden und Deadlocks vermieden werden.

UPDATE order_stock SET Menge = Menge - 1 WO oid = 1 UND Menge - 1 > 0;

Die optimistische Parallelitätssteuerung wird hauptsächlich in Umgebungen mit wenig Datenkonflikten verwendet. In solchen Umgebungen ist der Aufwand für das gelegentliche Zurücksetzen einer Transaktion geringer als der Aufwand für das Sperren von Daten beim Lesen. Daher kann ein höherer Durchsatz als bei anderen Parallelitätssteuerungsmethoden erreicht werden.

Pessimistische Sperr-PCC

Dadurch wird verhindert, dass durch eine Transaktion Daten in einer Weise geändert werden, die Auswirkungen auf andere Benutzer hat. Wenn eine Transaktion einen Vorgang ausführt, bei dem eine Datenzeile gelesen und eine Sperre angewendet wird, können andere Transaktionen Vorgänge, die mit der Sperre in Konflikt stehen, nur dann ausführen, wenn die Transaktion die Sperre freigibt.

Dieses Design verwendet den Modus „eine Sperre 🔒 zwei Abfragen 🔍 drei Aktualisierungen“, bei dem select ... for update “ in der Datenbank verwendet wird, um der aktuellen Transaktion eine Sperre auf Zeilenebene 🔒 hinzuzufügen. Sperren Sie zuerst die zu bearbeitenden Daten und führen Sie dann die entsprechenden Abfragedaten aus, um die Aktualisierungsoperation durchzuführen.

BEGINNEN
WÄHLEN Sie die Menge aus dem Bestellbestand, wobei oid = 1 für das Update ist;
UPDATE order_stock SET Menge = 2 WO oid = 1; 
BEGEHEN;

Ein weiteres Problem mit MySQL besteht darin, dass während der Ausführung der Select ... for Update-Anweisung alle gescannten Zeilen gesperrt werden, was leicht zu Problemen führen kann. Wenn Sie in MySQL pessimistische Sperren verwenden, achten Sie daher darauf, den Index und nicht einen vollständigen Tabellenscan zu verwenden.

Die pessimistische Parallelitätskontrolle wird hauptsächlich in Umgebungen mit starken Datenkonflikten und in Umgebungen verwendet, in denen die Kosten für die Verwendung von Sperren zum Schutz der Daten bei Parallelitätskonflikten geringer sind als die Kosten für das Zurücksetzen von Transaktionen.

Vor- und Nachteile von OCC und PCC

Vorteile und Nachteile von OCC

【Vorteil】

  • Beim optimistischen Sperren wird davon ausgegangen, dass die Wahrscheinlichkeit eines Datenkonflikts zwischen Transaktionen relativ gering ist. Daher ist es möglich, direkt fortzufahren und nur beim Festschreiben zu sperren, sodass keine Sperren oder Deadlocks auftreten.
  • Es kann schnell auf Transaktionen reagieren, aber mit zunehmender Parallelität kommt es zu einer großen Anzahl von Rollbacks.
  • Hoher Wirkungsgrad, allerdings muss die Verriegelungskraft kontrolliert werden.

【Mangel】

  • Wenn Sie dies einfach tun, können dennoch unerwartete Ergebnisse auftreten. Beispielsweise lesen zwei Transaktionen eine Zeile aus der Datenbank und schreiben sie dann nach der Änderung wieder in die Datenbank zurück. Dies führt zu Problemen.
  • Mit zunehmender Parallelität kommt es zu einer großen Zahl von Rollbacks.

Vorteile und Nachteile von PCC

【Vorteil】

Die konservative Strategie „Erst sperren, dann zugreifen“ gewährleistet die Sicherheit der Datenverarbeitung;

【Mangel】

  • Verlassen Sie sich auf Datenbanksperren, was ineffizient ist;
  • Der Sperrmechanismus verursacht zusätzlichen Overhead für die Datenbank und erhöht die Wahrscheinlichkeit eines Deadlocks.
  • Dadurch wird die Parallelität verringert. Wenn eine Transaktion eine Datenzeile sperrt, müssen andere Transaktionen warten, bis die Transaktion abgeschlossen ist, bevor sie diese Datenzeile verarbeiten können.

Oben sind die Details zu pessimistischen und optimistischen Sperren in MySQL aufgeführt. Weitere Informationen zu pessimistischen und optimistischen Sperren in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Beispiele für optimistisches und pessimistisches Sperren in MySQL
  • Beispiele für die Verwendung von pessimistischem und optimistischem Sperren in MySQL
  • Verständnis und Anwendungsanalyse der pessimistischen und optimistischen Sperre von MySQL
  • Umfassende Analyse von optimistischer Sperre, pessimistischer Sperre und MVCC in MySQL
  • MySQL-Implementierung für pessimistisches und optimistisches Sperren

<<:  So überprüfen Sie die Speichernutzung unter Linux

>>:  Verschiedene Implementierungsmethoden von Vue zum Ändern von übergeordneten Komponenteneigenschaften durch untergeordnete Komponenten

Artikel empfehlen

Die 10 klassischen Optimierungsfälle und -szenarien von MySQL

Inhaltsverzeichnis 1. Allgemeine Schritte zur SQL...

So setzen Sie das MySQL-Root-Passwort unter Windows zurück

Heute habe ich festgestellt, dass WordPress keine...

Detailliertes Tutorial zur Installation von mysql-8.0.20 unter Linux

** Installieren Sie mysql-8.0.20 unter Linux ** U...

Detaillierte Erklärung zur Verwendung der JavaScript-Zwischenablage

(1) Einleitung: clipboard.js ist ein leichtes Jav...

Verwendung der MySQL DATE_FORMAT-Funktion

Angenommen, Taobao animiert die Leute zum Einkauf...

Ein praktischer Bericht über einen durch den MySQL-Start verursachten Unfall

Inhaltsverzeichnis Hintergrund So ermitteln Sie, ...

Verwendung des Linux-Datumsbefehls

1. Befehlseinführung Mit dem Datumsbefehl wird di...

JavaScript-Implementierung des Spiels des Lebens

Inhaltsverzeichnis Konzept-Einführung Logische Re...

5 JavaScript-Möglichkeiten zum Abflachen von Arrays

Inhaltsverzeichnis 1. Konzept der Array-Abflachun...

Was Sie beim Schreiben selbstschließender XHTML-Tags beachten sollten

Das img-Tag in XHTML sollte wie folgt geschrieben...

Das WeChat-Applet realisiert eine Links-Rechts-Verknüpfung

In diesem Artikel wird der spezifische Code für d...