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

Gründe und Lösungen für das Versagen des React-Ereignisdrosselungseffekts

Inhaltsverzeichnis Das Problem hierbei ist: Lösun...

Beispiele für den Import und Export von MySQL-Tabellendaten

Dieser Artikel beschreibt die Import- und Exportv...

Verwenden Sie zum Senden des Formulars ein Bild statt einer Schaltfläche.

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

Best Practices-Handbuch für partitionierte MySQL-Tabellen

Vorwort: Partitionierung ist ein Tabellenentwurfs...

Eine kurze Analyse der Probleme mit JS-Originalwerten und Referenzwerten

Primitive Werte -> primitive Typen Number Stri...

Design-Sharing der Download-Seite des Pengyou.com-Mobilclients (Bild und Text)

Schauen wir uns zunächst einige einfache Daten an:...

Einrichten von VMware vSphere in VMware Workstation (Grafisches Tutorial)

VMware vSphere ist die branchenführende und zuver...

Diagramm zur Installation von VMware 14 unter Windows 10

Software-Download Link zum Herunterladen der Soft...