Einführung in die MySQL-Entsperr- und Sperrtabelle

Einführung in die MySQL-Entsperr- und Sperrtabelle

MySQL Lock-Übersicht

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 Speicher-Engine BDB verwendet Sperren auf Seitenebene, unterstützt aber auch Sperren auf Tabellenebene; die Speicher-Engine InnoDB unterstützt sowohl Sperren auf Zeilen- als auch auf Tabellenebene, verwendet aber standardmäßig Sperren auf Zeilenebene.

Die Eigenschaften dieser drei Arten von MySQL-Sperren können grob wie folgt zusammengefasst werden.

Overhead, Sperrgeschwindigkeit, Deadlock, Granularität und Parallelitätsleistung

l Sperre auf Tabellenebene: geringer Overhead, schnelle Sperrung, kein Deadlock, hohe Sperrgranularität, höchste Wahrscheinlichkeit eines Sperrkonflikts und geringste Parallelität.
l Sperre auf Zeilenebene: Hoher Overhead, langsame Sperrung; es kann zu Deadlocks kommen; die Sperrgranularität ist am geringsten, die Wahrscheinlichkeit eines Sperrkonflikts am geringsten und die Parallelität am höchsten.
l Seitensperre: Der Overhead und die Sperrzeit liegen zwischen der Tabellensperre und der Zeilensperre. Es kann zu Deadlocks kommen. Die Sperrgranularität liegt zwischen der Tabellensperre und der Zeilensperre und die Parallelität ist durchschnittlich.

MyISAM-Tabellensperren

Die MyISAM-Speicher-Engine unterstützt nur Tabellensperren. Dies ist der einzige Sperrtyp, der in den ersten Versionen von MySQL unterstützt wurde. Da die Anforderungen der Anwendungen an Transaktionsintegrität und Parallelität immer weiter stiegen, begann MySQL mit der Entwicklung einer transaktionsbasierten Speicher-Engine. Später erschienen nach und nach die BDB-Speicher-Engine, die Seitensperren unterstützt, und die InnoDB-Speicher-Engine, die Zeilensperren unterstützt (InnoDB ist eigentlich ein eigenständiges Unternehmen und wurde inzwischen von Oracle übernommen). MyISAM-Tabellensperren sind jedoch immer noch der am häufigsten verwendete Sperrtyp. In diesem Abschnitt wird die Verwendung von MyISAM-Tabellensperren ausführlich vorgestellt.
Sperrkonflikte auf Abfragetabellenebene

Tabellensperrenkonflikte auf Ihrem System können durch die Untersuchung der Statusvariablen table_locks_waited und table_locks_immediate analysiert werden:
mysql> Status wie „Tabelle%“ anzeigen;
+--------------------------+----------+
| Variablenname | Wert |
+--------------------------+----------+
| Tabellensperren_sofort | 2979 |
| Auf Tabellensperren gewartet | 0 |
+--------------------------+----------+
2 Zeilen im Satz (0,00 Sek.)
Wenn der Wert von Table_locks_waited relativ hoch ist, bedeutet dies, dass es einen ernsthaften Sperrkonflikt auf Tabellenebene gibt.

Holen Sie sich den InnoDB-Zeilensperrenkonfliktstatus

Sie können den Zeilensperrenkonflikt auf Ihrem System analysieren, indem Sie die Statusvariable InnoDB_row_lock prüfen:
mysql> Status wie „innodb_row_lock%“ anzeigen;
+-------------------------------+----------+
| Variablenname | Wert |
+-------------------------------+----------+
| InnoDB_row_lock_current_waits | 0 |
| InnoDB_row_lock_time | 0 |
| InnoDB_row_lock_time_avg | 0 |
| InnoDB_row_lock_time_max | 0 |
| InnoDB_row_lock_waits | 0 |
+-------------------------------+----------+
5 Zeilen im Satz (0,01 Sek.)
Wenn sich herausstellt, dass Sperrkonflikte schwerwiegend sind, z. B. hohe Werte von InnoDB_row_lock_waits und InnoDB_row_lock_time_avg, können Sie auch

Freischalten

Der erste

Prozessliste anzeigen;

Suchen Sie den Sperrvorgang und beenden Sie seine ID.

Der Zweite

mysql>TABELLEN ENTSPERREN;

Tabelle sperren

Sperren Sie die Datentabelle, um zu verhindern, dass die Tabelle während des Sicherungsvorgangs aktualisiert wird

mysql>SPERRT TABELLEN tbl_name LESEN;

Fügen Sie der Tabelle eine Schreibsperre hinzu:

mysql>Tabellen sperren, Tabellenname SCHREIBEN;

Das könnte Sie auch interessieren:
  • Mysql fragt die ausgeführten Transaktionen ab und wie auf Sperren gewartet werden soll
  • Grundlegendes zu MySQL-Sperren basierend auf Update-SQL-Anweisungen
  • PHP verwendet Mysql Lock, um hohe Parallelität zu lösen
  • Lösung für das Problem der gesperrten Transaktionsverarbeitung mit hoher Parallelität in PHP+MySQL
  • Analyse des MySQL-Sperrmechanismus und der Verwendung
  • So überprüfen Sie, wo die Metadatensperre in MySQL blockiert ist
  • Analyse der Implementierung der MySQL-Anweisungssperre
  • Mysql verwendet den Kill-Befehl, um das Deadlock-Problem zu lösen (eine bestimmte SQL-Anweisung, die ausgeführt wird, abzubrechen).
  • Eine vollständige Aufzeichnung eines Mysql-Deadlock-Fehlerbehebungsprozesses
  • MySQLs konzeptionelles Verständnis verschiedener Sperren

<<:  So richten Sie den Start einer JAR-Anwendung unter CentOS7 ein

>>:  HTML5 und jQuery zum Implementieren von Vorschau-Codebeispielen vor dem Hochladen lokaler Bilder

Artikel empfehlen

So verwenden Sie & und nohup im Hintergrund von Linux

Wenn wir in einem Terminal oder einer Konsole arb...

Welche Vorteile bietet die Verwendung des B+-Baumindex in MySQL?

Bevor wir dieses Problem verstehen, schauen wir u...

So schreiben Sie asynchrone Aufgaben in modernem JavaScript

Vorwort In diesem Artikel untersuchen wir die Ent...

So fügen Sie einem Hintergrundbild in CSS3 eine Farbmaske hinzu

Vor einiger Zeit stieß ich während der Entwicklun...

Abfrageprozess und Optimierungsmethode der (JOIN/ORDER BY)-Anweisung in MySQL

Die EXPLAIN-Anweisung wird im MySQL-Abfrageanweis...

Detaillierte Erklärung zum dynamischen Festlegen des Browsertitels in Vue

Inhaltsverzeichnis Unsinn Text Der erste router/i...

Eine kurze Erläuterung zu „Group By“ in MySQL

Inhaltsverzeichnis 1. Einleitung 2. Bereiten Sie ...

Vue implementiert das gleichzeitige Einstellen mehrerer Countdowns

In diesem Artikelbeispiel wird der spezifische Co...

So exportieren Sie MySQL-Abfrageergebnisse in CSV

Um MySQL-Abfrageergebnisse in CSV zu exportieren,...

js-Code, der den Button mit der Eingabetaste verknüpft

Code kopieren Der Code lautet wie folgt: <html...

So deinstallieren und installieren Sie Tomcat neu (mit Bildern und Text)

Deinstallieren Sie tomcat9 1. Da die Installation...

So beheben Sie den MySQL-FEHLER 1045 (28000) - Zugriff wegen Benutzer verweigert

Problembeschreibung (die folgende Diskussion besc...