Heim  >  Artikel  >  Datenbank  >  MySQL Advanced Nine – MyISAM-Tabellensperre (gemeinsame Lesesperre)

MySQL Advanced Nine – MyISAM-Tabellensperre (gemeinsame Lesesperre)

黄舟
黄舟Original
2016-12-29 16:44:081283Durchsuche

Sperren sind ein Mechanismus für Computer, um den gleichzeitigen Zugriff auf eine Ressource durch mehrere Prozesse oder Threads zu koordinieren. In einer Datenbank sind Daten auch eine Ressource, die von vielen Benutzern gemeinsam genutzt wird. Die Sicherstellung der Konsistenz und Effektivität des Datenzugriffs stellt für alle Datenbanken ein Problem dar. Sperrenkonflikte sind ebenfalls ein wichtiger Faktor, der die Leistung des gleichzeitigen Zugriffs auf die Datenbank beeinflusst. Aus dieser Perspektive sind Sperren für Datenbanken besonders wichtig und komplex.

MySQL-Sperrübersicht

Im Vergleich zu anderen Datenbanken ist der Sperrmechanismus von MySQL relativ einfach. Sein wichtigstes 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 aber auch Sperren auf Tabellenebene, verwendet jedoch standardmäßig Zeilen -Ebenenverriegelung.

Tabellensperrenkonflikte auf dem System können durch Überprüfen der Statusvariablen table_locks_waited und table_locks_immediate analysiert werden:

Status wie „table%“ anzeigen;

Das Ergebnis ist, wenn Table_locks_waited A Ein relativ hoher Wert weist darauf hin, dass ein schwerwiegender Sperrkonflikt auf Tabellenebene vorliegt.

Eigenschaften dieser drei Sperren in MySQL:

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

Sperre auf Tabellenebene: geringer Overhead, schnelles Sperren, kein Deadlock wird auftreten, die Sperrgranularität ist groß, die Konfliktwahrscheinlichkeit ist am höchsten und die Parallelität ist am niedrigsten

Sperre auf Zeilenebene: hoher Overhead, langsame Sperre, Deadlock tritt auf, die Sperrgranularität ist gering , und Sperrkonflikte treten auf. Die geringste Wahrscheinlichkeit und die höchste Parallelität. Die Seitensperre liegt zwischen den ersten beiden. Es kommt zu einem Deadlock 🎜>
Nur ​​aus Sicht der Sperren: Sperren auf Tabellenebene eignen sich besser für Anwendungen, die hauptsächlich auf Abfragen basieren und nur eine kleine Datenmenge gemäß Indexbedingungen aktualisieren, z. B. Sperren auf Zeilenebene Geeigneter für Anwendungen mit einer großen Anzahl gleichzeitiger Aktualisierungen basierend auf Indexbedingungen und einer kleinen Anzahl unterschiedlicher Daten sowie für Anwendungen mit nur gleichzeitigen Abfragen, z. B. einige Online-Transaktionsverarbeitungssysteme (OLTP).

MySQL-Sperren auf Tabellenebene haben zwei Modi: Tabellen-gemeinsame Lesesperre (Table Read Lock) und tabellenexklusive Schreibsperre (Table Write Lock).

Tabelle sperren

1. Gemeinsame Lesesperre hinzufügen

Tabellennamen sperren

2. Entsperren

Tabellen entsperren;

3. Exklusive Schreibsperre für die Tabelle

Schreiben des Tabellennamens sperren;

Hinweis:

Der Lesevorgang der MyISAM-Tabelle blockiert keine anderen A Die Leseanforderung eines Benutzers für dieselbe Tabelle blockiert Anforderungen für dieselbe Tabelle. Eine Schreiboperation für die MyISAM-Tabelle blockiert die Lese- und Schreiboperationen anderer Benutzer für dieselbe Tabelle. Zeit und Schreibvorgänge sind seriell! Wenn ein Thread eine Schreibsperre für eine Tabelle erhält, kann nur der Thread, der die Sperre hält, die Tabelle aktualisieren. Lese- und Schreibvorgänge von anderen Threads warten, bis die Sperre aufgehoben wird.

Eine SESSION verwendet den Befehl „Tabelle sperren“, um die Tabelle abzufragen. Bei der Aktualisierung oder dem gleichzeitigen Zugriff auf andere Tabellen wird jedoch ein Fehler angezeigt Fragen Sie die Datensätze in der Tabelle ab, aber beim Aktualisieren kommt es zu einer Sperrwartezeit.

Das Obige ist der Inhalt von MySQL Advanced Nine - MyISAM Table Lock (Shared Read Lock). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


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