Sperren in MySQL anzeigen
Im heutigen Beitrag lernen wir, wie man Sperren in MySQL anzeigt.
Sperren in MySQL anzeigen
Die Attribute einer Tabelle können geändert werden, indem der Tabelle ein MySQL-Lock
-Flag zugewiesen wird. Um zu verhindern, dass andere Sitzungen über einen bestimmten Zeitraum auf dieselbe Tabelle zugreifen, aktiviert MySQL eine Tabellensperre, die ein Client-Server zuweisen kann.
Ein Client kann eine MySQL-Sperre nur für seine Sitzung erlangen
oder freigeben
. Dies bedeutet, dass der Client nicht auf Sperren für eine andere Sitzung zugreifen oder Sperren freigeben kann, die von einer anderen Sitzung gehalten werden.
MySQL bietet zwei Arten von Sperren: Lesen
-Sperren und Schreiben
-Sperren.
LOCK TABLES table_name READ as alias_table_name
Dabei bezeichnet table_name
die Tabelle, auf die die Sperre angewendet werden soll. Wenn Sie eine Tabelle mit einem Alias sperren, müssen Sie diesen Alias in Ihren Anweisungen verwenden, um auf die gesperrte Tabelle zu verweisen.
Sie können keine Schreibaktion auf einer Tabelle ausführen, wenn die Sitzung die READ
-Sperre hat. Dies liegt an der Fähigkeit der READ
-Sperre, nur Daten aus der Tabelle zu lesen.
Keine anderen Sitzungen können Daten in die Tabelle schreiben, ohne die READ
-Sperre aufzuheben; daher werden sie alle daran gehindert. Bis wir die READ
-Sperre freigeben, treten die Schreiboperationen in einen Wartezustand ein.
Eindeutig benannte Sperren, die mit GET_LOCK()
erhalten wurden, werden als Ergebnis der MDL-Reimplementierung in der Tabelle Leistungsschema-Metadatensperren
angezeigt. Der Sperrname wird in der Spalte OBJECT_NAME
angezeigt, während die Spalte OBJECT_TYPE
USER LEVEL LOCK
angibt.
Mithilfe dieses Wissens können Sie die Abhängigkeiten von Metadatensperren zwischen Sitzungen verstehen. Sie können nicht nur sehen, auf welche Sperre eine Sitzung wartet, sondern auch, wer gerade die Kontrolle über diese Sperre hat.
Es ist nicht möglich, die Metadaten-Sperrtabelle zu ändern; es ist schreibgeschützt.
Betrachten Sie das folgende Beispiel, um die vorherige Idee besser zu verstehen.
SELECT GET_LOCK('alias_table_name', 10);
SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_TYPE='USER LEVEL LOCK'
Die erste Anweisung im vorherigen Beispiel ruft Daten für den angegebenen Sperrnamen ab. Der alias_table_name
gibt dabei den Namen der Sperre an und 10
steht für den Timeout.
Die Informationen werden aus der Tabelle metadata locks
abgerufen, wobei der Objekttyp in der zweiten Anweisung ein USER LEVEL LOCK
ist.
Führen Sie die obige Codezeile in jedem mit MySQL kompatiblen Browser aus. Es wird das folgende Ergebnis angezeigt:
+----------------------------------+
| GET_LOCK('alias_table_name', 10) |
+----------------------------------+
| 1 |
+----------------------------------+
1 row in set (0.00 sec)
*************************** 1. row ***************************
OBJECT_TYPE: USER LEVEL LOCK
OBJECT_SCHEMA: NULL
OBJECT_NAME: alias_table_name
OBJECT_INSTANCE_BEGIN: 139872019610944
LOCK_TYPE: EXCLUSIVE
LOCK_DURATION: EXPLICIT
LOCK_STATUS: GRANTED
SOURCE: item_func.cc:5481
OWNER_THREAD_ID: 35
OWNER_EVENT_ID: 3
1 row in set (0.00 sec)
Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.
LinkedIn