Frage

Nach dem MySQL-Handbuch :

  

Bei großen Tabellen Tabellensperren sind oft besser als Zeilensperren,

Warum ist das? Ich würde davon ausgehen, dass Sperren auf Zeilenebene besser ist, denn wenn man auf einer größeren Tabelle sperren, sind Sie mehr Daten sperren.

War es hilfreich?

Lösung

aus der (pre-edit) Link

  

Langsamer als Seitenebene oder Sperren auf Tabellenebene, wenn sie auf einem großen Teil der Tabelle verwendet, weil Sie mehr Sperren erwerben müssen

eine Zeilenebene Sperre verwenden, wenn Sie nur eine Zeile oder zwei schlagen. Wenn Ihr Code schlägt viele oder unbekannte Zeilen, Stick mit Tabellensperre.

Andere Tipps

  • Zeilensperren mehr Speicher als Tabelle oder Seitensperren muss.

  • Haben Sie zu viele Schlösser mit Zeilensperren zu erwerben, die mehr Ressourcen aufwendet

http://www.devshed.com/ c / a / MySQL / MySQL-Optimierung-Teil-2 /

  • Vorteile von Sperren auf Zeilenebene:

    • Weniger Sperre kollidiert, wenn verschiedene Reihen in vielen Threads zugreifen.
    • Weniger Änderungen für Rollbacks.
    • Macht es möglich, eine einzelne Zeile eine lange Zeit zu sperren.
  • Nachteile von Sperren auf Zeilenebene:

    • nimmt mehr Speicher als Seitenebene oder Sperren auf Tabellenebene.
    • Ist langsamer als auf Seitenebene oder Sperren auf Tabellenebene, wenn sie auf einem großen Teil der Tabelle verwendet, weil Sie mehr Sperren erwerben müssen.
    • Ist auf jeden Fall viel schlechter als andere Schlösser, wenn Sie häufig GROUP tun BY-Operationen auf einem großen Teil der Daten oder wenn Sie oft die gesamte Tabelle scannen müssen.
    • Mit höherer Ebene Schlössern, können Sie leichter auch Sperren verschiedenen Typen abzustimmen unterstützen die Anwendung, weil das Schloss Overhead ist kleiner als für Zeilensperren.
  • Tabellensperren überlegen sind auf Seitenebene oder Zeilensperren in den folgenden Fällen:

    • Die meisten Anweisungen für die Tabelle sind liest.
    • Lesen und Updates auf strengen Schlüssel, in dem Sie eine Zeile aktualisieren oder löschen, die abgerufen werden können mit einem einzigen Schlüssel zu lesen: UPDATE tbl_name SET column=value WHERE unique_key_col=key_value; DELETE FROM tbl_name WHERE unique_key_col=key_value;
    • mit gleichzeitigen INSERT-Anweisungen kombiniert SELECT, und nur sehr wenig UPDATE und DELETE-Anweisungen.
    • Viele Scans oder GROUP BY-Operationen auf die gesamte Tabelle ohne Schriftsteller.

A Zeile Sperre auf Tabellenebene ist besser für einen großen Tisch, wo wichtige Datenänderungen stattfinden. Auf diese Weise kann das System auf dem Tisch mit einer einzigen Sperre kämpfen, anstatt mit Gazillion Schlössern (ein für jede Zeile) zu behandeln.

Die RDBMS eskaliert automatisch Ebenen intern verriegelt wird.

  

Tabellensperren viele Sitzungen ermöglichen aus einer Tabelle in der gleichen Zeit zu lesen

     

eine sehr hohe Sperrgeschwindigkeit zu erreichen, verwendet MySQL Tabellensperren

„Ich würde davon ausgehen, dass Sperren auf Zeilenebene besser ist, weil“ [weniger Daten sperrt].

First „besser“ ist schlecht in dieser Seite definiert. Es scheint, dass bessere Mittel „schneller“.

Sperren auf Zeilenebene können nicht (im Allgemeinen) schneller wegen des Anstoßes für Schlösser. Sperren jede Zeile eines großen Ergebnismenge bedeutet, die sehr reale Möglichkeit eines Konflikt mit einer anderen großen Ergebnismenge Abfrage und ein Rollback.

In der Regel, wenn Sie eine Menge Daten sperren müssen dann 1-Sperre auf einem großen Tisch ist billiger als ein ganzes Bündel von Zeilenebene oder Seitensperren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top