Vorteile der Verriegelung auf Tabellenebene

7

Welche Vorteile bietet das Sperren auf Tabellenebene, das von der MyISAM-Speicher-Engine verwendet wird? Das Sperren auf Zeilenebene bietet viele Vorteile wie gleichzeitige Aktualisierungen und Lesevorgänge, bei denen die Tabelle nicht gesperrt wird.

Bearbeiten Es wird allgemein angenommen, dass das Sperren auf Tabellenebene Deadlocks verhindert. Aber wie lohnt es sich, Deadlocks auf Kosten der Parallelität zu verhindern?

Rick James
quelle
Diese Diskussion enthält möglicherweise einige relevante Informationen für Sie.
Nick Chammas
In dieser Diskussion geht es um die Eigenschaften von MyISAM und InnoDB. Es gibt nichts über die Vorteile der Sperre auf Tabellenebene.
Rick James

Antworten:

5

MyISAM verfügt nicht über Deadlocks, aber Deadlocks sind in gewisser Weise eine Verbesserung gegenüber Sperren auf Tabellenebene.

Wenn Sie versuchen, aus einer gesperrten Tabelle EINFÜGEN / AKTUALISIEREN / LÖSCHEN, müssen Sie warten, bis sie verfügbar ist oder bis eine Zeitüberschreitung auftritt (standardmäßig 28800 Sekunden). Wenn Sie eine Sperren-Engine auf Zeilenebene blockieren, warten Sie etwas, wenn sie nicht frei ist und wenn der Server eine Art "Endlosschleife" erkennt - bei der 2 Verbindungen keine Zeile aufgeben -, werden beide Verbindungen schnell und schnell abgelehnt einen Deadlock geben.

Wenn Sie versuchen, Deadlocks zu beheben, würde ich vorschlagen, dass Sie sich die folgenden Dinge ansehen:

  • Tritt der Deadlock bei fehlerhaftem Code in einer Transaktion auf? Ist es wirklich notwendig, eine Zeile zu "halten", damit Sie Ihre Berechnung abschließen und aktualisieren können?
  • Gibt es einen Index für die Bedingung in Ihrer Erklärung? Andernfalls markiert InnoDB möglicherweise die gesamte Tabelle als auf eine Aktualisierung wartend.
  • Könnte es sein, dass die Festplatte auf dem Server die InnoDB-Änderungen nicht schnell genug festschreibt? Verursacht der Checkpoint-Vorgang auf dem Server Probleme / Verzögerungen bei InnoDB?
  • Liegt es an der automatischen Inkrementsperre? Wenn ja, sollten Sie sich vielleicht eine liberalere automatische Inkrementierung ansehen - Einstellung http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html (siehe auch Sperren auf Zeilenebene um einige der durch solche Änderungen verursachten Probleme zu lösen)
Jonathan
quelle
6

Da MySQL Abfragen für die Ausführung auf folgende Weise plant:

  • Schreibanforderungen (wie UPDATEs und DELETEs) haben Vorrang vor Leseanforderungen (SELECTs).
  • Der Server führt die FIFO-Schreibvorgänge aus (in der empfangenen Reihenfolge).

Was sind die Vorteile ?

Deadlocks können mit MyISAM niemals auftreten. Der MySQL-Server kann somit alle Konflikte verwalten, explizite (LOCK TABLEs) oder implizite (beliebige DML).

Solange eine MyISAM-Tabelle keine gelöschten oder aktualisierten Datensätze enthält, können gleichzeitige Einfügungen ungestraft erfolgen. Dies würde in der Tat INSERTs für eine Tabelle mit einer expliziten Lesesperre einschließen.

Für jede Tabelle mit Lücken würde das Ausführen von OPTIMIZE TABLE diese Lücken entfernen und wieder gleichzeitige Einfügungen ermöglichen.

Weitere Informationen finden Sie im Abschnitt "MySQL 5.0-Zertifizierungsstudienhandbuch" auf den Seiten 408-412, Abschnitt 29.2 .

RolandoMySQLDBA
quelle
Auf diese Weise wird niemals ein Deadlock auftreten, aber woher kommt sein Vorteil im Vergleich zu seinen Nachteilen wie keine Parallelität. Und bei hoher Last langsamer Durchsatz der Datenbank.
Rick James
2
@rickjames Der Vorteil von myisam liegt nicht in der Verwaltung von Updates. Es ist am besten in einer nicht schreibintensiven Situation.
Derek Downey
Leider verwenden viele Leute WordPress-, Drupal- und MoveableTypes-CMS, deren Standard immer MyISAM ist. Wenn jemand eine stark frequentierte Website hat, muss er sich von MyISAM entfernen. Andernfalls sollte MyISAM ausreichen.
RolandoMySQLDBA
@DTest richtig, aber selbst in leseintensiven Systemen, wie vorteilhaft ist es im Vergleich zum Sperren auf Zeilenebene?
Rick James
Selbst in einem lesesicheren System macht nur eine DELETE- oder UPDATE-Anweisung die Vorteile von MyISAM schnell ungültig.
RolandoMySQLDBA
3

Eine Tabellensperre (wie sie von MyISAM verwendet wird) ist frei von Deadlock- Problemen.

Derek Downey
quelle
Übrigens +1 für die erste Antwort beim Deadlocking !!!
RolandoMySQLDBA
3

Zwei Vorteile.

ein. Das Sperren von Tabellen ist ein Beispiel für einen Brute-Force-Algorithmus zur Lösung des Problems von Deadlocks. Brute Force funktioniert immer, für geeignete Werte von "funktioniert".

Ken Thompson, Miterfinder von Unix, soll das Epigramm „Im Zweifelsfall brutale Gewalt anwenden“ ausgesprochen haben. Er beabsichtigte dies wahrscheinlich nur als ernst, aber die Vorliebe des ursprünglichen Unix-Kernels für einfache, robuste und tragbare Algorithmen gegenüber spröden "intelligenten" Algorithmen scheint ein wesentlicher Faktor für den Erfolg dieses Betriebssystems gewesen zu sein. Wie so viele andere Kompromisse beim Software-Design ist die Wahl zwischen Brute Force und komplexer, fein abgestimmter Klugheit oft schwierig und erfordert sowohl technisches Geschick als auch feinfühliges ästhetisches Urteilsvermögen.

b. Sie werden zweifellos unterschiedliche Entscheidungen treffen, wenn Sie sowohl technisch versiertes als auch ästhetisches Urteilsvermögen erlangen. Dies hat keinen Einfluss auf die Gültigkeit von "a" oben.

Mike Sherrill 'Cat Recall'
quelle