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

VMware ESXi 5.5 Bereitstellungs- und Konfigurationsdiagrammprozess

Inhaltsverzeichnis 1. Installationsvoraussetzunge...

JavaScript implementiert eine Box, die der Mausbewegung folgt

In diesem Artikel wird der spezifische JavaScript...

So lösen Sie das Zeichensatzproblem bei der Anmeldung bei Linux

Zeichensatzfehler treten immer auf Gebietsschema:...

Implementierungscode für die Dateimontage von DockerToolBox

Wenn Sie Docker verwenden, stellen Sie möglicherw...

Detaillierte Erklärung von mktemp, einem grundlegenden Linux-Befehl

mktemp Erstellen Sie auf sichere Weise temporäre ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.22

Installation und Konfiguration von MySQL8.0.22 (s...

Praktisches Tutorial zum Ändern des MySQL-Zeichensatzes

Vorwort: In MySQL unterstützt das System viele Ze...

MySQL-Triggersyntax und Anwendungsbeispiele

Dieser Artikel veranschaulicht anhand von Beispie...

So verwenden Sie Docker zum Bereitstellen eines Dubbo-Projekts

1. Verwenden Sie zunächst Springboot, um ein einf...

Detaillierte Erläuterung der Vue-Projektverpackung

Inhaltsverzeichnis 1. Zugehörige Konfiguration Fa...

Daten in der Layui-Tabellenzeile dynamisch bearbeiten

Inhaltsverzeichnis Vorwort Stil Funktion Beschrei...

Was ist Nginx-Lastausgleich und wie wird er konfiguriert?

Was ist Lastenausgleich? Der Lastausgleich wird h...

Detaillierte Schritte zur Installation von Docker 1.8 auf CentOS 7

Docker unterstützt die Ausführung auf den folgend...