Heim  >  Artikel  >  Datenbank  >  Eine kurze Einführung in Zeilensperren, Seitensperren und Tabellensperren in MySQL

Eine kurze Einführung in Zeilensperren, Seitensperren und Tabellensperren in MySQL

不言
不言nach vorne
2018-10-17 17:01:483116Durchsuche

MySQL kann entsprechend der Granularität der Sperren in Zeilensperren, Seitensperren und Tabellensperren unterteilt werden.

Zeilensperre

1. Die Sperrgranularität der Zeilensperre ist die feinste in MySQL. Sie wird auf die InnoDB-Speicher-Engine angewendet und fügt nur die aktuelle Zeile hinzu Betrieb. Bei Parallelität ist die Wahrscheinlichkeit des Wartens auf Sperren gering und es wird eine größere Anzahl von Parallelitäten unterstützt. Der Overhead ist jedoch hoch, die Sperre ist langsam und es kann zu Deadlocks kommen.

2. Für die Verwendung von Zeilensperren in InnoDB ist eine Indizierung beim Abrufen von Daten erforderlich! Weil InnoDB Zeilensperren implementiert, indem es die Indexeinträge des Index sperrt.

3. Bei Abfragen ohne Indexbedingungen verwendet InnoDB Tabellensperren, was bei großer Parallelität zu einer großen Anzahl von Sperrkonflikten führen kann. Darüber hinaus werden Zeilensperren für den Index gesperrt. In diesem Fall wird zwar auf unterschiedliche Datensätze zugegriffen, aber dasselbe Indexelement verwendet, es kann jedoch auch zu Sperrkonflikten kommen.

Tipp: Zeilensperren müssen nicht unbedingt verwendet werden, wenn Indexabruf verwendet wird, es können auch Tabellensperren verwendet werden. Da MySQL die Kosten verschiedener Ausführungspläne vergleicht, verwendet InnoDB Tabellensperren, wenn ein vollständiger Tabellenscan effizienter ist als ein Index. Daher ist es notwendig, Sperrkonflikte in Verbindung mit dem SQL-Ausführungsplan zu analysieren.

4. Zeilensperren führen zu Deadlocks, da die Sperre bei Zeilensperren schrittweise erfolgt und hauptsächlich in zwei Schritte unterteilt ist: Sperren des Primärschlüsselindex und Sperren des Nicht-Primärschlüsselindex. Beispiel: Wenn zwei Transaktionen gleichzeitig ausgeführt werden, sperrt eine den Primärschlüsselindex und wartet auf andere Indizes, die andere sperrt den Nicht-Primärschlüsselindex und wartet auf den Primärschlüsselindex. Es kommt zu einem Deadlock. InnoDB kann diese Art von Deadlock im Allgemeinen erkennen und veranlassen, dass eine Transaktion die Sperre aufhebt und zurücksetzt und eine andere die Sperre erhält, um die Transaktion abzuschließen.

Tabellensperre
Die Sperrgranularität der Tabellensperre ist in MySQL am gröbsten. Sie wird in InnoDB- und MyISAM-Engines angewendet und sperrt die gesamte aktuelle Tabelle. Es ist nicht für Szenarien mit hoher Parallelität geeignet, weist jedoch einen geringen Overhead, schnelles Sperren, keinen Deadlock und die höchste Wahrscheinlichkeit eines Sperrenkonflikts auf.

Seitensperre
Die Granularität der Seitensperre liegt zwischen Zeilensperre und Tabellensperre. Sie wird auf die BDB-Engine angewendet, und die Kosten und die Sperrgeschwindigkeit sind ebenfalls durchschnittlich zwischen Zeilensperre und Zeilensperre und Tabellensperre.

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in Zeilensperren, Seitensperren und Tabellensperren in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen