Zusammenfassung: Analyse von zwei MySQL SQL-Anweisungssperren Schauen Sie sich an, welche Sperren den folgenden SQL-Anweisungen hinzugefügt werden SLQ1: Wählen Sie * aus t1, wobei ID = 10 ist; SQL2: Löschen aus t1, wo ID = 10; (1) Ist die ID ein Primärschlüssel? (2) Wie hoch ist der Isolationsgrad des aktuellen Systems? (3) Wenn die ID-Spalte nicht der Primärschlüssel ist, gibt es einen Index für die ID-Spalte? (4) Wenn es einen Sekundärindex für die Spalte „ID“ gibt, handelt es sich bei diesem Index um einen Sekundärindex? (5) Was sind die Ausführungspläne der beiden SQL-Anweisungen? Indexscan oder vollständiger Tabellenscan Der eigentliche Ausführungsplan muss auf der Ausgabe von MySQL basieren Kombination 1: ID-Spalte ist der Primärschlüssel, RC-Isolationsebene Kombination 2: ID-Spalte ist ein sekundärer eindeutiger Index, RC-Isolationsebene Kombination 3: ID-Spalte ist ein sekundärer nicht eindeutiger Index, RC-Isolationsebene Kombination 4: ID-Spalte hat keinen Index, RC-Isolationsebene Kombination 5: ID-Spalte ist der Primärschlüssel, RR-Isolationsebene Kombination 6: ID-Spalte ist ein sekundärer eindeutiger Index, RR-Isolationsebene Kombination 7: ID-Spalte ist ein sekundärer nicht eindeutiger Index, RR-Isolationsebene Kombination 8: Es gibt keinen Index für die ID-Spalte, RR-Isolationsebene Serialisierbare Isolationsebene Auf der Isolationsebene RR RC ist SQL1: select nicht gesperrt und es wird Snapshot Read verwendet. Im Folgenden wird nur die Sperrung von SQL2: delete besprochen. Kombination 1: ID-Primärschlüssel + RC ---TRANSAKTION 1286310, AKTIV 9 Sek 2 Sperrstruktur(en), Heap-Größe 360, 1 Zeilensperre(n), Undo-Log-Einträge 1 MySQL-Thread-ID 341, OS-Thread-Handle 0x7f4d540d0700, Abfrage-ID 4510972, Localhost-Root wird bereinigt TABELLENSPERRE Tabelle `test`.`t1` TRX-ID 1286310 Sperrmodus IX Datensatzsperren, Speicherplatz-ID 29, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t1“, TRX-ID 1286310, Sperrmodus X sperrt Datensatz, aber nicht Lücke MySQL ---TRANSAKTION 5936, AKTIV 171 Sek. 2 Sperrstruktur(en), Heapgröße 360, 1 Zeilensperre(n), Undo-Logeinträge 1 MySQL-Thread-ID 2, OS-Thread-Handle 0x7f5677201700, Abfrage-ID 364, Localhost-Root TABELLENSPERRE Tabelle `test`.`t1` trx id 5936 Sperrmodus IX Datensatzsperren, Speicherplatz-ID 6, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t1“, TRX-ID 5936, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperre, Heap Nr. 5 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 4; Hex 8000000a; aufsteigend ;; 1: Länge 6; Hex 000000001730; aufsteigend 0;; 2: Länge 7; Hex 26000001550110; aufsteigend & U ;; 3: Länge 1; Hex 61; aufsteigend a;; Kombination 2: ID eindeutiger Index + RC ---TRANSAKTION 1286327, AKTIV 3 Sek. 3 Sperrstruktur(en), Heapgröße 360, 2 Zeilensperre(n), Undo-Logeinträge 1 MySQL-Thread-ID 344, OS-Thread-Handle 0x7f4d5404e700, Abfrage-ID 4510986, Localhost-Root wird bereinigt TABELLENSPERRE Tabelle `test`.`t2` TRX-ID 1286327 Sperrmodus IX Datensatzsperren Speicherplatz-ID 30 Seitennummer 4 n Bits 80 Index `id` der Tabelle `test`.`t2` TRX-ID 1286327 Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperren, Speicherplatz-ID 30, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t2“, TRX-ID 1286327, Sperrmodus X sperrt Datensatz, aber nicht Lücke MySQL ---TRANSAKTION 5938, AKTIV 3 Sek. 3 Sperrstruktur(en), Heap-Größe 360, 2 Zeilensperre(n), Undo-Log-Einträge 1 MySQL-Thread-ID 2, OS-Thread-Handle 0x7f5677201700, Abfrage-ID 374, Localhost-Root TABELLENSPERRE Tabelle `test`.`t2` trx id 5938 Sperrmodus IX Datensatzsperren, Speicherplatz-ID 7, Seitennummer 4, n Bits 80, Index „ID“ der Tabelle „test“. „t2“, TRX-ID 5938, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperre, Heap Nr. 7 PHYSIKALISCHER DATENSATZ: n_Felder 2; kompaktes Format; Infobits 32 0: Länge 4; Hex 8000000a; aufsteigend ;; 1: Länge 1; Hex 64; aufsteigend d;; Datensatzsperren, Speicherplatz-ID 7, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t2“ TRX-ID 5938, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperre, Heap Nr. 7 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 64; aufsteigend d;; 1: Länge 6; Hex 000000001732; aufsteigend 2;; 2: Länge 7; Hex 27000001560110; aufsteigend ' V ;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Kombination 3: ID nicht eindeutiger Index + RC ---TRANSAKTION 1286339, AKTIV 9 Sek 3 Sperrstruktur(en), Heapgröße 360, 4 Zeilensperre(n), Undo-Logeinträge 2 MySQL-Thread-ID 347, OS-Thread-Handle 0x7f4b67fff700, Abfrage-ID 4511015, Localhost-Root wird bereinigt TABELLENSPERRE Tabelle `test`.`t3` TRX-ID 1286339 Sperrmodus IX Datensatzsperren, Speicherplatz-ID 31, Seitennummer 4, n Bits 80, Index „idx_key“ der Tabelle „test“. „t3“, TRX-ID 1286339, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperren, Speicherplatz-ID 31, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t3“, TRX-ID 1286339, Sperrmodus X sperrt Datensatz, aber nicht Lücke MySQL ---TRANSAKTION 5940, AKTIV 3 Sek. 3 Sperrstruktur(en), Heapgröße 360, 4 Zeilensperre(n), Undo-Logeinträge 2 MySQL-Thread-ID 2, OS-Thread-Handle 0x7f5677201700, Abfrage-ID 378, Localhost-Root TABELLENSPERRE Tabelle `test`.`t3` TRX-ID 5940 Sperrmodus IX Datensatzsperren, Speicherplatz-ID 8, Seitennummer 4, n Bits 80, Index „idx_key“ der Tabelle „test“. „t3“, TRX-ID 5940, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperre, Heap Nr. 4 PHYSIKALISCHER DATENSATZ: n_Felder 2; kompaktes Format; Infobits 32 0: Länge 4; Hex 8000000a; aufsteigend ;; 1: Länge 1; Hex 62; aufsteigend b;; Datensatzsperre, Heap Nr. 5 PHYSIKALISCHER DATENSATZ: n_Felder 2; kompaktes Format; Infobits 32 0: Länge 4; Hex 8000000a; aufsteigend ;; 1: Länge 1; Hex 64; aufsteigend d;; Datensatzsperren, Speicherplatz-ID 8, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t3“, TRX-ID 5940, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperre, Heap Nr. 4 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 62; aufsteigend b;; 1: Länge 6; Hex 000000001734; aufsteigend 4;; 2: Länge 7; Hex 28000001570110; aufsteigend ( W ;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Datensatzsperre, Heap Nr. 5 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 64; aufsteigend d;; 1: Länge 6; Hex 000000001734; aufsteigend 4;; 2: Länge 7; Hex 28000001570132; aufsteigend ( W 2;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Kombination 4: Kein ID-Index + RC ---TRANSAKTION 1286373, AKTIV 5 Sek. 2 Sperrstruktur(en), Heapgröße 360, 2 Zeilensperre(n), Undo-Logeinträge 2 MySQL-Thread-ID 348, OS-Thread-Handle 0x7f4d54193700, Abfrage-ID 4511037, Localhost-Root wird bereinigt TABELLENSPERRE Tabelle `test`.`t4` TRX-ID 1286373 Sperrmodus IX Datensatzsperren, Speicherplatz-ID 33, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t4“, TRX-ID 1286373, Sperrmodus X sperrt Datensatz, aber nicht Lücke MySQL ---TRANSAKTION 5946, AKTIV 2 Sek. 2 Sperrstruktur(en), Heapgröße 360, 2 Zeilensperre(n), Undo-Logeinträge 2 MySQL-Thread-ID 2, OS-Thread-Handle 0x7f5677201700, Abfrage-ID 382, Localhost-Root TABELLENSPERRE Tabelle `test`.`t4` trx id 5946 Sperrmodus IX Datensatzsperren, Speicherplatz-ID 9, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t4“ TRX-ID 5946, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperre, Heap Nr. 3 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 62; aufsteigend b;; 1: Länge 6; Hex 00000000173a; aufsteigend :;; 2: Länge 7; Hex 2b0000015a0110; asc + Z ;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Datensatzsperre, Heap Nr. 5 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 64; aufsteigend d;; 1: Länge 6; Hex 00000000173a; aufsteigend :;; 2: Länge 7; Hex 2b0000015a012c; Asc + Z,;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Kombination 5: ID-Primärschlüssel + RR Kombination 6: ID eindeutiger Index + RR Kombination 7: ID nicht eindeutiger Index + RR ---TRANSAKTION 1592633, AKTIV 24 Sek. 4 Sperrstruktur(en), Heap-Größe 1184, 5 Zeilensperre(n), Undo-Log-Einträge 2 MySQL-Thread-ID 794, OS-Thread-Handle 0x7f4d5404e700, Abfrage-ID 7801799, Localhost-Root wird bereinigt Trx-Lese-Ansicht sieht keine TRX mit ID >= 1592634, sieht < 1592634 TABELLENSPERRE Tabelle `test`.`t3` TRX-ID 1592633 Sperrmodus IX Datensatzsperren, Bereichs-ID 31, Seitennummer 4, n Bits 80, Index „idx_key“ der Tabelle „test“. „t3“, TRX-ID 1592633, Sperrmodus X Datensatzsperren, Speicherplatz-ID 31, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t3“, TRX-ID 1592633, Sperrmodus X sperrt Datensatz, aber nicht Lücke RECORD LOCKS Bereichs-ID 31 Seitennummer 4 n Bits 80 Index `idx_key` der Tabelle `test`.`t3` trx ID 1592633 lock_mode X sperrt Lücke vor rec MySQL ---TRANSAKTION 5985, AKTIV 7 Sek. 4 Sperrstruktur(en), Heap-Größe 1184, 5 Zeilensperre(n), Undo-Log-Einträge 2 MySQL-Thread-ID 12, OS-Thread-Handle 0x7f56770fd700, Abfrage-ID 500, Localhost-Root TABELLENSPERRE Tabelle `test`.`t3` trx id 5985 Sperrmodus IX Datensatzsperren, Bereichs-ID 8, Seitennummer 4, n Bits 80, Index „idx_key“ der Tabelle „test“. „t3“, TRX-ID 5985, Sperrmodus X Datensatzsperre, Heap Nr. 4 PHYSIKALISCHER DATENSATZ: n_Felder 2; kompaktes Format; Infobits 32 0: Länge 4; Hex 8000000a; aufsteigend ;; 1: Länge 1; Hex 64; aufsteigend d;; Datensatzsperre, Heap Nr. 5 PHYSIKALISCHER DATENSATZ: n_Felder 2; kompaktes Format; Infobits 32 0: Länge 4; Hex 8000000a; aufsteigend ;; 1: Länge 1; Hex 62; aufsteigend b;; Datensatzsperren, Speicherplatz-ID 8, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t3“, TRX-ID 5985, Sperrmodus X sperrt Datensatz, aber nicht Lücke Datensatzsperre, Heap Nr. 4 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 64; aufsteigend d;; 1: Länge 6; Hex 000000001761; aufsteigend a;; 2: Länge 7; Hex 3f0000016d0132; aufsteigend ? m 2;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Datensatzsperre, Heap Nr. 5 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 62; aufsteigend b;; 1: Länge 6; Hex 000000001761; aufsteigend a;; 2: Länge 7; Hex 3f0000016d0110; aufsteigend? m ;; 3: Länge 4; Hex 8000000a; aufsteigend ;; RECORD LOCKS Bereichs-ID 8 Seitennummer 4 n Bits 80 Index `idx_key` der Tabelle `test`.`t3` trx ID 5985 lock_mode X sperrt Lücke vor rec Datensatzsperre, Heap Nr. 8 PHYSIKALISCHER DATENSATZ: n_Felder 2; kompaktes Format; Infobits 0 0: Länge 4; Hex 8000000b; aufsteigend ;; 1: Länge 1; Hex 66; aufsteigend f;; Kombination 8: ID ohne Index + RR ---TRANSAKTION 1592639, AKTIV 4 Sek. 2 Sperrstruktur(en), Heapgröße 360, 7 Zeilensperre(n), Undo-Logeinträge 2 MySQL-Thread-ID 794, OS-Thread-Handle 0x7f4d5404e700, Abfrage-ID 7801804, Localhost-Root wird bereinigt TABELLENSPERRE Tabelle `test`.`t4` TRX-ID 1592639 Sperrmodus IX Datensatzsperren, Bereichs-ID 33, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t4“, TRX-ID 1592639, Sperrmodus X MySQL ---TRANSAKTION 6000, AKTIV 3 Sek. 2 Sperrstruktur(en), Heapgröße 360, 7 Zeilensperre(n), Undo-Logeinträge 2 MySQL-Thread-ID 12, OS-Thread-Handle 0x7f56770fd700, Abfrage-ID 546, Localhost-Root TABELLENSPERRE Tabelle `test`.`t4` trx id 6000 Sperrmodus IX Datensatzsperren, Bereichs-ID 9, Seitennummer 3, n Bits 80, Index „PRIMARY“ der Tabelle „test“. „t4“, TRX-ID 6000, Sperrmodus X Datensatzsperre, Heap Nr. 1 PHYSIKALISCHER DATENSATZ: n_Felder 1; kompaktes Format; Infobits 0 0: Länge 8; Hex 73757072656d756d; Asc Supremum;; Datensatzsperre, Heap Nr. 2 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 0 0: Länge 1; Hex 61; aufsteigend a;; 1: Länge 6; Hex 000000001722; aufsteigend ";; 2: Länge 7; Hex 9e0000014e0110; aufsteigend N ;; 3: Länge 4; Hex 8000000f; aufsteigend ;; Datensatzsperre, Heap Nr. 3 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 62; aufsteigend b;; 1: Länge 6; Hex 000000001770; aufsteigend p;; 2: Länge 7; Hex 47000001730110; aufsteigend G s ;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Datensatzsperre, Heap Nr. 4 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 0 0: Länge 1; Hex 63; aufsteigend c;; 1: Länge 6; Hex 000000001722; aufsteigend ";; 2: Länge 7; Hex 9e0000014e0122; aufsteigend N ";; 3: Länge 4; Hex 80000006; aufsteigend ;; Datensatzsperre, Heap Nr. 5 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 32 0: Länge 1; Hex 64; aufsteigend d;; 1: Länge 6; Hex 000000001770; aufsteigend p;; 2: Länge 7; Hex 4700000173012c; aufsteigend G s ,;; 3: Länge 4; Hex 8000000a; aufsteigend ;; Datensatzsperre, Heap Nr. 6 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 0 0: Länge 1; Hex 66; aufsteigend f;; 1: Länge 6; Hex 000000001722; aufsteigend ";; 2: Länge 7; Hex 9e0000014e0134; aufsteigend N 4;; 3: Länge 4; Hex 8000000b; aufsteigend ;; Datensatzsperre, Heap Nr. 7 PHYSIKALISCHER DATENSATZ: n_Felder 4; kompaktes Format; Infobits 0 0: Länge 2; hex 7a7a; asc zz;; 1: Länge 6; Hex 000000001722; aufsteigend ";; 2: Länge 7; Hex 9e0000014e013d; aufsteigend N =;; 3: Länge 4; Hex 80000002; aufsteigend ;; Kombination 9: Serialisierbar Für das oben erwähnte einfache SQL, der letzte Fall: Serialisierbare Isolationsebene. Für SQL2: „delete from t1 where id = 10;“ ist die serialisierbare Isolationsebene genau die gleiche wie die wiederholbare Lese-Isolationsebene und wird deshalb hier nicht eingeführt. Die serialisierbare Isolationsebene betrifft SQL1: select * from t1 where id = 10; Diese SQL-Anweisung wird als Snapshot gelesen und ist auf den Isolationsebenen RC und RR nicht gesperrt. Auf der serialisierbaren Isolationsebene fügt SQL1 jedoch eine Lesesperre hinzu, was bedeutet, dass keine Snapshot-Lesevorgänge mehr möglich sind und die MVCC-Parallelitätssteuerung auf Lock-Based CC herabgestuft wird. Fazit: In MySQL/InnoDB ist das sogenannte Lesen ohne Sperren nicht auf alle Situationen anwendbar, sondern hängt mit der Isolationsebene zusammen. Auf der Isolationsebene „Serialisierbar“ ist das Lesen ohne Sperren nicht mehr gültig und alle Lesevorgänge sind aktuelle Lesevorgänge. Das könnte Sie auch interessieren:
|
<<: So konfigurieren Sie den NAT-Modus für virtuelle VMware-Maschinen
>>: js implementiert dynamisch Operationen zum Hinzufügen und Löschen von Tabellen
Aufschlag: # chkconfig --list Alle Systemdienste ...
Ergebnisse erzielen Implementierungscode html <...
In diesem Artikelbeispiel wird der spezifische Co...
Sie können über die besten visuellen Designfähigk...
Wie füge ich jedes Mal eine Ladeanimation hinzu, ...
Fragen zum Webdesign. Können Sie alle beantworten...
Einführung Einfach ausgedrückt ist tcpdump ein Pa...
Inhaltsverzeichnis 1. LVS-Lastausgleich 2. Grundl...
1. Einleitung Beim Schreiben einer Seite stoßen w...
Mit etwa Version 0.6 wurde Privileged in Docker e...
Ein n-stelliger Bestätigungscode, der aus Zahlen,...
In diesem Artikelbeispiel wird der spezifische Co...
Die Tabelle sieht wie folgt aus: HTML-Quellcode E...
Mit der Anweisung „Truncate table“ werden alle Da...
Auf Unix-ähnlichen Systemen wissen Sie möglicherw...