Sperren in MySQL anzeigen

Shraddha Paghdar 20 Juni 2023
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 Paghdar avatar Shraddha Paghdar avatar

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