Wie soll ich die "Sperrzeit" im langsamen Abfrageprotokoll von MySQL interpretieren?

11

Ich versuche zu verstehen, wie die Sperrzeit für die Abfragen, die in unserem langsamen MySQL-Abfrageprotokoll angezeigt werden, am besten interpretiert werden kann.

Zum Beispiel, wenn eine UPDATE-Abfrage eine Sperrzeit von 10 Sekunden hat. Ich nehme an, es ist die Gesamtzeit, nachdem die Aktualisierungsabfrage die Sperre erhalten hat. Selbst wenn darauf gewartet wird, dass vorherige Auswahlabfragen abgeschlossen werden, die UPDATE-Aktion jedoch nicht selbst ausgeführt wird, sollte die Uhr ticken, da alle SELECT-Abfragen gesperrt werden, die nach der UPDATE-Abfrage anstehen.

Und wie wäre es mit den SELECT-Abfragesperren? Wie kommt es, dass einige ausgewählte Abfragen Sperrzeiten haben? Liegt es daran, dass eine UPDATE-Abfrage folgt, sodass eine Tabelle miteinander gesperrt wird?

Haluk
quelle

Antworten:

19

Das lock_timeProtokoll für langsame Abfragen gibt an, wie lange die Abfrage darauf gewartet hat, die Sperre zu erhalten, die sie ausführen muss. Zum Beispiel UPDATESbenötigen Abfragen eine Schreibsperre.

Die Sperre hängt auch von der Speicher-Engine ab, die Sie in der Tabelle verwenden. Beim Schreiben verwendet InnoDB die Sperre auf Zeilenebene und sperrt nur die Zeilen, die geändert werden. MyISAM sperrt die gesamte Tabelle, bis das Aktualisieren / Einfügen / Löschen abgeschlossen ist.

Das Sperren der gesamten Tabelle für MyISAM ist SELECTein wichtiger Grund dafür, dass Abfragen eine lock_time in Ihrem langsamen Abfrageprotokoll haben.

Derek Downey
quelle