3.SHOW STATUS LIKE 'InnoDB_row_lock%'
InnoDBs Sperrstatusvariable auf Zeilenebene.
Die Sperrstatusvariable auf Zeilenebene von InnoDB zeichnet nicht nur die Anzahl der Sperrwartezeiten auf, sondern auch die gesamte Sperrdauer, die durchschnittliche Dauer jedes Mals und die maximale Dauer Statusvariable, die die Anzahl der Sperren anzeigt, die derzeit auf die Sperre warten. Die Beschreibung jeder Statusmenge lautet wie folgt:
- InnoDB_row_lock_current_waits: die Anzahl der Sperren, die derzeit auf Sperren warten;
- InnoDB_row_lock_time: die gesamte Sperrzeit vom Systemstart bis jetzt;
- InnoDB_row_lock_time_avg: die durchschnittliche Wartezeit jedes Mal;
- InnoDB_row_lock_time_max: Die Zeit, die am häufigsten vom Systemstart bis jetzt gewartet wurde;
- InnoDB_row_lock_waits: Die Gesamtzahl der Wartezeiten vom Systemstart bis jetzt; durchschnittliche Wartezeit), InnoDB_row_lock_waits (Gesamtzahl der Wartezeiten) und InnoDB_row_lock_time (Gesamtwartezeit). Insbesondere wenn die Anzahl der Wartezeiten hoch ist und die Länge jeder Wartezeit nicht gering ist, müssen wir analysieren, warum es so viele Wartezeiten im System gibt, und dann mit der Festlegung eines Optimierungsplans basierend auf den Analyseergebnissen beginnen.
Wenn Sie feststellen, dass der Sperrkonflikt schwerwiegend ist, z. B. wenn die Werte von InnoDB_row_lock_waits und InnoDB_row_lock_time_avg relativ hoch sind, können Sie InnoDB-Monitore auch so einstellen, dass die Tabellen und Datenzeilen, in denen Sperrkonflikte auftreten, weiter beobachtet und die Gründe dafür analysiert werden der Sperrenkonflikt. 4.SHOW ENGINE INNODB STATUSSHOW ENGINE INNODB STATUS gibt viele Informationen aus, die derzeit vom InnoDB-Monitor überwacht werden. Die Ausgabe ist eine einzelne Zeichenfolge ohne Zeilen und Spalten. Der Inhalt ist jeweils in viele kleine Segmente unterteilt Das Segment entspricht Informationen zu verschiedenen Teilen der InnoDB-Speicher-Engine, von denen einige für InnoDB-Entwickler sehr nützlich sind. Es gibt einen Abschnitt „LETZT ERKENNTER DEADLOCK“, der die zuletzt aufgezeichneten Deadlock-Informationen enthält, wie im folgenden Fall gezeigt:
"(1) TRANSACTION" zeigt die Informationen der ersten Transaktion an;
"(1 ) WARTEN AUF DIE GEWÄHRUNG DIESER SPERRE“ zeigt die Sperrinformationen an, auf die die erste Transaktion wartet - „(2) TRANSAKTION“ zeigt die Informationen der zweiten Transaktion an;
- „(2) HÄLT DIE SPERRE(N)“ wird angezeigt die zweite Transaktion Die Sperrinformationen werden gehalten;
- „(2) WARTEN AUF DIE GEWÄHRUNG DIESER SPERRE“ zeigt die Sperrinformationen an, die auf die zweite Transaktion warten
- Die letzte Zeile gibt das Verarbeitungsergebnis an, z. B. „WIR ROLL BACK TRANSACTION (2 ), was einen Rollback anzeigt. Die zweite Transaktion.
-
- 5.SHOW INDEXS
SHOW INDEXS fragt die Indexinformationen in einer Tabelle ab: SHOW INDEXES FROM table_name;Die SQL zum Erstellen der Tabelle lautet wie folgt:CREATE TABLE contacts(
contact_id INT AUTO_INCREMENT,
first_name VARCHAR(100) NOT NULL comment 'first name',
last_name VARCHAR(100) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
PRIMARY KEY(contact_id),
UNIQUE(email),
INDEX phone(phone) ,
INDEX names(first_name, last_name) comment 'By first name and/or last name'
); Die gespeicherte Prozedur Fügt 50.000 Daten ein: CREATE PROCEDURE zqtest ( ) BEGIN
DECLARE
i INT DEFAULT 0;
DECLARE
j VARCHAR ( 100 ) DEFAULT 'first_name';
DECLARE
k VARCHAR ( 100 ) DEFAULT 'last_name';
DECLARE
l VARCHAR ( 100 ) DEFAULT 'email';
DECLARE
m VARCHAR ( 20 ) DEFAULT '11111111111';
SET i = 0;
START TRANSACTION;
WHILE
i < 50000 DO
IF
MOD ( i, 100 ) = 0 THEN
SET j = CONCAT( 'first_name', i );
END IF;
IF
MOD ( i, 200 ) = 0 THEN
SET k = CONCAT( 'last_name', i );
END IF;
IF
MOD ( i, 50 ) = 0 THEN
SET m = CONCAT( '', CAST( m as UNSIGNED) + i );
END IF;
INSERT INTO contacts ( first_name, last_name, email, phone )
VALUES
( j, k, CONCAT(l,i), m );
SET i = i + 1;
END WHILE;
COMMIT;
END; Das Ergebnis nach Verwendung von „Index aus Kontakten anzeigen“ lautet wie folgt:
Feldbeschreibung:
Tabelle
Tabellenname |
| Nicht_eindeutig
Der einzigartige Index ist 0 und die anderen Indizes sind 1. Eindeutiger Index. |
| Schlüsselname
Indexname bedeutet den gleichen Index und es handelt sich um einen gemeinsamen Index Index. |
Seq_in_index |
Spaltensequenznummer, beginnend bei 1. Sie kann auch die Reihenfolge der Spalte im gemeinsamen Index angeben.
|
Spaltenname |
Indexspaltenname, wenn es sich um einen gemeinsamen Index handelt Der Name einer bestimmten Spalte
|
Collation |
Wie es im Index gespeichert wird, bedeutet wahrscheinlich die Zeichenreihenfolge
|
Kardinalität |
Die Anzahl der verschiedenen Werte in einem Index wird auch „Kardinalität“ genannt Dieser Wert wird als Kardinalität bezeichnet. Die Statistik dieses Werts ist nicht unbedingt genau und kann mit ANALYZE TABLE korrigiert werden Anzahl der indizierten Zeichen.
|
Gepackt |
NULL, wenn nicht komprimierte Spaltenlösung und komprimierte Tabellenlösung JA
|
Index_type |
Indexstrukturtyp, häufige sind FULLTEXT, HASH, BTREE, RTREE
| Comment, Index_comment |
Comments
|
6.ALTER TABLE xx ENGINE = INNODB
Erstellen Sie die Tabelle einschließlich der Indexstruktur neu. Kann Indexseitenaufteilungen und Festplattenfragmentierung beseitigen, die beim Löschen von Daten entstehen.
7.ANALYZE TABLE
erstellt die Tabelle nicht neu, sondern zählt nur die Indexinformationen der Tabelle neu, ohne dass die Daten geändert werden. Dabei wird eine MDL-Lesesperre hinzugefügt. Es kann verwendet werden, um die Situation zu korrigieren, in der die Kardinalität des statistischen Index in „show index from tablename“ abnormale Daten ist.
Empfohlenes Lernen: MySQL-Video-Tutorial
|
|