Heim >Datenbank >MySQL-Tutorial >Sperrproblem in MySQL
Sperrproblem
13.1 Sperrenwartestatus abrufen
Sie können den Tabellensperrenkonflikt auf dem System analysieren, indem Sie die Statusvariablen table_locks_waited und table_locks_immediate überprüfen:
mysql> show status like 'Table%';
+ ------------+---------+
|
+------------+----------+
| 105 |.
|. Table_locks_waited |
+------------ -- -+
2 Zeilen im Satz (0,00 Sek.)
Sie können den Zeilensperrkonflikt auf dem System analysieren, indem Sie die Statusvariable Innodb_row_lock überprüfen:
mysql> show status like 'innodb_row_lock%';
+ ------------+------- -- -+
|. Variablenname |.
+-------------------- -----------+---------+
|. Innodb_row_lock_time | |
|. Innodb_row_lock_time_max |. 845 |
|. ----------- +----------+
5 Zeilen im Satz (0,00 Sek.)
Außerdem für Tabellen vom Typ Innodb, falls Sie dies überprüfen müssen Um den aktuellen Sperrwartestatus anzuzeigen, können Sie InnoDB-Monitore festlegen und dann „Innodb-Status anzeigen“ verwenden. Die Einstellungsmethode lautet:
CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;
Der Monitor kann durch Ausgabe von gestoppt werden Folgende Anweisung:
DROP TABLE innodb_monitor;
Überwachung einrichten Nach der Installation des Servers werden im Anzeigeinhalt von show innodb status detaillierte Informationen über die aktuell wartende Sperre angezeigt, einschließlich Tabellenname, Sperrtyp und Sperrdatensatz Status usw., um die weitere Analyse und Problembestimmung zu erleichtern. Nach dem Öffnen des Monitors wird der überwachte Inhalt standardmäßig alle 15 Sekunden im Protokoll aufgezeichnet. Wenn er über einen längeren Zeitraum geöffnet wird, wird die .err-Datei sehr groß. Nachdem wir die Ursache des Problems bestätigt haben Denken Sie daran, die Überwachungstabelle zu löschen, um sie zu schließen. Oder starten Sie den Server mit der Option --console, um das Schreiben der Protokolldatei zu deaktivieren.
13.2 Wann Tabellensperren verwendet werden sollten
Sperren auf Tabellenebene sind Sperren auf Zeilenebene in den folgenden Situationen überlegen:
1. Viele Operationen sind Tabellenlesevorgänge.
2. Lesen und aktualisieren Sie einen streng bedingten Index, wenn Aktualisierungen oder Löschungen mithilfe eines separaten Indexes gelesen werden können:
3. UPDATE tbl_name SET columns=value WHERE unique_key_col=key_value;
4. DELETE FROM tbl_name WHERE unique_key_col=key_value;
5. SELECT- und INSERT-Anweisungen werden gleichzeitig ausgeführt, es gibt jedoch nur wenige UPDATE- und DELETE-Anweisungen.
6. Viele Tabellenscans und GROUP BY-Operationen für die gesamte Tabelle, aber keine Tabellenschreibvorgänge.
13.3 Wann werden Zeilensperren verwendet? Vorteile der Sperre auf Zeilenebene:
1 Es gibt nur wenige Sperrkonflikte, wenn in vielen Threads auf verschiedene Zeilen zugegriffen wird.
2. Nur kleine Änderungen beim Zurücksetzen.
3. Eine einzelne Reihe kann für längere Zeit gesperrt werden.
Nachteile der Sperrung auf Zeilenebene:
1. Sie beansprucht mehr Speicher als die Sperrung auf Seiten- oder Tabellenebene.
2. Bei Verwendung für große Teile einer Tabelle langsamer als Sperren auf Seiten- oder Tabellenebene, da Sie mehr Sperren erwerben müssen.
3. Wenn Sie häufig GROUP BY-Vorgänge für die meisten Daten ausführen oder häufig die gesamte Tabelle scannen müssen, ist dies erheblich langsamer als bei anderen Sperren.
4. Durch die Unterstützung verschiedener Sperrtypen können Sie die Anwendung auch einfacher anpassen, da die Sperrkosten geringer sind als bei Sperren auf Zeilenebene.
Das Obige ist der Inhalt des Sperrproblems in MySQL. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn).