So profilieren Sie SQL-Abfragen für eine bessere Leistung
Veröffentlicht: 2023-03-16Bei Servebolt leben und atmen wirLeistung .
Die Datenbankleistung ist da keine Ausnahme.
Das Ausführen einer ineffizienten Abfrage, nachdem ein Website-Besucher auf einen Link geklickt hat, wird die Benutzererfahrung erheblich verschlechtern .Sie müssen warten, bis die langsame Abfrage vollständig ausgeführt wird, was einige Sekunden dauern kann, bevor eine andere Aktion ausgeführt wird, z. B. das Rendern der Seite. Diese Wartezeit umfasst nicht nur die Zeit, die für die Ausführung der Abfrage benötigt wird, sondern auch jegliche zusätzliche Zeit, die für die Vorverarbeitung und Nachverarbeitung benötigt wird. Infolgedessen kann eine schlecht gestaltete Abfrage die Gesamtleistung einer Website erheblich verlangsamen – was zu einer frustrierenden Benutzererfahrung führt.
Time to First Byte (TTFB) ist eine Methode, um zu messen, wie lange es dauert, bis das erste Datenbyte empfangen wird, nachdem ein Benutzer eine Anfrage an eine Website gestellt hat.Es ist auch eine Schlüsselmetrik, die von Suchmaschinen bei der Bewertung von Websites verwendet wird. Wenn eine langsame Abfrage ausgelöst wird, wirkt sich dies negativ auf TTFB aus. Je länger die Ausführung der langsamen Abfrage dauert, desto höher ist die TTFB, was zu einer langsameren Gesamtleistung der Website und einer weniger zufriedenstellenden Benutzererfahrung führt.
In diesem Leitfaden führen wir Sie durch die Erstellung von Profilen für SQL-Abfragen – ein entscheidender Teil der Aufrechterhaltung der Leistung von Webanwendungen, die auf Datenbankantworten angewiesen sind. Dies ist ein Prozess, der die Grundlage dafür schafft, dass Sie dann mit der Optimierung dieser Abfragen beginnen können, um ihre Leistung zu verbessern.
Grundlegendes zur SQL-Abfrageprofilerstellung
Wenn Sie eine Webanwendung entwickeln und diese in größerem Umfang zu betreiben beginnt, können SQL-Abfragen, die einmal reibungslos liefen, Leistungsprobleme verursachen. Im Allgemeinen gibt es tendenziell eine zunehmende Anzahl von Abfragen, die auf eine wachsende Datenmenge mit einer zunehmenden Anzahl von Anfragen pro Sekunde laufen. Und wenn die Leistung leidet, leidet auch die Erfahrung Ihrer Benutzer bei der Interaktion mit Ihrer Website, Software oder Ihrem Service.
Die Erstellung von Abfrageprofilen ist eine Möglichkeit, Datenbankabfragen zu analysieren, ihre Leistung zu bewerten und potenzielle Probleme zu identifizieren.
Indem Sie diese problematischen Abfragen analysieren und identifizieren, können Sie spezifische Verbesserungen vornehmen, die einen messbaren Unterschied in der Leistung ihrer Datenbank bewirken können. Dies wird wiederum eine verbesserte Skalierbarkeit in der Zukunft sowie eine allgemeine Kundenzufriedenheit ermöglichen, da Apps und Websites reaktionsschneller sein werden.
MariaDB (und MySQL) bieten mehrere Tools und Techniken für die Erstellung von Abfrageprofilen, die wir in diesem Artikel behandeln werden. Sobald die langsamen Abfragen identifiziert wurden , besteht der nächste Schritt darin, sie zu optimieren. Dieser Prozess umfasst das Identifizieren der Grundursache des Problems und das Vornehmen von Änderungen an der Struktur der Abfragen, um ihre Effizienz zu verbessern.
Profilieren von SQL-Abfragen (7 Methoden)
Lassen Sie uns zunächst die verschiedenen Tools und Techniken aufschlüsseln, die zur Identifizierung langsamer und ineffizienter Abfragen verfügbar sind, damit Sie wissen, worauf Sie sich bei Verbesserungsbemühungen konzentrieren müssen:
1 – Der EXPLAIN EXTENDED-Befehl
Eines der Tools, mit denen Sie Ihre SQL-Abfragen analysieren können, ist derEXPLAIN- Befehl.
Indem Sie den EXPLAIN-Befehl für eine Abfrage ausführen, können Sie sehen, wie die Abfrage ausgeführt wird, einschließlich der verwendeten Indizes und der Anzahl der untersuchten Zeilen.
EXPLAIN SELECT * FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
WHERE customers.name = 'John Smith';
Wenn Sie den EXPLAIN-Befehl für eine Abfrage ausführen, gibt er eine Ergebnismenge mit mehreren Spalten zurück, darunter:
- id: Der eindeutige Bezeichner der Abfrage im Ausführungsplan
- select_type: Der Typ der Abfrage, z. B. SIMPLE oder SUBQUERY
- table: Die abgefragte Tabelle
- type: Der verwendete Join-Typ, z. B. JOIN oder INDEX
- possible_keys: Die Indizes, die MariaDB oder MySQL zur Verarbeitung der Abfrage hätten verwenden können
- key: Der Index, den MariaDB oder MySQL tatsächlich verwendet hat, um die Abfrage zu verarbeiten
- key_len: Die Länge des verwendeten Schlüssels
- rows: Die Anzahl der Zeilen, die MariaDB oder MySQL für die Abfrage untersucht
Extra: Dies enthält zusätzliche Informationen zur Abfrage, z. B. ob ein vollständiger Tabellenscan durchgeführt wurde oder ob eine temporäre Tabelle verwendet wurde.
Durch Analysieren der Ausgabe desEXPLAIN-Befehls können Sie im Allgemeinen potenzielle Leistungsengpässe identifizieren, z. B. schlechte Indizierung, suboptimale Join-Typen oder eine große Anzahl untersuchter Zeilen.
Wenn in der Typspalte beispielsweise „ALL“ anstelle von „index“ angezeigt wird, führt die Abfrage einen vollständigen Tabellenscan durch, was mit ziemlicher Sicherheit zu einer langsamen Leistung führen wird. Wenn die Schlüsselspalte NULL ist, verwendet MySQL keine Indizes, was ebenfalls langsam ist. Wenn die Spalte rows einen hohen Wert hat, bedeutet dies, dass viele Zeilen untersucht werden, was zu einer weiteren Verschlechterung der Leistung führt.
Wir bevorzugen die Verwendung der EXPLAIN EXTENDED- Variante, um zusätzliche Informationen bereitzustellen.
Hinweis: Während dies in MySQL veraltet ist, ist es in MariaDB immer noch verfügbar.
Wenn Sie die Option EXTENDED verwenden, können Sie nützliche Informationen wie die Anzahl der untersuchten Zeilen, die Anzahl der zurückgegebenen Zeilen, Informationen über den verwendeten JOIN-Typ, die Reihenfolge der gescannten Tabellen, die verwendeten Indizes und die Dauer anzeigen Die Abfrage musste ausgeführt werden.
So sieht die Verwendung des Befehls EXPLAIN EXTENDED aus:
EXPLAIN EXTENDED SELECT * FROM your_table WHERE column_name = 'value';
In diesem Beispiel zeigt der EXPLAIN-Befehl eine Liste der Schritte, die die Datenbank unternehmen wird, um die Abfrage auszuführen, sowie eine Liste der verwendeten Ressourcen.
Durch die Verwendung dieses Befehls können Sie Engpässe in der Abfrage leichter erkennen, sodass Sie alle erforderlichen Änderungen vornehmen können, um dies zu verringern und die Leistung der Abfrage zu beschleunigen.
Beispielsweise kann die Verwendung des Befehls EXPLAIN EXTENDED dabei helfen, die Notwendigkeit zu erkennen, Indizes hinzuzufügen, JOIN-Bedingungen zu optimieren und die Gesamtzahl der von der Abfrage zurückgegebenen Zeilen zu begrenzen.
Sie sollten auch sicherstellen, dass Sie das Abfrage-Caching deaktiviert haben, wenn Sie diese Tests und Optimierungen durchführen, um sicherzustellen, dass Sie genaue Ergebnisse erhalten. Führen Sie dazu diesen Befehl zuerst aus, wenn Sie Ihren Client verbinden.
SET SESSION query_cache_type=0;
Nachdem Sie diese Änderungen an Ihrer Abfrage vorgenommen haben, testen Sie die Leistung erneut, um zu ermitteln, inwieweit eine Verbesserung erzielt wurde (falls vorhanden). Denken Sie daran, dass der Prozess, wie bei jeder Profilerstellung und Optimierung einer Abfrage, iterativ ist – rechnen Sie mit der mehrmaligen Verwendung des Befehls EXPLAIN EXTENDED, gefolgt von einem Leistungstest.
2 – Der EXPLAIN ANALYZE-Befehl
Dieser Befehl wird verwendet, um den Ausführungsplan einer Abfrage zu analysieren und Leistungsmetriken wie die tatsächliche Ausführungszeit der Abfrage und die Anzahl der tatsächlich untersuchten Zeilen zurückzugeben. Durch Analysieren der Ergebnisse des Befehls EXPLAIN ANALYZE können Sie potenzielle Engpässe bei der Ausführung der Abfrage identifizieren, z. B. fehlende Indizes oder eine große Anzahl von Zeilen, die untersucht werden müssen.
3 – Das langsame Abfrageprotokoll
Dies ist eine integrierte Funktion in MariaDB (und MySQL), die alle Abfragen protokolliert, deren Ausführung länger als eine bestimmte Zeit dauert. Das Protokoll für langsame Abfragen kann so konfiguriert werden, dass Abfragen protokolliert werden, die länger als einen bestimmten Schwellenwert dauern, z. B. eine Sekunde.
Bei Servebolt protokolliert das Protokoll für langsame Abfragen alle Abfragen, deren Ausführung länger als 1 Sekunde dauert. Dies liegt daran, dass die meisten Abfragen in Sekundenbruchteilen ausgeführt werden sollten. Im Kontext einer Webanwendung, z. B. einer Website, auf der WordPress ausgeführt wird, erfordert das Laden einer einzelnen Seite zwischen 10 und 100 Datenbankabfragen, die alle nacheinander ausgeführt werden müssen, bevor die Seite in HTML kompiliert und an den Benutzer zurückgegeben werden kann.
Die aktuelle Servebolt Cloud-Konfiguration speichert langsame Abfrageprotokolle auf einem globalen Protokollserver. Bei Bedarf können Sie sich einfach an unser Support-Team wenden, und wir filtern die Datei nach den relevanten Protokollen und stellen Ihnen die Ausgabe zur Verfügung.
In Ihren eigenen Umgebungen können Sie das langsame Abfrageprotokoll aktivieren, indem Sie Ihrer MariaDB- oder MySQL-Konfigurationsdatei (my.cnf oder my.ini) die folgenden Zeilen hinzufügen:
log_slow_queries = /path/to/slow.log
long_query_time = 1
4 – Visueller Erklärungsplan
Ein visueller Erklärungsplan bietet eine grafische Darstellung der Ausgabe des EXPLAIN-Befehls, was das Verständnis der Ausführung einer Abfrage und das Erkennen von Leistungsproblemen erleichtert.
Hinweis: Visual Explain Plans sind hilfreich, wenn Sie gerade Webanwendungen entwickeln.
Anstelle einer einfachen Textausgabe wird die Abfrageausführung in einer Baumstruktur angezeigt , wobei jeder Knoten eine Tabelle, einen Index oder eine Operation darstellt und die Verbindungen zwischen ihnen die Reihenfolge der Operationen darstellen.
Verschiedene Tools wie die MySQL Workbench und der EXPLAIN Analyzerkönnen visuelle Erklärungspläne generieren und bieten eine interaktive Schnittstelle zum Navigieren im Ausführungsplan und zum genauen Untersuchen jeder Operation.
In MySQL Workbench ist das Generieren eines visuellen Erklärungsplans beispielsweise so einfach wie das Ausführen der Abfrage und das Klicken auf die Schaltfläche „Erklärungsplan “ auf der Ergebnisregisterkarte.Dies bietet eine grafische Darstellung des Abfrageausführungsplans zusammen mit detaillierten Informationen zu jedem Vorgang. Auf diese Weise können Sie Leistungsprobleme identifizieren und die Abfrage dann nach Bedarf optimieren.
5 – Der MySQL-Tuner
MySQL Tuner ist ein Skript, das die Leistung und Konfiguration eines Datenbankservers überprüft und Empfehlungen zur Verbesserung gibt. Es bietet eine Zusammenfassung des aktuellen Serverstatus, einschließlich Informationen wie die Gesamtzahl der Abfragen, die Anzahl langsamer Abfragen und die aktuelle Pufferpoolnutzung.
Es kann auch verwendet werden, um verschiedene andere Einstellungen zu überprüfen, z. B. die Datenbankversion, die verwendete Speicher-Engine und die Abfrage-Cache-Konfiguration, und gibt Empfehlungen zur Optimierung dieser Einstellungen basierend auf der aktuellen Arbeitslast.
Einer der Hauptunterschiede zu anderen Tools besteht darin, dass es sich um ein Befehlszeilentool handelt, das entweder auf dem Server selbst oder remote ausgeführt werden kann, wodurch es einfach ist, den Prozess der Überwachung und Optimierung der Datenbankleistung zu automatisieren.
Hinweis: Wenn Ihre Webanwendung (und Datenbank) bereits in der Servebolt Cloud gehostet wird – darauf ist unser Team spezialisiert und kann es besser als alle Empfehlungen, die ein Tool geben könnte.
6 – Abfrageprofiler
Es gibt Abfrage-Profiler von Drittanbietern, die zum Profilieren von SQL-Abfragen verwendet werden können, z. B. MariaDB Enterprise Query Analyzer , Dataedo und Percona Toolkit . Abfrage-Profiler von Drittanbietern können im Vergleich zu den in MariaDB (oder MySQL) verfügbaren integrierten Tools zusätzliche Features und Funktionen bereitstellen.
Hinweis: Abfrage-Profiler sind hilfreich, wenn Sie Webanwendungen entwickeln.
Beispielsweise bieten sie möglicherweise detailliertere Informationen zur Abfrageleistung, z. B. Ausführungszeiten und Wartezeiten für Sperren, und können die Daten auf eine Weise visualisieren, die mit den integrierten Tools nicht möglich ist.
Wenn die integrierten Tools für Ihre Anforderungen ausreichen, müssen Sie keine Abfrageprofiler von Drittanbietern verwenden. Wenn Sie jedoch detailliertere Informationen oder erweiterte Funktionen benötigen, kann es sich lohnen, einen Profiler eines Drittanbieters in Betracht zu ziehen.
7 – Profilerstellung mit Überwachungstools
Es gibt auch eine Reihe von Überwachungstools wie Prometheus, Grafana und Nagios, mit denen Sie Abfragen profilieren und die Leistung Ihrer Datenbanken überwachen können.
Prometheus ist ein effizientes Überwachungssystem, das Metrikdaten sammeln, speichern und abfragen kann, sodass Sie wertvolle Erkenntnisse in Echtzeit gewinnen können.Es lässt sich in MariaDB (und MySQL) integrieren, um die gesammelten Metriken zu speichern, und wird mit Grafana für eine effektive Visualisierung geliefert.
Grafana ist ein leistungsstarkes Open-Source-Analysetool, mit dem die von Prometheus gesammelten Daten überwacht und visualisiert werden können.Durch die Einrichtung benutzerdefinierter Dashboards und Benachrichtigungen können Sie die Leistung Ihrer Datenbank in Echtzeit im Auge behalten.
Nagios hilft Ihnen, den Zustand Ihrer Datenbank jederzeit im Auge zu behalten.Es kann so eingerichtet werden, dass es wichtige Ressourcen wie CPU, RAM und Speicherplatz überwacht und gleichzeitig andere Dienste und Netzwerkgeräte im Auge behält. Da es hochgradig konfigurierbar ist, ist es ein großartiges Tool für die proaktive Überwachung von Datenbankabfragen.
Mithilfe dieser Tools zur Serverüberwachung können Sie Leistungsprobleme verfolgen und schnell Maßnahmen ergreifen, um sicherzustellen, dass Ihr Datenbankserver reibungslos läuft.
Gängige Techniken zur Abfrageoptimierung
Es gibt mehrere gängige Abfrageoptimierungstechniken, die verwendet werden können, um die Leistung von SQL-Abfragen zu verbessern:
1 – Indizierung
Indizes sind eine Möglichkeit, Abfragen zu beschleunigen – insbesondere solche, die Filter verwenden(WHERE).Die Verwendung von Indizes führt zu Datenstrukturen in Ihrer Datenbank-Engine (MariaDB oder MySQL) außerhalb bestimmter Tabellen und verweist auf die Daten, die Sie abfragen möchten. Wir werden in diesem Beitrag nicht zu sehr ins Detail gehen, da die Verwendung von Indizes zur Verbesserung von Datenbankabfragen einen eigenen Artikel rechtfertigt – etwas, das wir in Zukunft behandeln werden.
Stellen Sie sich beispielsweise eine große Tabelle namens „Bestellungen“ vor, die Millionen von Datenzeilen enthält, einschließlich Informationen wie Bestell-ID, Kunden-ID und Bestelldatum. Wenn eine Abfrage ausgeführt wird, um alle Bestellungen abzurufen, die von einem bestimmten Kunden ohne Index in der Kunden-ID-Spalte aufgegeben wurden, müsste MariaDB die gesamte Tabelle durchsuchen, um die relevanten Daten zu finden. Dies kann insbesondere bei großen Tabellen viel Zeit und Ressourcen in Anspruch nehmen.
Allgemein gesagt, wenn Sie sicher sind, dass Sie eine bestimmte Abfrage wiederholt ausführen und die Leseleistung wichtig ist, kann das Erstellen eines Indexes (oder mehrerer) der richtige Ansatz sein, um diese Abfrage zu beschleunigen.
Im Kontext von WordPress ist dies sehr verbreitet. Viele Plugins werden von Entwicklern erstellt, die (aus Bequemlichkeit) generische, gemeinsam genutzte Tabellen ohne Verwendung von Indizes verwenden. Infolgedessen ist es auch ein Bereich, in dem häufig sehr deutliche Leistungssteigerungen erzielt werden.
Um alle Indizes anzuzeigen, die für eine bestimmte Tabelle vorhanden sind,
Sie können alle Indizes anzeigen, die für eine bestimmte Tabelle vorhanden sind, indem Sie SHOW INDEX FROM verwenden – wie im folgenden Beispiel für die Tabelle wp_postmeta:
MariaDB [db_name] > SHOW INDEX FROM wp_postmeta;
In einem Szenario haben wir kürzlich zwei Indizes für eine wp_postmeta-Tabelle erstellt:sb_postid_metakey und sb_postid_metakey_metaval.
Diese Indizes wurden basierend auf der Betrachtung der langsamsten Abfragen mit der höchsten Priorität hinzugefügt und festgestellt, dass sie alle relativ ähnlich waren, da es sich um SELECT-Anweisungen handelte, die zusätzlich zu vielen (AND/OR)-Vergleichsbedingungen mit WHERE filterten. Als ich dies sah, überprüfte ich die aktuellen Indizes für die verwendete Tabelle und führteEXPLAIN EXTENDED für die Abfrage aus, um meinen Ansatz weiter zu validieren.
Die Abfrage funktionierte größtenteils und verwendete die Tabelle wp_postmeta mitJOIN.Basierend auf der Reihenfolge, in der dies geschah, würde das Hinzufügen dieser Indizes es MariaDB (oder MySQL) ermöglichen, seine Antwort von den Indizes zu erhalten, anstatt die gesamte Tabelle mit all ihren Zeilen zu scannen.
CREATE INDEX sb_postid_metakey ON wp_postmeta (post_id, meta_key);
CREATE INDEX sb_postid_metakey_metaval ON wp_postmeta (post_id, meta_key, meta_value);
Dies ist eine Kombination aus „Herausfinden“ der Ihnen zur Verfügung stehenden Tools (wie oben beschrieben) sowie Kenntnissen über die Datentypen und Inhalte der Datenbank. Das funktioniert keineswegs immer; Selbst wenn dies der Fall ist, führt dies nicht immer zu einer Leistungssteigerung von 500 %. Ein riesiger Index kann langsamer sein als alle Zeilen zu scannen, daher müssen Abfragen vor und nach dem Anwenden der Indizes getestet werden, um sicherzugehen.
Hinweis: Wenn Sie versuchen, Indexgeschwindigkeiten zu testen, sollten Sie das Abfrage-Caching für die Sitzung deaktivieren, indem Sie Folgendes verwenden:
SET SESSION query_cache_type=0;
In diesem Fall dauerte die Ausführung der Abfrage vor der Verwendung von Indizes 10,437 Sekunden. Und nach dem Erstellen der beiden Indizes dauerte dieselbe Abfrage [# Sekunden].
2 – Reduzieren des Datenzugriffs
Reduzieren des Datenzugriffs , dh Minimieren der Anzahl der Zeilen und Spalten, auf die zugegriffen werden muss, um eine Abfrage auszuführen.Dies kann erreicht werden, indem die von der Abfrage abgerufenen Daten gefiltert, Indizes verwendet und große Tabellen partitioniert werden. Obwohl die meisten Leute dies nicht tun müssen (oder können), ist dies ein wesentlicher Punkt, den Sie beachten sollten, wenn Sie Datenbankabfragen von Grund auf neu entwerfen.
Wenn beispielsweise eine Datenbankabfrage Daten über einen Benutzer zu Anmeldezwecken nachschlägt, sollte die Abfrage LIMIT 1 sein, da eindeutig nie mehr als die Daten eines Benutzers erforderlich sein sollten.
Hinweis: Dies bezieht sich mehr auf das Datenbankdesign als auf die Optimierung.Obwohl es wichtig ist, die Leistung aufrechtzuerhalten, ist dieser Aufwand für Plugin-Entwickler (im Kontext von WordPress) relevanter als für die Mehrheit der Endbenutzer.
Denken Sie daran, dass Sie vor dem Testen der Geschwindigkeit nach Änderungen am Datenzugriff sicherstellen sollten, dass Sie das Abfrage-Caching deaktiviert haben, indem Sie den folgenden Befehl ausführen:
SET SESSION query_cache_type=0;
3 – Verwenden der Datenpartitionierung
Durch die Partitionierung von Daten in kleinere Blöcke werden Datenbanken effizienter und weniger zeitaufwändig zu verwalten. Diese Strategie kann dazu beitragen, den Zeitaufwand für Wartungsprozesse wie Backups und Updates zu reduzieren und die zu verwaltende Datenmenge zu begrenzen. Insgesamt hilft es, die Leistung zu verbessern und die Ressourcennutzung zu optimieren.
Um Daten in einer Datenbank zu partitionieren, können Sie die folgenden Schritte ausführen:
- Stellen Sie bei der Auswahl einer zu partitionierenden Tabelle sicher, dass Sie eine auswählen, die eine große Datenmenge enthält und von einer Aufteilung profitieren würde. Dies hilft, Ihr System zu optimieren und die Abfrageleistung zu verbessern.
- Die Auswahl der richtigen Partitionierungsmethode für Ihre Datenbank ist entscheidend. Sie können zwischen Bereichs-, Listen-, Hash- oder Schlüsselpartitionierung wählen – abhängig von der Struktur Ihrer Daten und den Abfragen, die Sie ausführen möchten. Stellen Sie sicher, dass Sie diejenige auswählen, die Ihren Anforderungen am besten entspricht, um optimale Leistung und Ergebnisse zu erzielen.
- Die Bereichspartitionierung ist die ideale Wahl, wenn Sie über Daten verfügen, die in bestimmte Bereiche unterteilt werden können.Wenn Sie beispielsweise eine Tabelle mit Daten für mehrere Jahre haben, können Sie eine Bereichspartition erstellen, um sie besser zu organisieren. Sie könnte auf dem Datum oder dem numerischen Wert der betreffenden Spalte basieren.
- Die Listenpartitionierung ist eine effiziente Technik zur Handhabung von Daten, die leicht in verschiedene Gruppen gemäß einem bestimmten Parameter getrennt werden können.Beispielsweise haben Sie eine Tabelle mit Mitarbeiterinformationen, die nach Abteilung kategorisiert sind; dies erfordert die Verwendung der Listenpartitionierung.
- Die Hash-Partitionierung ist eine effektive Strategie zum Anordnen von Daten in gleich große Cluster basierend auf dem Hash-Wert einer bestimmten Spalte.Dies ermöglicht eine gleichmäßige Verteilung der Daten auf mehrere Partitionen, was es zu einer hervorragenden Wahl für die effiziente Verteilung von Daten macht.
- Die Schlüsselpartitionierung ähnelt der Hashpartitionierung, der Hauptunterschied besteht jedoch darin, dass sie einen bestimmten Spaltenwert als Grundlage für die Aufteilung von Daten in verschiedene Gruppen verwendet.Dies macht es zu einer idealen Wahl für Datensätze, die auf der Grundlage einer eindeutigen Kennung oder eines natürlichen Schlüssels in separate Gruppen aufgeteilt werden können.
- Indem Sie eine partitionierte Tabelle erstellen, können Sie die ursprüngliche Tabelle effektiv in kleinere unterteilen. Dies wird durch Hinzufügen einer Partitionierungsklausel in der CREATE TABLE-Anweisung erreicht, in der Sie die gewünschte Methode und Bedingungen für die Segmentierung angeben. Dadurch kann die Abfrageleistung verbessert und die Datenverwaltung effizienter gestaltet werden.
- Mit der INSERT INTO… SELECT-Anweisung können Sie Daten schnell aus der ursprünglichen Tabelle in die neu partitionierte Tabelle kopieren. Dadurch wird Ihre partitionierte Tabelle problemlos mit allen relevanten Informationen gefüllt.
- Anwendungen müssen jetzt neu konfiguriert werden, um die Vorteile der partitionierten Tabelle nutzen zu können. Dies ersetzt die ursprüngliche Tabelle und macht Ihre Anwendungen effizienter.
- Bevor Sie einen Test durchführen, um eine potenzielle Leistungsverbesserung zu bewerten, müssen Sie zuerst das Abfrage-Caching deaktivieren, indem Sie den folgenden Befehl ausführen:
SET SESSION query_cache_type=0;
- Um sicherzustellen, dass Ihre partitionierte Tabelle reibungslos läuft, ist es wichtig, ihre Leistung genau im Auge zu behalten. Wenn Sie Probleme bemerken, kann es hilfreich sein, die Partitionierungsbedingungen anzupassen oder zu einer anderen Methode zu wechseln. Die regelmäßige Überwachung Ihrer Partitionen hilft Ihnen, ihr Potenzial zu maximieren.
Wichtiger Hinweis zum Skripten von Upgrades und partitionierten Tabellen
Während das Partitionieren von Datenbanken einen positiven Unterschied in der Effizienz bewirken kann, ist es wichtig, die potenziellen Probleme zu berücksichtigen, die durch das Ausführen von Upgrade-Skripts zum Ändern des Datenbankschemas verursacht werden. Es ist wichtig, dass partitionierte Tabellen beim Skripten dieser Upgrades berücksichtigt werden. Wenn die partitionierten Tabellen in den Upgrade-Skripten nicht berücksichtigt werden, können potenzielle Probleme auftreten, die mit ziemlicher Sicherheit zu einer fehlerhaften Site führen.
Wenn beispielsweise ein Skript erstellt wird, um einer partitionierten Tabelle eine neue Spalte hinzuzufügen, ändert es möglicherweise nur eine Partition, wodurch Inkonsistenzen und Probleme innerhalb der Daten entstehen. Wenn ein Upgrade-Skript erstellt wird, um einer partitionierten Tabelle einen Index hinzuzufügen, kann es den Index ebenfalls nur auf einer Partition generieren, was zu einer langsameren Leistung und inkonsistenten Ergebnissen führt.
Um solche Probleme zu vermeiden, müssen Upgrade-Scripts so entworfen werden, dass sie die partitionierten Tabellen berücksichtigen. Dies könnte beinhalten, das Skript auf jeder Partition einzeln auszuführen oder die Skripts so zu überarbeiten, dass sie mit partitionierten Tabellen funktionieren. Es ist auch wichtig, gründliche Tests durchzuführen, um sicherzustellen, dass der Upgrade-Prozess keine unerwarteten Probleme oder Datenverluste verursacht.
4 – Redis
Für Servebolt-Kunden ist Redis ein (kostenpflichtiges) Addon, das bei der Abfrageoptimierung helfen kann.
Redis (manchmal auch als Remote Dictionary Server bekannt) ist eine Open-Source-Lösung, die Daten im Arbeitsspeicher speichert und für Caching, eine Datenbank oder sogar als Message Broker verwendet werden kann. Es kann in eine Datenbank integriert werden, um die Leistung zu verbessern und als effizienter Vermittler zwischen der Anwendung und der Datenbank zu fungieren.
Es arbeitet daran, die Leistung und Antwortzeiten von Anwendungen zu verbessern, indem es die Belastung der Datenbank reduziert. Dies geschieht, indem häufig verwendete Daten bei jeder Anfrage in Redis statt in der Datenbank gespeichert werden, wodurch erheblich Zeit gespart wird.
Durch die richtige Konfiguration des Plugins kann Redis mit einer Datenbank zur Optimierung der Abfrageausführung verwendet werden. Wenn erforderliche Daten in Redis nicht vorhanden sind, ruft die Anwendung sie aus der Datenbank ab und speichert sie für die zukünftige Verwendung in Redis. Dadurch wird der Datenabruf viel schneller und effizienter.
Durch diesen Ansatz kann die Anwendung vom schnellen In-Memory-Zugriff von Redis profitieren und bei Bedarf auch Daten aus der Datenbank speichern und darauf zugreifen.
Denken Sie daran, dass Sie bei der erstmaligen Implementierung von Redis das Abfrage-Caching deaktivieren müssen, bevor Sie Leistungstests ausführen. Verwenden Sie dazu den Befehl:
SET SESSION query_cache_type=0;
Abschluss
Das MariaDB- und MySQL-Ökosystem verfügt über eine breite Palette von Tools und Methoden, mit denen Sie Engpässe bei der Ausführung von Datenbankabfragen leichter erkennen können, sodass Sie die Leistung Ihrer Webanwendungen verbessern können.
Verlangsamungen treten wahrscheinlich während der gesamten Lebensdauer einer Anwendung auf. Der Versuch, sie zu vermeiden, ist großartig, aber Sie müssen letztendlich wissen, wo Sie suchen müssen, wenn Sie mit der Diagnose von Leistungsproblemen beginnen. Abhängig von der Größe und Art der von Ihnen ausgeführten Datenbanken ist dies ein iterativer Prozess, der eine kontinuierliche Überwachung, Fehlerbehebung und kontinuierliche Verbesserung erfordert, um die Leistung Ihrer Datenbanken auf einem hohen Standard zu halten.