MySQL-Optimierung, Sperren, Zusammenfassung häufiger Probleme

Wie finde ich langsames SQL?

Langsames SQL wird hauptsächlich auf zwei Arten überwacht:

  • Langsames Abfrageprotokoll : Aktivieren Sie das langsame Abfrageprotokoll von MySQL und analysieren Sie dann mit einigen Tools wie mysqldumpslow das entsprechende langsame Abfrageprotokoll. Natürlich bieten die meisten Cloud-Anbieter jetzt visuelle Plattformen an.
  • Dienstüberwachung : Die Überwachung von langsamem SQL kann zur Geschäftsinfrastruktur hinzugefügt werden. Zu den gängigen Lösungen gehören Bytecode-Instrumentierung, Verbindungspoolerweiterung und ORM-Framework-Prozesse zur Überwachung und Warnung bei langsamem SQL, während der Dienst ausgeführt wird.

Welche Möglichkeiten gibt es, langsames SQL zu optimieren?

Vermeiden Sie unnötige Spalten

Dies ist zwar ein Klischee, kommt aber dennoch häufig vor. Bei SQL-Abfragen sollten Sie nur die erforderlichen Spalten abfragen und keine zusätzlichen Spalten einbeziehen. slect * Solches Schreiben sollte möglichst vermieden werden.

Paginierungsoptimierung

Wenn die Datenmenge relativ groß und das Paging umfangreich ist, muss eine Optimierung des Pagings in Betracht gezogen werden.

JOIN-Optimierung

Unterabfrage optimieren

Versuchen Sie, die Join-Anweisung zu verwenden, um die Unterabfrage zu ersetzen, da es sich bei der Unterabfrage um eine verschachtelte Abfrage handelt und die verschachtelte Abfrage eine neue temporäre Tabelle erstellt und die Erstellung und Zerstörung der temporären Tabelle eine bestimmte Menge an Systemressourcen in Anspruch nimmt bestimmte Zeitspanne. Gleichzeitig haben Unterabfragen, die größere Ergebnismengen zurückgeben, einen größeren Einfluss auf die Abfrageleistung.

Kleiner Tisch treibt großen Tisch an

Bei der Durchführung verwandter Abfragen muss eine kleine Tabelle verwendet werden, um die große Tabelle anzusteuern, da MySQL während des zugehörigen Prozesses intern die treibende Tabelle durchläuft und dann eine Verbindung zur getriebenen Tabelle herstellt.

Beim Left Join ist beispielsweise die linke Tabelle die treibende Tabelle. Tabelle A ist kleiner als Tabelle B, sodass die Anzahl der Verbindungsaufbauten geringer ist und die Abfragegeschwindigkeit beschleunigt wird.

 select name from A left join B ;

Fügen Sie redundante Felder entsprechend hinzu

Das Hinzufügen redundanter Felder kann eine große Anzahl von Join-Tabellenabfragen reduzieren, da die Leistung von Join-Tabellenabfragen für mehrere Tabellen sehr gering ist. Daher können redundante Felder entsprechend hinzugefügt werden, um zugehörige Abfragen für mehrere Tabellen zu reduzieren. Dies ist eine Optimierung, die Platz spart für Zeit. Strategie

Vermeiden Sie die Verwendung von JOIN, um zu viele Tabellen zu verknüpfen

„Alibaba Java Development Manual“ legt fest, dass Sie nicht mehr als drei Tabellen verknüpfen sollten. Erstens verringern zu viele Verknüpfungen die Abfragegeschwindigkeit und zweitens belegt der Verknüpfungspuffer mehr Speicher.

Wenn es unvermeidbar ist, mehrere Tabellen zu verknüpfen, können Sie erwägen, Datenheterogenität für Abfragen in ES zu verwenden.

Welche Arten von Sperren gibt es in MySQL? Listen Sie sie auf?

 

Bei Aufteilung nach Sperrgranularität gibt es die folgenden drei Typen:

  • Tabellensperre: geringer Overhead, schnelle Sperre; starke Sperrkraft, hohe Wahrscheinlichkeit eines Sperrkonflikts, geringste Parallelität; kein Deadlock.
  • Zeilensperre: hoher Overhead, langsame Sperre; Deadlock kann auftreten; geringe Sperrgranularität, geringe Wahrscheinlichkeit eines Sperrenkonflikts und hohe Parallelität.
  • Seitensperre: Die Kosten und die Sperrgeschwindigkeit liegen zwischen Tabellensperren und Zeilensperren; es kann zu Deadlocks kommen; die Sperrgranularität liegt zwischen Tabellensperren und Zeilensperren und die Parallelität ist durchschnittlich.

In Bezug auf die Kompatibilität gibt es zwei Arten:

  • Die gemeinsame Sperre (S-Sperre), auch Lesesperre (Lesesperre) genannt, blockiert sich nicht gegenseitig.
  • Exklusive Sperre (X-Sperre), auch Schreibsperre (Schreibsperre) genannt, exklusive Sperre blockiert. Innerhalb eines bestimmten Zeitraums kann nur eine Anforderung das Schreiben durchführen und verhindert, dass andere Sperren die geschriebenen Daten lesen.

Verstehen Sie das optimistische und das pessimistische Sperren von MySQL?

  • Pessimistische Parallelitätskontrolle:

Pessimistische Sperren gehen davon aus, dass die durch sie geschützten Daten äußerst unsicher sind und jederzeit geändert werden können. Nachdem eine Transaktion eine pessimistische Sperre erhalten hat, kann keine andere Transaktion die Daten ändern und kann nur auf die Freigabe der Sperre warten. Kann ausgeführt werden.

Zeilensperren, Tabellensperren, Lesesperren und Schreibsperren in der Datenbank sind allesamt pessimistische Sperren.  

  • Optimistische Parallelitätskontrolle

Beim optimistischen Sperren wird davon ausgegangen, dass Datenänderungen nicht zu häufig auftreten.

Optimistisches Sperren wird normalerweise durch Hinzufügen einer Version (Version) oder eines Zeitstempels (Zeitstempel) zur Tabelle implementiert, wobei die Version am häufigsten verwendet wird.

Wenn eine Transaktion Daten aus der Datenbank abruft, ruft sie auch die Version der Daten (v1) ab. Wenn die Transaktion die Änderungen an den Daten abschließt und sie in der Tabelle aktualisieren möchte, ruft sie die vorherige Version v1 und die neueste Version ab Version in den Daten. Wenn im Vergleich zu Version v2 v1 = v2 ist, bedeutet dies, dass während des Datenänderungszeitraums keine anderen Transaktionen die Daten ändern. Zu diesem Zeitpunkt dürfen Transaktionen die Daten in der Tabelle ändern, und die Version wird geändert wird während der Änderung um 1 erhöht. Zeigt an, dass die Daten geändert wurden.

Wenn v1 nicht gleich v2 ist, bedeutet dies, dass die Daten während des Datenänderungszeitraums durch andere Transaktionen geändert wurden. Zu diesem Zeitpunkt dürfen die Daten nicht in der Tabelle aktualisiert werden. Die allgemeine Lösung besteht darin, den Benutzer zu benachrichtigen und zuzulassen sie werden wieder operiert. Im Gegensatz zum pessimistischen Sperren wird das optimistische Sperren normalerweise von Entwicklern implementiert.

Sind Sie schon einmal auf ein Deadlock-Problem in MySQL gestoßen und wie haben Sie es gelöst?

Die allgemeinen Schritte zur Fehlerbehebung bei Deadlocks lauten wie folgt:

(1) Überprüfen Sie das Deadlock-Protokoll und zeigen Sie den Innodb-Status der Engine an.

(2) Finden Sie den SQL-Deadlock heraus

(3) Analysieren Sie die SQL-Sperrsituation

(4) Simulieren Sie einen Deadlock-Vorfall

(5) Analysieren Sie Deadlock-Protokolle

(6) Analysieren Sie die Deadlock-Ergebnisse

Dies ist natürlich nur eine einfache Beschreibung des Prozesses. Tatsächlich sind Deadlocks in der Produktion sehr seltsam und es ist nicht so einfach, sie zu beheben und zu beheben.

 

 

Je suppose que tu aimes

Origine blog.csdn.net/pachupingminku/article/details/133375509
conseillé
Classement