Heim  >  Artikel  >  Datenbank  >  Allgemeine SQL-Anweisungen zur Datenbankoptimierung in MySQL (Zusammenfassungsfreigabe)

Allgemeine SQL-Anweisungen zur Datenbankoptimierung in MySQL (Zusammenfassungsfreigabe)

WBOY
WBOYnach vorne
2022-08-24 09:02:162125Durchsuche

Empfohlenes Lernen: MySQL-Video-Tutorial

1. ENGINES ANZEIGEN

Ausführungs-Engine und Standard-Engine anzeigen.

2.SHOW PROCESSLIST

SHOW PROCESSLIST ist sehr nützlich, um die Nutzung der aktuellen Datenbankverbindung und verschiedene Statusinformationen anzuzeigen. SHOW PROCESSLIST; Wenn Sie sie alle auflisten möchten, verwenden Sie bitte SHOW FULL PROCESSLIST; Sie wollen eine Aussage töten.

Benutzer

Zeigen Sie den aktuellen Benutzer an. Wenn Sie kein Root sind, zeigt dieser Befehl nur die SQL-Anweisungen innerhalb Ihrer Berechtigung an. State-Spalte und ihre Bedeutung, der von MySQL aufgelistete Status:
Host Zeigt an, von welcher IP und welchem ​​Port diese Anweisung gesendet wird. Kann verwendet werden, um den Benutzer zu verfolgen, der die problematische Aussage gepostet hat.
db Zeigt, mit welcher Datenbank dieser Prozess derzeit verbunden ist.
Befehl Zeigt den ausgeführten Befehl der aktuellen Verbindung an, normalerweise Ruhezustand, Abfrage und Verbindung.
Überprüfen der Tabelle Überprüfen der Datentabelle (dies erfolgt automatisch).
Das Schließen von Tabellen

bedeutet, geänderte Daten in der Tabelle auf die Festplatte zu schreiben und gleichzeitig aufgebrauchte Tabellen zu schließen. Dies ist ein schneller Vorgang. Sollte dies jedoch nicht der Fall sein, sollten Sie überprüfen, ob der Speicherplatz voll ist oder die Festplatte stark ausgelastet ist.
Ausgehend verbinden Der Replikations-Slave-Server stellt eine Verbindung zum Master-Server her.
Kopieren in die tmp-Tabelle auf der Festplatte Da der temporäre Ergebnissatz größer als tmp_table_size (Standard 16 MB) ist, wird die temporäre Tabelle vom Speicher in den Festplattenspeicher konvertiert, um Speicherplatz zu sparen.
Tmp-Tabelle erstellen Eine temporäre Tabelle erstellen, um einige Abfrageergebnisse zu speichern.
Löschen aus der Haupttabelle Der Server führt den ersten Teil eines Löschvorgangs für mehrere Tabellen durch und hat gerade die erste Tabelle gelöscht.

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 STATUS

SHOW 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( &#39;first_name&#39;, i );
			
		END IF;
		IF
			MOD ( i, 200 ) = 0 THEN
				
				SET k = CONCAT( &#39;last_name&#39;, i );
			
		END IF;
		IF
			MOD ( i, 50 ) = 0 THEN
				
				SET m = CONCAT( &#39;&#39;, 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:

TabelleTabellennameNicht_eindeutig Der einzigartige Index ist 0 und die anderen Indizes sind 1. Eindeutiger Index. SchlüsselnameIndexname bedeutet den gleichen Index und es handelt sich um einen gemeinsamen Index Index. Spaltensequenznummer, beginnend bei 1. Sie kann auch die Reihenfolge der Spalte im gemeinsamen Index angeben. Indexspaltenname, wenn es sich um einen gemeinsamen Index handelt Der Name einer bestimmten Spalte Wie es im Index gespeichert wird, bedeutet wahrscheinlich die Zeichenreihenfolge 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. NULL, wenn nicht komprimierte Spaltenlösung und komprimierte Tabellenlösung JAIndexstrukturtyp, häufige sind FULLTEXT, HASH, BTREE, RTREEComments
Seq_in_index
Spaltenname
Collation
Kardinalität
Gepackt
Index_type
Comment, Index_comment

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

Das obige ist der detaillierte Inhalt vonAllgemeine SQL-Anweisungen zur Datenbankoptimierung in MySQL (Zusammenfassungsfreigabe). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen