Zusammenfassung der MySQL-Sperrwissenspunkte

Zusammenfassung der MySQL-Sperrwissenspunkte

Das Konzept des Schlosses

①. Im wirklichen Leben ist ein Schloss ein Werkzeug, das wir verwenden, wenn wir uns vor der Außenwelt verstecken möchten.

②. In einem Computer ist es ein Mechanismus zur Koordination mehrerer Prozesse oder Threads, um gleichzeitig auf eine Ressource zuzugreifen.

③. In der Datenbank besteht neben der Konkurrenz um herkömmliche Computerressourcen (CPU, RAM, E/A usw.) auch die Gefahr, dass Daten von vielen Benutzern gemeinsam genutzt werden und auf sie zugegriffen wird.

④. Die Sicherstellung der Konsistenz und Effektivität gleichzeitiger Datenzugriffe ist ein Problem, das alle Datenbanken lösen müssen.

⑤. Sperrkonflikte sind ebenfalls ein wichtiger Faktor, der die Leistung gleichzeitiger Zugriffe auf die Datenbank beeinträchtigt.

Übersicht über MySQL-Sperren

Im Vergleich zu anderen Datenbanken ist der Sperrmechanismus von MySQL relativ einfach. Sein bemerkenswertestes Merkmal ist, dass verschiedene Speicher-Engines unterschiedliche Sperrmechanismen unterstützen. Beispielsweise verwenden die Speicher-Engines MyISAM und MEMORY Sperren auf Tabellenebene. Die BDB-Speicher-Engine verwendet Sperren auf Seitenebene, unterstützt aber auch Sperren auf Tabellenebene. Die InnoDB-Speicher-Engine unterstützt sowohl Sperren auf Zeilen- als auch auf Tabellenebene, standardmäßig wird jedoch die Sperre auf Zeilenebene verwendet.

Sperre auf Tabellenebene: Die Sperre auf Tabellenebene ist die Sperre mit der größten Sperrgranularität in MySQL, was bedeutet, dass die gesamte Tabelle des aktuellen Vorgangs gesperrt wird. Es weist einen geringen Overhead und eine schnelle Sperrung auf. Es kommt nicht zu Deadlocks, die Sperrgranularität ist groß, die Wahrscheinlichkeit eines Sperrkonflikts ist am höchsten und die Parallelität ist am geringsten.

Sperre auf Zeilenebene: Die Sperre auf Zeilenebene ist die feinkörnigste Sperre in MySQL. Dies bedeutet, dass nur die aktuell bearbeitete Zeile gesperrt ist. Der Overhead ist hoch und die Sperrung ist langsam. Es kann zu Deadlocks kommen. Die Sperrgranularität ist am geringsten, die Wahrscheinlichkeit eines Sperrkonflikts am geringsten und die Parallelität am höchsten.

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. Es gibt weniger Konflikte auf Zeilenebene, aber die Geschwindigkeit ist langsam. 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.

Aus den oben genannten Merkmalen ist ersichtlich, dass es schwierig ist, allgemein zu sagen, welches Schloss besser ist. Wir können nur anhand der Merkmale der spezifischen Anwendung sagen, welches Schloss besser geeignet ist! ! Ausschließlich aus der Perspektive von Sperren: Sperren auf Tabellenebene eignen sich besser für Anwendungen, die abfrageorientiert sind und Daten nur in kleinen Mengen basierend auf Indexbedingungen aktualisieren, wie z. B. Webanwendungen. Zeilensperren eignen sich besser für Anwendungen mit einer großen Anzahl gleichzeitiger Aktualisierungen einer kleinen Menge unterschiedlicher Daten basierend auf Indexbedingungen und gleichzeitigen Abfragen, wie z. B. einige Systeme zur Online-Transaktionsverarbeitung (OLTP).

Beispiel

① Wenn beim Kauf eines Produkts nur ein Artikel auf Lager ist und zwei Personen gleichzeitig versuchen, ihn zu kaufen, wer bekommt ihn?

②. Transaktionen werden verwendet, um zuerst die Artikeldaten aus der Inventartabelle abzurufen, dann die Bestellung einzugeben und nach der Zahlung die Zahlungstabelleninformationen einzugeben.

③. Aktualisieren Sie die Warenmenge. In diesem Prozess kann die Verwendung von Sperren begrenzte Ressourcen schützen und den Widerspruch zwischen Isolation und Parallelität lösen.

Sperrklassifizierung

Nach Betrieb:

  1. Lesesperre (Shared Lock): Für dieselben Daten können mehrere Lesevorgänge gleichzeitig ausgeführt werden, ohne dass sich diese gegenseitig beeinflussen.
  2. Schreibsperre (exklusive Sperre): Bevor der aktuelle Schreibvorgang abgeschlossen ist, werden andere Schreibsperren und Lesesperren blockiert.

Nach Partikelgröße:

  1. Tabellensperre
  2. Zeilensperre
  3. Seitensperre

Oben finden Sie alle relevanten Wissenspunkte zu MySQL-Sperren. Vielen Dank fürs Lesen und Ihre Unterstützung für 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Analyse von MySQL-Lock-Wait- und Deadlock-Problemen
  • Detaillierte Analyse der MySQL-Sperrblockierung
  • Probleme mit Sperren in MySQL

<<:  So überprüfen Sie, ob die Firewall in Linux ausgeschaltet ist

>>:  js, um einen einfachen Taschenrechner zu erstellen

Artikel empfehlen

HTML-Grundlagen - Einfaches Beispiel zum Festlegen des Hyperlink-Stils

*** Beispiel für das Festlegen des Stils eines Hy...

Bringen Sie Ihnen kostenlos bei, wie Sie AWS-Serverressourcen nutzen

AWS – Amazons Cloud-Computing-Serviceplattform Ic...

Detaillierte Erläuterung der elastischen CSS3-Erweiterungsbox

verwenden Flexible Boxen spielen beim Front-End-L...

Detaillierte Erläuterung der geplanten MySQL-Aufgaben (Ereignisereignisse)

1. Kurze Einführung in die Veranstaltung Ein Erei...

Detaillierte Erklärung der MySQL-Syntax, Sonderzeichen und regulären Ausdrücke

Häufig verwendete Anzeigebefehle für MySQL 1. Zei...

Javascript zum Wechseln von Bildern per Mausklick

In diesem Artikelbeispiel wird der spezifische Ja...

Shell-Skript Nginx-Automatisierungsskript

Dieses Skript kann die Vorgänge zum Starten, Stop...

Implementierung eines Nginx-Load-Balancing-Clusters

(1) Experimentelle Umgebung youxi1 192.168.5.101 ...

JavaScript-Entwurfsmuster – Muster der Verantwortungskette

Inhaltsverzeichnis Überblick Code-Implementierung...