Frage

So nach Leistung in PDO / PHP / MySQL zu lesen: Transaktion im Vergleich zu direkten Ausführung in Bezug auf Performance-Probleme ich dachte ich habe einige Nachforschungen auf Tabellen in MySQL sperren.

http://dev.mysql.com/ doc / refman / 5.0 / de / table-locking.html

  

Tabellensperren ermöglicht viele Sitzungen   Lesen aus einer Tabelle zur gleichen Zeit,   aber wenn eine Sitzung will ein schreiben   Tabelle, muss zunächst exklusiv bekommen   Zugriff. Während des Updates alle anderen   Sitzungen, die diese zugreifen möchten   insbesondere Tabelle muss, bis die Wartezeit   Update durchgeführt wird.

Dieser Teil fiel mir vor allem, weil die meisten unserer Abfragen statt Einsätze sein Updates werden. Ich frage mich, ob man eine Tabelle foo erstellt, auf der alle Updates / Inserts wurden durchgeführt und dann eine Ansicht namens foo_view (eine Kopie von foo, oder vielleicht foo und eine Verknüpfung von mehreren anderen Tabellen und foo), auf dem alle wählt aufgetreten ist, würde noch diese Verriegelung Problem auftreten?

Das heißt, würde SELECT-Abfragen auf foo_view noch für ein Update bis Ende auf foo warten müssen?

Eine weitere kurze Frage meines Kollegen gefragt. Wirkt sich dies auf das Caching? D. h Wenn die SELECT-Cache gespeichert wird, wird es treffen die Cache und Rückkehr Ergebnisse, oder wird es für die Sperre warten zuerst fertig?

War es hilfreich?

Lösung

Ihre Ansicht wird die gleiche Verriegelung wie die zugrunde liegenden Tabellen erfahren.

Von der MySQL-Referenzseite auf Sperr :

  

MySQL gewährt Tabelle Schreibsperren als   folgt:

     
      
  1. Wenn es keine Sperren auf dem Tisch liegen, stellt eine Schreibsperre auf sich.
  2.   
  3. Ansonsten setzen die Sperranforderung in die Schreibsperre Warteschlange.
  4.   
     

gewährt MySQL-Tabelle Lesesperren als   folgt:

     
      
  1. Wenn es keine Schreibsperren auf dem Tisch sind, legen Sie eine Lesesperre auf sich.
  2.   
  3. Ansonsten setzt die Sperranforderung in der Lesesperre Warteschlange.
  4.   

Es ist erwähnenswert, dass diese auf dem Datenbank-Engine ab, die Sie verwenden. MyISAM werden die oben genannten Schritte und Schloss folgen die gesamte Tabelle (auch wenn es aufgeteilt in mehrere Partitionen ist), in dem ein Motor wie InnoDB wird stattdessen Sperren auf Zeilenebene tun.

Wenn Sie nicht das notwendige Performance-Benchmarks mit MyISAM erreichen und Sie haben gezeigt, Ihre Engpass über Updates auf Tabellensperren warten, würde ich vorschlagen, die Speicher-Engine der Tabelle in InnoDB zu ändern.

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