Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Tipps zur MySQL-Leistungsoptimierung zur Optimierung der Datenbank

Structured Query Language (SQL) ist eine spezielle Programmiersprache zum Speichern, Bearbeiten und Abrufen von Daten aus der Datenbank. Es hat Anwendungen in vielen relationalen Datenbanksystemen gefunden, darunter MySQL, Postgres, Oracle, SQL Server und andere.

Durch die Verwendung von SQL-Anweisungen können Entwickler problemlos verschiedene funktionale Datenbankoperationen wie das Erstellen, Aktualisieren und Löschen von Daten ausführen.

Da die Datenmengen wachsen und die Technologie immer komplexer wird, wird es immer wichtiger, MySQL-Datenbanken richtig zu optimieren, um Endbenutzererfahrung zu bieten und die Infrastrukturkosten zu senken. MySQL-Leistungsoptimierungstools können Datenbankexperten dabei helfen, Engpässe schnell zu erkennen, unzureichende Operationen durch eine Überprüfung von Abfrageausführungsplänen zu beheben und Ratespiele zu eliminieren.

Angesichts der zusätzlichen Komplexität wachsender Datenmengen und sich ständig ändernder Workloads sind jetzt eine Optimierung der Datenbankleistung und MySQL-Abfrageoptimierung erforderlich, um die Ressourcennutzung und die Systemleistung zu maximieren.

Es gibt mehrere Gründe, die das SQL-Tuning für Entwickler etwas komplex machen. Erstens erfordert es umfangreiches technisches Fachwissen, um verschiedene Ausführungspläne zu schreiben und zu verstehen. Das Schreiben sauberer und vollständiger SQL-Anweisungen liegt in der Verantwortung desjenigen, der sich gründlich damit auskennt.

Abgesehen von seiner Komplexität ist das Tuning sehr zeitaufwändig. Denn wenn Sie eine große Anzahl von SQL-Anweisungen zu sortieren haben, bringt es ein wenig Unsicherheit, herauszufinden, welche Anweisungen Sie optimieren müssen und welche Sie lassen sollten. Und während jede Anweisung anders ist, variiert auch ihr Tuning-Ansatz entsprechend ihrer jeweiligen Funktionalitäten.


Machen Sie sich bereit für das Core Web Vitals-Update

E-Book, um Ihre Website zu beschleunigen, bevor Sie Traffic verlieren.

Danke

Ihre Liste ist auf dem Weg in Ihren Posteingang.


In diesem Tutorial werde ich erörtern, wie Sie die MySQL-Leistung mithilfe einiger praktischer Tipps zur Leistungsoptimierung verbessern können. Sehen wir sie uns also unten im Detail an:

Die Vorteile der MySQL-Leistungsoptimierung

Der Hauptvorteil der Identifizierung des leistungstreibenden Faktors für die Datenbank ermöglicht es Ihnen, eine Überbereitstellung zu vermeiden und die Kosten zu senken, indem Sie Ihre Server richtig dimensionieren. Es gibt Ihnen auch Aufschluss darüber, ob das Verschieben von Datenspeicher oder das Hinzufügen von Serverkapazität zu einer Leistungsverbesserung führt oder nicht, und wenn ja, wie viel es sein wird.

Die Tuning-Datenbank für die Optimierung der MySQL-Abfrageleistung ist nicht mit blassen Herausforderungen verbunden. Sobald die Datenbank jedoch richtig eingestellt ist, liefert sie lohnende Leistungsergebnisse mit großartigen Funktionen. Es verringert nicht nur die unerwünschte Aufgabenlast, sondern optimiert auch die MySQL-Datenbank für einen schnelleren Datenabruf.

Das könnte Ihnen auch gefallen: PHP-Leistungstipps zur Optimierung Ihrer Websites

Optimieren Sie Abfragen mit den Richtlinien zur Optimierung von MySQL-Abfragen

Befolgen Sie diese Best Practices für Ihre MySQL-Leistungsoptimierung und Optimierung der Datenbankgeschwindigkeit.

Stellen Sie zunächst sicher, dass alle Prädikate in den Klauseln WHERE, JOIN, ORDER BY und GROUP BY indexiert sind. WebSphere Commerce legt großen Wert auf die Indexierung von Prädikaten, um die SQL-Leistung zu steigern. Denn eine unsachgemäße Indizierung von SQL-Abfragen kann Tabellenscans verursachen, die schließlich zu Sperrproblemen und anderen Problemen führen können.

Daher empfehle ich dringend, alle Prädikatspalten zu indizieren, damit die Datenbank eine MySQL-Abfrageoptimierung erfahren kann.

Das könnte Ihnen auch gefallen: Leitfaden zur Leistungsoptimierung von Laravel

Vermeiden Sie die Verwendung von Funktionen in Prädikaten

Die Datenbank verwendet keinen Index, wenn sie eine Funktion in der Spalte vordefiniert hat.

Zum Beispiel:

SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy

Aufgrund der Funktion UPPER() verwendet die Datenbank den Index auf COL1 nicht. Wenn es keine Möglichkeit gibt, diese Funktion in SQL zu vermeiden, müssen Sie einen neuen funktionsbasierten Index erstellen oder benutzerdefinierte Spalten in der Datenbank generieren, um die Leistung zu verbessern.

Vermeiden Sie die Verwendung eines Platzhalters (%) am Anfang eines Prädikats

Das Prädikat LIKE '%abc' bewirkt einen Full-Table-Scan. Zum Beispiel:

SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy

In den meisten Fällen führt diese Verwendung von Platzhaltern zu erheblichen Leistungseinschränkungen.

Vermeiden Sie unnötige Spalten in der SELECT-Klausel

Anstatt „SELECT *“ zu verwenden, geben Sie immer Spalten in der SELECT-Klausel an, um die MySQL-Leistung zu verbessern. Weil unnötige Spalten die Datenbank zusätzlich belasten und ihre Leistung sowie den gesamten systematischen Prozess verlangsamen.

Verwenden Sie, wenn möglich, einen inneren Join anstelle eines äußeren Joins

Verwenden Sie Outer Join nur, wenn es notwendig ist. Ihre unnötige Verwendung schränkt nicht nur die Datenbankleistung ein, sondern auch die Optimierungsoptionen für MySQL-Abfragen, was zu einer langsameren Ausführung von SQL-Anweisungen führt.

Verwenden Sie DISTINCT und UNION nur, wenn es notwendig ist

Die Verwendung der Operatoren UNION und DISTINCT ohne größeren Zweck führt zu unerwünschtem Sortieren und einer Verlangsamung der SQL-Ausführung. Anstelle von UNION bringt die Verwendung von UNION ALL mehr Effizienz in den Prozess und verbessert die MySQL-Leistung genauer.

Die ORDER BY-Klausel ist in SQL obligatorisch, wenn Sie ein sortiertes Ergebnis erwarten

Das Schlüsselwort ORDER BY sortiert die Ergebnismenge in vordefinierte Anweisungsspalten. Obwohl die Anweisung den Datenbankadministratoren Vorteile beim Abrufen der sortierten Daten bringt, wirkt sie sich auch geringfügig auf die Leistung bei der SQL-Ausführung aus. Weil die Abfrage zuerst die Daten sortieren muss, um die endgültige Ergebnismenge zu erzeugen, was eine etwas komplexe Operation in der SQL-Ausführung verursacht.

Das könnte Ihnen auch gefallen: So verbinden Sie zwei Tabellen in MySQL

Verwenden Sie MySQL nicht als Warteschlange

Warteschlangen können Ihre Datenbankleistung direkt vom Kern aus beeinträchtigen und ohne Ihr Wissen in Ihre App-Datenbanken gelangen. Wenn Sie beispielsweise einen Status für ein bestimmtes Element einrichten, damit ein „relevanter Prozess“ darauf zugreifen kann, erstellen Sie unbeabsichtigt eine Warteschlange. Was es tut, ist, dass es zusätzliche Ladezeit aufbaut, um ohne wichtigen Grund auf die Ressource zuzugreifen.

Warteschlangen verursachen aus zwei Hauptgründen Probleme. Sie serialisieren Ihre Arbeitslast, verhindern die parallele Erledigung von Aufgaben und führen häufig zu einer Tabelle, die laufende Arbeiten sowie historische Daten von bereits abgeschlossenen Jobs enthält. Es fügt der Anwendung nicht nur Latenz hinzu, sondern behindert auch die MySQL-Leistungsoptimierung.

Das könnte Ihnen auch gefallen: Verwendung von Redis für Warteschlangen

Die vier grundlegenden Ressourcen verstehen

Sie benötigen vier grundlegende Ressourcen, um Datenbankfunktionen zu erstellen. CPU, Festplatte, Arbeitsspeicher und Netzwerk. Wenn eines davon nicht richtig funktioniert, wirkt sich dies letztendlich auf den Datenbankserver aus und führt zu einer schlechten Leistung.

Um die grundlegenden Ressourcen richtig zu verstehen, müssen Sie sich auf zwei bestimmte Bereiche konzentrieren, nämlich die Auswahl der richtigen Hardware und die Behebung von Problemen damit.

Achten Sie bei der Auswahl der Hardware für die MySQL-Datenbank immer auf den Einsatz rundum leistungsfähiger Komponenten. Entscheiden Sie sich nicht nur für das Beste aus dem Stack, sondern stellen Sie auch sicher, dass zwischen ihnen das richtige Gleichgewicht besteht. Wir haben oft gesehen, dass Organisationen dazu neigen, Server mit schnellen CPUs und großen Festplatten auszuwählen, aber sie werden mit zu wenig Arbeitsspeicher verwechselt, was letztendlich die Leistung beeinträchtigt.

In einigen Szenarien wird das Hinzufügen von Arbeitsspeicher für die Verbesserung der Leistung in Bezug auf das Ausmaß sehr wichtig. Es sieht ein wenig kontraintuitiv aus, aber in den meisten Fällen wirkt sich die Überbeanspruchung von Festplatten direkt auf die Datenbankleistung aus. Da sich der Mangel an genügend Speicher zum Speichern der Serverdaten als kostspielig erweist, da die Datenbankleistung beeinträchtigt wird.

Behalten Sie bei der Fehlerbehebung immer die Leistung aller vier grundlegenden Ressourcen im Auge. Bestätigen Sie qualitativ, dass sie gemäß den Anforderungen an die Verbesserung der Normen arbeiten. Die regelmäßige Berücksichtigung dieses Audits wird auftretende Probleme schnell lösen.

Paginierungsabfragen

Anwendungen, die paginieren, neigen dazu, den Server herunterzufahren. Beim Anzeigen einer Ergebnisseite mit einem Link zur nächsten Seite gruppieren und sortieren diese Anwendungen normalerweise auf eine Weise, die keine Indizes verwenden kann, und sie verwenden eine LIMIT- und Offset-Funktion, die den Server veranlasst, eine Menge zu tun Arbeit generiert und dann Zeilen verwirft.

Sie können Optimierungen innerhalb der Benutzeroberfläche selbst finden. Anstatt die genaue Anzahl der Seiten in den Ergebnissen und Links zu einer einzelnen Seite anzuzeigen, können Sie einfach einen Link zur nächsten Seite anzeigen. Sie können auch verhindern, dass Personen auf irrelevante Seiten gehen.

Auf der Abfrageseite können Sie, anstatt LIMIT mit Offset zu verwenden, eine Zeile mehr auswählen, als Sie benötigen, und wenn der Benutzer auf den Link „nächste Seite“ klickt, können Sie diese letzte Zeile als Ausgangspunkt für die nächste Ergebnisgruppe festlegen . Wenn der Benutzer beispielsweise eine Seite mit den Zeilen 101 bis 120 angesehen hat, müssen Sie auch die Zeile 121 auswählen. Um die nächste Seite zu rendern, würden Sie den Server nach Zeilen abfragen, die größer oder gleich 121, Limit 21, sind.

Optimieren von MySQL-Unterabfragen

Der wichtigste Rat, den ich Ihnen zu Unterabfragen geben kann, ist, dass Sie, zumindest in aktuellen Versionen von MySQL, wenn möglich einen Join bevorzugen sollten.

Unterabfragen sind Gegenstand intensiver Arbeit des Optimierungsteams, und kommende Versionen von MySQL werden möglicherweise mehr Unterabfrageoptimierungen enthalten. Überprüfen Sie, welche der Optimierungen in veröffentlichtem Code enden und wie viel Unterschied sie machen werden. Mein Punkt hier ist, dass „einen Beitritt bevorzugen“ kein zukunftssicherer Rat ist. Der Server wird immer intelligenter, und die Fälle, in denen Sie ihm sagen müssen, wie er etwas tun soll, anstatt welche Ergebnisse er zurückgeben soll, werden weniger.

Mysql-Abfrage-Cache

Einer der wichtigsten Aspekte der Leistungsmessung ist das Zwischenspeichern des Inhalts. MySQL bietet Datenbankabfrage-Caching, das den Text der SELECT-Anweisung und das abgerufene Ergebnis zwischenspeichert. Wenn Sie also eine doppelte Datenbank erstellen, rufen Sie den MySQL-Abfrage-Cache auf, er antwortet Ihnen und zeigt das Ergebnis aus dem Cache an, und kein Aufruf wird wiederholt analysiert. Auf diese Weise können Sie den MySQL-Cache-Optimierungsprozess maximieren.

Um den MySQL-Abfrage-Cache einzurichten, müssen Sie MySQL einige Einstellungen hinzufügen. Zunächst müssen Sie mit dem folgenden Befehl prüfen, ob der Abfrage-Cache verfügbar ist oder nicht:

mysql> SHOW VARIABLES LIKE 'have_query_cache';

Dies zeigt das Ergebnis, JA. Das bedeutet, dass der MySQL-Cache einwandfrei funktioniert.

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| have_query_cache | YES   |

+------------------+-------+

Jetzt können Sie die Größe und den Typ des MySQL-Abfragecaches einrichten. Denken Sie daran, dass die minimale Standardgröße 40 KB beträgt. Die maximale Größe kann 32 MB betragen. Sie können die MySQL query_cache_size mit dem folgenden Befehl einrichten:

mysql> SET GLOBAL query_cache_size = 40000;

Der Abfrage-Cache-Typ kann das Verhalten aller Verbindungen bestimmen. Sie können den Abfrage-Cache auch für Abfragen deaktivieren wie:

mysql> SET SESSION query_cache_type = OFF;

Sie können auch Werte wie 0,1 und 2 zum Einrichten des Verbindungsstatus festlegen.

Verwenden Sie Memcached für MySQL-Caching

Memcached ist ein verteiltes Speicher-Caching-System. Es beschleunigt Websites mit großen dynamischen Datenbanken, indem Datenbankobjekte im dynamischen Speicher gespeichert werden, um den Druck auf einem Server zu verringern, wenn eine externe Datenquelle einen Lesevorgang anfordert. Ein Memcache-Layer reduziert die Häufigkeit, mit der die Datenbank eine Anfrage stellt.

Memcached speichert die Werte (v) mit dem Schlüssel (k) und ruft die Werte (v) mit dem Schlüssel (k) ab, ohne die Datenbankabfragen zu parsen, und hält sich von all diesen Problemen fern.

Um mehr über Memcached zu erfahren, können Sie die Anleitung zum Einrichten von Memcache in PHP lesen.

Abschluss!

Dieser Artikel enthält im Detail die bewährten Vorgehensweisen für die Datenbankoptimierung und praktische Tipps zur Optimierung der MySQL-Leistung, die jeder Entwickler kennen muss. Es ist ein vollständiger Leitfaden für Backend-Entwickler, die sich über ihre schlechte Datenbankleistung nicht sicher sind und einige praktische Techniken benötigen, um die MySQL-Datenbank vom Kern aus zu optimieren.

Wenn Sie Ihre Gedanken zum Thema hinzufügen oder Fragen dazu stellen möchten, können Sie Ihre Kommentare im Kommentarbereich schreiben.