Analyse des Sperrmechanismus der MySQL-Datenbank

Analyse des Sperrmechanismus der MySQL-Datenbank

Bei gleichzeitigen Zugriffen kann es zu nicht wiederholbaren Lesevorgängen und anderen Lesephänomenen kommen. Um mit hoher Parallelität besser umgehen zu können, sind Blockierung, Zeitstempel, optimistische Parallelitätskontrolle (optimistische Sperre) und pessimistische Parallelitätskontrolle (pessimistische Sperre) die wichtigsten technischen Methoden, die bei der Parallelitätskontrolle verwendet werden.

Sperrklassifizierung

①, nach Vorgang: DML-Sperre, DDL-Sperre

②, nach Sperrgranularität: Sperre auf Tabellenebene, Sperre auf Zeilenebene, Sperre auf Seitenebene

3. Klassifizierung nach Sperrebene: gemeinsame Sperre, exklusive Sperre

④. Klassifizierung nach Sperrmethode: automatische Sperre, Displaysperre

⑤. Klassifizierung nach Verwendung: optimistische Sperre, pessimistische Sperre

Optimistisches und pessimistisches Sperren

Die wichtigsten Methoden der Parallelitätskontrolle sind die optimistische und die pessimistische Parallelitätskontrolle. Optimistisches und pessimistisches Sperren werden nicht nur in relationalen Datenbanken verwendet, sondern haben auch verwandte Konzepte in Hibernate, Memcache usw.

Pessimistische Sperre: auch bekannt als pessimistische Parallelitätskontrolle, Pessimistic Concurrency Controller, abgekürzt PCC. Pessimistisches Sperren bedeutet, dass Daten während des Datenverarbeitungsprozesses gesperrt werden, was im Allgemeinen mithilfe des Datenbank-Sperrmechanismus implementiert wird.

Hinweis: Um pessimistische Sperren in MySQL zu verwenden, müssen Sie MySQL-Autocommit deaktivieren und autocommit=0 festlegen. MySQL verwendet standardmäßig den Autocommit-Modus. Dies bedeutet, dass MySQL das Ergebnis automatisch festschreibt, wenn Sie einen Aktualisierungsvorgang durchführen.

Beispiel: Verwenden Sie die Methode select...for update, um die Daten zu sperren, d. h. um die exklusive Sperre zu aktivieren

//0. Transaktion starten begin;/Arbeit beginnen;/Transaktion starten; (Wählen Sie eine der drei) //1. Produktinformationen abfragen, Status aus t_goods auswählen, wobei id=1 für Aktualisierung ist;
//2. Erstellen Sie eine Bestellung basierend auf den Produktinformationen. Fügen Sie in t_orders (id,goods_id) die Werte (null,1) ein.
//3. Ändern Sie den Produktstatus auf 2
Aktualisiere t_Goods, setze Status=2;
//4. Transaktions-Commit durchführen;/Arbeits-Commit durchführen;

Pessimistische Sperre

Vorteile: Pessimistisches Sperren verwendet den Sperrmechanismus in der Datenbank, um die sequentielle Ausführung von Datenänderungen zu implementieren, was der effektivste Weg ist

Nachteile: Der Sperrmechanismus erzeugt zusätzlichen Mehraufwand und erhöht die Wahrscheinlichkeit eines Deadlocks. Nachdem eine Transaktion Daten mit einer pessimistischen Sperre gesperrt hat, können andere Transaktionen außer Abfragen keine Vorgänge an den gesperrten Daten ausführen. Wenn die Ausführungszeit der Transaktion sehr lang ist, müssen andere Transaktionen die ganze Zeit warten, was sich zwangsläufig auf den Durchsatz unseres Systems auswirkt.

Optimistisches Sperren

Vorteile: Optimistisches Sperren sperrt die Datenbank nicht. Jede Transaktion kann auf die Daten zugreifen, und die Überprüfung wird nur beim Aktualisieren durchgeführt. Dadurch wird der Nachteil des reduzierten Durchsatzes vermieden, der durch pessimistisches Sperren verursacht wird.

Nachteile: Da optimistisches Sperren manuell implementiert wird, ist es nur auf unser eigenes Geschäft anwendbar. Beim Einfügen externer Transaktionen können Fehler auftreten.

  • Sperrmechanismus der MySQL Common Storage Engine
  • BDB: unterstützt Sperren auf Seiten- und Tabellenebene, wobei Sperren auf Seitenebene die Standardeinstellung sind.
  • InnoDB: unterstützt Sperren auf Zeilen- und Tabellenebene, wobei Sperren auf Zeilenebene die Standardeinstellung sind
  • MyISAM & Speicher: Beide Speicher-Engines verwenden Sperren auf Tabellenebene

Exklusive Sperren und gemeinsame Sperren in MySQL

Exklusives Schloss

Eine exklusive Sperre wird auch als Schreibsperre bezeichnet. Wenn Transaktion T eine exklusive Sperre für A hinzufügt, kann keine andere Transaktion irgendeine Art von Sperre für A hinzufügen. Eine Transaktion, der eine exklusive Sperre gewährt wird, kann Daten sowohl lesen als auch schreiben.

Verwendung: SELECT ... FOR UPDATE

Gemeinsames Schloss

Eine gemeinsam genutzte Sperre wird auch als Lesesperre bezeichnet. Wenn Transaktion T eine gemeinsam genutzte Sperre zu A hinzufügt, können andere Transaktionen nur eine gemeinsam genutzte Sperre zu A hinzufügen und können keine anderen Sperren hinzufügen. Transaktionen, denen gemeinsame Sperren gewährt werden, können Daten nur lesen, nicht aber schreiben.

Verwendung: AUSWÄHLEN ... IM FREIGABEMODUS SPERREN;

Zeilensperren, Tabellensperren und Seitensperren in MySQL

Zeilensperren: Zeilensperren werden in gemeinsam genutzte Sperren und exklusive Sperren unterteilt. Zeilensperren sind die feinkörnigsten Sperren in MySQL. Die InnoDB-Engine unterstützt Sperren auf Zeilen- und Tabellenebene. Sperren auf Zeilenebene werden nur verwendet, wenn Daten über Indexbedingungen abgerufen werden, andernfalls werden Sperren auf Tabellenebene verwendet. Sperren auf Zeilenebene weisen einen hohen Overhead auf, das Hinzufügen von Sperren ist langsam, die Sperrgranularität ist minimal, die Wahrscheinlichkeit von Sperrkonflikten ist am geringsten und die Parallelität ist am höchsten.

Sperre auf Tabellenebene: Sperren auf Tabellenebene werden in gemeinsam genutzte Tabellensperren und exklusive Tabellensperren unterteilt. Sperren auf Tabellenebene haben einen geringen Overhead, schnelle Sperren, eine hohe Sperrgranularität, die meisten Sperrkonflikte und die geringste Parallelität.

Sperre auf Seitenebene: Eine Sperre auf Seitenebene ist ein Sperrtyp in MySQL, dessen Sperrgranularität zwischen der Sperre auf Zeilenebene und der Sperre auf Tabellenebene liegt. Sperren auf Tabellenebene sind schnell, weisen aber viele Konflikte auf, während Sperren auf Zeilenebene weniger Konflikte aufweisen, aber langsam sind. Daher wird ein Kompromiss auf Seitenebene eingeführt, um jeweils eine Gruppe benachbarter Datensätze zu sperren. BDB unterstützt Sperren auf Seitenebene.

Der Overhead und die Sperrzeit liegen zwischen Tabellensperren und Zeilensperren. Es können Deadlocks auftreten. Die Sperrgranularität liegt zwischen Tabellensperren und Zeilensperren und die Parallelität ist durchschnittlich.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Analyse des MySQL-Sperrmechanismus und der Verwendung
  • Ausführliche Erklärung des Sperrmechanismus in MySQL InnoDB
  • Ausführliche Erklärung des Sperrmechanismus in MySQL
  • Ausführliche Erläuterung der MySQL-Isolationsebene und des Sperrmechanismus
  • Die umfassendste Erklärung des Sperrmechanismus in MySQL

<<:  Vue verwendet Drag & Drop, um einen Strukturbaum zu erstellen

>>:  Lösungen für das Problem der Erstellung von XHTML- und CSS-Webseiten

Artikel empfehlen

Fallstudie zum Vue-Einkaufswagen

Inhaltsverzeichnis 1. Warenkorb-Beispiel 2. Code-...

So implementieren Sie die Fernzugriffskontrolle in Centos 7.4

1. SSH-Remoteverwaltung SSH ist ein sicheres Kana...

Einfaches Beispiel für die Verwendung eines Docker-Containers

Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Ausf...

Detaillierte Schritte zum Speichern von Emoji-Ausdrücken in MySQL

Verursacht durch: java.sql.SQLException: Falscher...

So verwenden Sie Docker zum Erstellen eines privaten pypi-Repositorys

1. Konstruktion 1. Bereiten Sie die Datei htpassw...

js genaue Berechnung

var numA = 0,1; var numB = 0,2; Alarm (Zahl A + Z...