Heim >Datenbank >MySQL-Tutorial >Detaillierte Beispiele zum Entsperren und Sperren von Tabellen in MYSQL

Detaillierte Beispiele zum Entsperren und Sperren von Tabellen in MYSQL

Y2J
Y2JOriginal
2017-05-22 14:20:181996Durchsuche

Im Vergleich zu anderen Datenbanken ist der Sperrmechanismus von MySQL relativ einfach. Sein wichtigstes Merkmal ist, dass verschiedene Speicher-Engines unterschiedliche Sperrmechanismen unterstützen

MySQL-Sperrübersicht

Im Vergleich Bei anderen Datenbanken ist der Sperrmechanismus von MySQL relativ einfach. Das bemerkenswerteste Merkmal ist, dass verschiedene Speicher-Engines unterschiedliche Sperrmechanismen unterstützen. Beispielsweise verwenden die Speicher-Engines MyISAM und MEMORY Sperren auf Tabellenebene (Sperren auf Tabellenebene); die Speicher-Engine BDB verwendet Sperren auf Seitenebene (Sperren auf Seitenebene), unterstützt jedoch auch Sperren auf Tabellenebene Sowohl das Sperren auf Zeilenebene (Sperren auf Zeilenebene) als auch das Sperren auf Tabellenebene werden ebenfalls unterstützt, aber standardmäßig wird das Sperren auf Zeilenebene verwendet.

Die Eigenschaften dieser drei Sperren in MySQL lassen sich grob wie folgt zusammenfassen.

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

l Sperre auf Tabellenebene: geringer Overhead, schnelle Sperre; es tritt kein Deadlock auf, es tritt ein Sperrkonflikt auf die niedrigste Parallelität.
l                                                                                  Sperren auf Zeilenebene, Sperren auf Zeilenebene: hoher Overhead, langsam Es kann zu Deadlocks kommen. Die Granularität der Sperren ist am geringsten, die Wahrscheinlichkeit von Sperrkonflikten ist am höchsten und der Grad der Parallelität ist ebenfalls am höchsten.
l Seitensperre: Der Overhead und die Sperrzeit liegen zwischen Tabellensperren und Zeilensperren. Die Sperrgranularität liegt zwischen Tabellensperren und Zeilensperren, und die Parallelität ist durchschnittlich.

MyISAM-Tabellensperre

Die MyISAM-Speicher-Engine unterstützt nur Tabellensperren, was auch der einzige Sperrtyp ist, der in den ersten Versionen von MySQL unterstützt wurde. Mit der kontinuierlichen Verbesserung der Anwendungsanforderungen für Transaktionsintegrität und Parallelität begann MySQL mit der Entwicklung transaktionsbasierter Speicher-Engines. Später erschienen nach und nach die BDB-Speicher-Engine, die Seitensperren unterstützt, und die InnoDB-Speicher-Engine, die Zeilensperren unterstützt (eigentlich ist InnoDB eine separate). Ein Unternehmen, das jetzt von Oracle übernommen wurde. Allerdings ist die Tabellensperre von MyISAM immer noch der am weitesten verbreitete Sperrtyp. In diesem Abschnitt wird die Verwendung von MyISAM-Tabellensperren ausführlich vorgestellt.
AbfrageSperrenkonflikt auf Tabellenebene

Tabellensperrenkonflikte auf dem System können analysiert werden, indem die Variablen „table_locks_waited“ und „table_locks_immediate“StatusVariablen überprüft werden:
mysql> Status anzeigen wie „table%“;
+--------------------------------- -+------+
|. Variablenname |
+--------+---- ---+
|. Table_locks_immediate |. 2979 |
| -----+
2 Zeilen im Satz (0,00 Sek.))
Wenn der Wert von Table_locks_waited relativ hoch ist, weist dies darauf hin, dass ein schwerwiegender Sperrkonflikt auf Tabellenebene vorliegt.

InnoDB-Zeilensperrenkonflikt abrufen

Sie können den Zeilensperrenkonflikt auf dem System analysieren, indem Sie die Statusvariable InnoDB_row_lock überprüfen:

mysql> show status like 'innodb_row_lock%';
+--------------------+------+
|. Variablenname                                              |
+---------------------+---------------------+
|. 0 |
|. InnoDB_row_lock_time |. 0 |
|. ------ - ------+-------+
5 Zeilen im Satz (0,01 Sek.)
Wenn ein Sperrenkonflikt festgestellt wird Seien Sie ernst, da die Werte von InnoDB_row_lock_waits und InnoDB_row_lock_time_avg relativ hoch sind. Sie können es auch über




Der erste TypProzessliste anzeigen;

Sperrprozess finden, ID töten;

Der zweite Typ

mysql>UNLOCK TABLES;

Tabelle sperren

Sperren Sie die Datentabelle, um ein Sperren der Datentabelle zu vermeiden. Während des Sicherungsvorgangs wurde die Tabelle

aktualisiert

mysql>LOCK TABLES tbl_name READ;

Fügen Sie der Tabelle eine Schreibsperre hinzu:

mysql>LOCK TABLES tbl_name WRITE;

[Verwandte Empfehlungen]

1.

Mysql kostenloses Video-Tutorial

2.

So verbessern Sie die Geschwindigkeit der Datenbankabfrage für Millionen von Elementen

3.

5 häufige Fehler beim Datenbankdesign

4.

Detaillierte Erläuterung der SQL-Anweisung, die den ursprünglichen Inhalt von MySQL beibehält und Inhalte später hinzufügt

5

Eine Zusammenfassung, wie häufig verwendete SQL-Anweisungen in MySQL geschrieben werden

Das obige ist der detaillierte Inhalt vonDetaillierte Beispiele zum Entsperren und Sperren von Tabellen in MYSQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn