Heim >Datenbank >MySQL-Tutorial >Wir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor
Anmerkung des Übersetzers: Mit zunehmender Größe und Auslastung nimmt die Leistung von MySQL tendenziell ab. Beachten Sie diese Tipps, damit MySQL reibungslos läuft.
Eine Möglichkeit, eine Anwendung zu messen, besteht darin, ihre Leistung zu betrachten. Einer der Leistungsindikatoren ist die Benutzererfahrung, die für den Laien ausgedrückt bedeutet, „ob Benutzer länger warten müssen, um das zu bekommen, was sie wollen“.
Dieser Indikator ändert sich in verschiedenen Anwendungen. Bei mobilen Shopping-Apps darf die Reaktionszeit einige Sekunden nicht überschreiten. Bei HR-Seiten für Mitarbeiter kann es einige Sekunden länger dauern.
Es gibt viele Studien darüber, wie sich Leistung auf das Nutzerverhalten auswirkt:
79 % der Kunden werden wahrscheinlich nicht zu einer langsamen Website zurückkehren
47 % der Verbraucher erwarten, dass Webseiten in 2 Sekunden oder weniger geladen werden
40 % der Nutzer verlassen eine Website, wenn das Laden länger als 3 Sekunden dauert
Eine Verzögerung der Seitenladezeit um 1 Sekunde kann zu einem Verlust von 7 % und einer Reduzierung der Seitenaufrufe um 11 % führen
Unabhängig von den verwendeten Kriterien ist dies der Fall Ein Muss. Sorgen Sie für eine gute Anwendungsleistung. Andernfalls werden sich Benutzer beschweren (oder, schlimmer noch, zu einer anderen App wechseln). Einer der Faktoren, die die Anwendungsleistung beeinflussen, ist die Datenbankleistung. Die Interaktion zwischen Anwendungen, Websites und Datenbanken ist entscheWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vorend für die Leistung Ihrer Anwendung.
Eine Kernkomponente dieser Interaktion ist die Art und Weise, wie die Anwendung die Datenbank abfragt und wie die Datenbank auf Anfragen reagiert. Unabhängig davon ist MySQL eines der beliebtesten Datenbankverwaltungssysteme. In Produktionsumgebungen greifen immer mehr Unternehmen auf MySQL (und andere Open-Source-Datenbanken) als Datenbanklösung zurück.
Es gibt viele Möglichkeiten, MySQL zu konfigurieren, um sicherzustellen, dass die Datenbank schnell auf Abfragen reagiert und die Verschlechterung der Anwendungsleistung auf ein Minimum beschränkt wird.
Hier sind einige grundlegende Tipps zur Optimierung der MySQL-Datenbankleistung.
Die beWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung voren wichtigsten EntscheWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vorungen, die Sie bei jeder Datenbank treffen, sind das Entwerfen, wie Beziehungen zwischen Anwendungsentitäten Tabellen zugeordnet werden (Datenbankschema), und das Entwerfen, wie die Anwendung empfangen wird die erforderlichen Daten im erforderlichen Format (Abfrage).
Komplexe Anwendungen können komplexe Muster und Abfragen aufweisen. Wenn Sie die Leistung und Skalierbarkeit erhalten möchten, die Ihre Anwendung benötigt, können Sie sich nicht nur auf Ihre Intuition verlassen, um zu verstehen, wie eine Abfrage ausgeführt wird.
Sie sollten lernen, den EXPLAIN-Befehl anstelle von zufälligen Vermutungen und Vorstellungen zu verwenden. Dieser Befehl zeigt, wie die Abfrage ausgeführt wird, und gibt Ihnen eine Vorstellung davon, welche Leistung Sie erwarten können und wie die Abfrage skaliert wird, wenn sich die Größe Ihrer Daten ändert.
Es gibt viele Tools – wie MySQL Workbench –, die EXPLAIN-Ausgaben visualisieren können, aber Sie müssen dennoch die Grundlagen verstehen, um sie zu verstehen. Der Befehl
EXPLAIN bietet eine Ausgabe in zwei verschiedenen Formaten: ein altmodisches Tabellenformat und ein moderneres strukturiertes JSON-Dokument, das weitere Details bereitstellt (siehe unten):
mysql> explain format=json select avg(k) from sbtest1 where Wir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor between 1000 and 2000 \G *************************** 1. row *************************** EXPLAIN: { “query_block”: { “select_Wir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor”: 1, “cost_info”: { “query_cost”: “762.40” }, “table”: { “table_name”: “sbtest1”, “access_type”: “range”, “possible_keys”: [ “PRIMARY” ], “key”: “PRIMARY”, “used_key_parts”: [ “Wir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor” ], “key_length”: “4”, “rows_examined_per_scan”: 1874, “rows_produced_per_join”: 1874, “filtered”: “100.00”, “cost_info”: { “read_cost”: “387.60”, “eval_cost”: “374.80”, “prefix_cost”: “762.40”, “data_read_per_join”: “351K” }, “used_columns”: [ “Wir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor”, “k” ], “attached_condition”: “(`sbtest`.`sbtest1`.`Wir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor` between 1000 and 2000)” } } }
Eine Komponente, die das sollte zu betrachten ist „Abfragekosten“. Abfragekosten bedeuten, dass MySQL die Kosten dieser bestimmten Abfrage als Gesamtkosten der Abfrageausführung betrachtet und auf vielen verschiedenen Faktoren basiert.
Der Abfrageaufwand für einfache Abfragen beträgt normalerweise weniger als 1.000. Abfragen mit Kosten zwischen 1.000 und 100.000 gelten als Abfragen mit mittleren Kosten und sind im Allgemeinen schneller, wenn Sie nur einige Hundert dieser Abfragen pro Sekunde ausführen (im Gegensatz zu Zehntausenden).
Abfragen, die mehr als 100.000 kosten, können als teuer angesehen werden. Normalerweise werden diese Abfragen immer noch schnell ausgeführt, wenn Sie ein einzelner Benutzer im System sind. Sie sollten jedoch sorgfältig überlegen, wie oft Sie solche Abfragen in interaktiven Anwendungen verwenden (insbesondere, wenn die Anzahl der Benutzer wächst).
Natürlich sind diese Zahlen nur eine grobe Darstellung der Leistung, aber sie veranschaulichen die allgemeinen Prinzipien. Je nach Architektur und Konfiguration kann Ihr System Abfrage-Workloads besser oder schlechter bewältigen.
Der Hauptfaktor, der die Abfragekosten bestimmt, ist, ob die Abfrage Indizes korrekt verwendet. Der EXPLAIN-Befehl kann Ihnen sagen, ob eine Abfrage einen Index verwendet (normalerweise aufgrund der Art und Weise, wie der Index in der Datenbank erstellt wurde oder wie die Abfrage selbst entworfen wurde). Deshalb ist es so wichtig, den Umgang mit EXPLAIN zu erlernen.
Indizes verbessern die Abfrageeffizienz, indem sie die Datenmenge in der Datenbank reduzieren, die die Abfrage scannen muss. Indizes in MySQL werden verwendet, um den Zugriff auf die Datenbank zu beschleunigen und dabei zu helfen, Datenbankeinschränkungen (wie UNIQUE und FOREIGN KEY) durchzusetzen.
Ein Datenbankindex ähnelt einem Buchindex. Sie werden an einem eigenen Ort gespeichert und enthalten Informationen, die bereits in der Hauptdatenbank vorhanden sind. Dabei handelt es sich um Referenzmethoden oder Karten, die auf den Speicherort der Daten verweisen. Indizes verändern keine Daten in der Datenbank. Sie verweisen lediglich auf den Speicherort der Daten.
Es gibt keinen Index, der für jede Arbeitslast perfekt geeignet ist. Stattdessen sollten Sie Indizes immer im Kontext der Abfrage betrachten, in der das System ausgeführt wird.
Eine gut indizierte Datenbank läuft nicht nur schneller, sondern selbst ein fehlender Index kann dazu führen, dass die Datenbank langsamer wird. Verwenden Sie EXPLAIN (wie bereits erwähnt), um fehlende Indizes zu finden und hinzuzufügen. Aber Vorsicht: Fügen Sie keine Indizes hinzu, die Sie nicht benötigen! Unnötige Indizes verlangsamen Ihre Datenbank
(siehe diese Einführung zu den Best Practices für die MySQL-Indizierung).
Wie bei jeder Software verfügt MySQL über viele konfigurierbare Einstellungen, die zur Änderung des Verhaltens (und letztendlich der Leistung) verwendet werden können. Wie bei jeder Software übersehen Administratoren viele dieser konfigurierbaren Einstellungen und verwenden sie letztendlich im Standardmodus.
Um die beste Leistung von MySQL zu erzielen, ist es wichtig, die konfigurierbaren MySQL-Einstellungen zu verstehen und, was noch wichtiger ist, sie so einzustellen, dass sie am besten zu Ihrer Datenbankumgebung passen.
Standardmäßig ist MySQL für kleine Entwicklungsinstallationen gedacht, nicht für den Produktionsmaßstab. Im Allgemeinen möchten Sie MySQL so konfigurieren, dass es alle verfügbaren Speicherressourcen nutzt und so viele Verbindungen zulässt, wie Ihre Anwendung erfordert.
Hier sind drei Einstellungen zur MySQL-Leistungsoptimierung, die Sie immer sorgfältig überprüfen sollten:
innodb_ buffer_ pool_size: Der Pufferpool wird zum Speichern zwischengespeicherter Daten und Indizes verwendet. Dies ist der Hauptgrund, ein System mit viel RAM als Datenbankserver zu verwenden. Wenn Sie nur die InnoDB-Speicher-Engine ausführen, werden normalerweise 80 % des Speichers dem Pufferpool zugewiesen. Wenn Sie sehr komplexe Abfragen ausführen oder über eine große Anzahl gleichzeitiger Datenbankverbindungen oder eine große Anzahl von Tabellen verfügen, möchten Sie diesen Wert möglicherweise etwas senken, um mehr Speicher für andere Vorgänge zu reservieren.
Beim Festlegen der InnoDB-Pufferpoolgröße müssen Sie darauf achten, dass sie nicht zu groß eingestellt wird, da es sonst zu Auslagerungen kommt. Dies wird sich definitiv auf die Datenbankleistung auswirken. Eine einfache Möglichkeit zur Überprüfung besteht darin, sich die Austauschaktivität im Systemübersichtsdiagramm in Percona Monitoring and Management anzusehen:
Wie auf dem Bild zu sehen ist, ist es manchmal in Ordnung, ein paar Dinge auszutauschen. Wenn Sie jedoch eine anhaltende Swap-Aktivität von 1 MB pro Sekunde oder mehr feststellen, müssen Sie die Pufferpoolgröße (oder eine andere Speichernutzung) reduzieren.
Machen Sie sich keine Sorgen, wenn der Wert von innodb_ Buffer_ pool_ size beim ersten Zugriff nicht korrekt ermittelt wird. Ab MySQL 5.7 ist es möglich, die Größe des InnoDB-Pufferpools dynamisch zu ändern, ohne den Datenbankserver neu zu starten.
innodb_ log_ file_ size: Dies ist die Größe einer einzelnen InnoDB-Protokolldatei. Standardmäßig verwendet InnoDB zwei Werte. Sie können diese Zahl also verdoppeln, um die Größe des zirkulären Redo-Log-Speicherplatzes zu erhalten, den InnoDB zur Gewährleistung der Transaktionsdauerhaftigkeit verwendet. Dies optimiert auch die Anwendung von Änderungen in der Datenbank. Das Festlegen der Größe der innodb_log_datei ist eine Frage von Kompromissen. Je mehr Redo-Speicherplatz zugewiesen wird, desto besser ist die Leistung bei schreibintensiven Arbeitslasten, aber desto länger dauert die Wiederherstellung nach einem Absturz, wenn das System ausfällt oder andere Probleme auftreten.
Woher wissen Sie, ob die Leistung von MySQL durch die aktuelle Größe der InnoDB-Protokolldatei begrenzt ist? Sie können erkennen, wie viel des verfügbaren Redo-Log-Speicherplatzes tatsächlich genutzt wird. Am einfachsten ist es, das Percona Monitor and Management InnoDB Metrics-Dashboard anzuzeigen. In der Abbildung unten ist die Größe der InnoDB-Protokolldatei nicht groß genug, da der verwendete Speicherplatz sehr nahe am verfügbaren Redo-Log-Speicherplatz liegt (angezeigt durch die rote Linie). Die Größe der Protokolldatei sollte mindestens 20 % größer sein als der erforderliche Speicherplatz, damit das System optimal läuft.
MAX_ Verbindungen: Große Anwendungen erfordern normalerweise eine hohe Anzahl von Verbindungen auf den Standardwert. Im Gegensatz zu anderen Variablen gibt es (per se) keine Leistungsprobleme, wenn sie nicht richtig eingestellt sind. Wenn umgekehrt die Anzahl der Verbindungen für die Anforderungen Ihrer Anwendung nicht ausreicht, kann Ihre Anwendung keine Verbindung zur Datenbank herstellen (was für Ihre Benutzer wie eine Ausfallzeit aussieht). Daher ist es wichtig, diese Variable richtig zu handhaben.
Wenn Sie eine komplexe Anwendung mit mehreren Komponenten auf mehreren Servern ausführen, kann es schwierig sein zu wissen, wie viele Verbindungen benötigt werden. Glücklicherweise lässt sich mit MySQL leicht erkennen, wie viele Verbindungen während der Spitzenzeiten genutzt werden. Im Allgemeinen möchten Sie sicherstellen, dass zwischen der maximalen Anzahl der von Ihrer Anwendung verwendeten Verbindungen und der maximalen Anzahl verfügbarer Verbindungen eine Lücke von mindestens 30 % besteht. Eine einfache Möglichkeit, diese Zahlen anzuzeigen, ist die Verwendung des MySQL-Verbindungsdiagramms im MySQL-Übersichts-Dashboard von Percona Monitoring and Management. Das folgende Diagramm zeigt ein robustes System mit einer großen Anzahl zusätzlicher verfügbarer Anschlüsse.
Eine Sache, die Sie beachten sollten, ist, dass die Datenbank ausgeführt wird langsam, Anwendungen stellen oft zu viele Verbindungen her. In diesem Fall sollten Sie die Leistungsprobleme der Datenbank beheben, anstatt einfach mehr Verbindungen zuzulassen. Mehr Verbindungen können die zugrunde liegenden Leistungsprobleme verschlimmern.
(Hinweis: Wenn Sie die Variable „max_Connections“ deutlich höher als den Standardwert festlegen, müssen Sie oft darüber nachdenken, andere Parameter zu erhöhen, wie z. B. die Größe des Tabellencaches und die Anzahl der geöffneten MySQL-Dateien. Dies ist jedoch der Fall geht über den Rahmen dieser Artikelkategorie hinaus.
In den letzten Jahren haben wir den Übergang zu SolWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor-State-Festplatten (SSDs) erlebt. Obwohl SSDs viel schneller sind als sich drehende Festplatten, können sie dennoch nicht mit den Daten im RAM mithalten. Dieser Unterschied ist nicht nur auf die Speicherleistung selbst zurückzuführen, sondern auch auf die zusätzliche Arbeit, die die Datenbank beim Abrufen von Daten vom Festplatten- oder SSD-Speicher leisten muss.
Mit den neuesten Hardware-Verbesserungen ist es zunehmend möglich, Datenbanken im Speicher zu speichern, unabhängig davon, ob sie in der Cloud ausgeführt werden oder Ihre eigene Hardware verwalten.
Die bessere Nachricht ist, dass Sie nicht Ihre gesamte Datenbank im Speicher ablegen müssen, um die meisten Leistungsvorteile von In-Memory zu nutzen. Sie speichern einfach den Satz Arbeitsdaten (die Daten, auf die am häufigsten zugegriffen wird) im Speicher.
Möglicherweise haben Sie einige Artikel gesehen, die bestimmte Zahlen dazu angeben, welcher Teil der Datenbank im Speicher gehalten werden soll, und zwar zwischen 10 % und 33 %. Die Wahrheit ist, dass es keine „Einheitsgröße“ gibt, die für alle passt. Die Datenmenge, die für den besten Leistungsvorteil in den Speicher passt, hängt von der Arbeitslast ab. Anstatt nach einer bestimmten „magischen“ Zahl zu suchen, überprüfen Sie die E/A, die die Datenbank im stabilen Zustand ausführt (normalerweise einige Stunden nach dem Start). Schauen Sie sich READ an, denn wenn sich die Datenbank im Speicher befindet, kann READ vollständig eliminiert werden. Das Schreiben muss immer stattfinden, egal wie viel Speicher Sie zur Verfügung haben.
Unten sehen Sie die E/A im InnoDB-E/A-Diagramm im InnoDBMetrics-Dashboard, das von Percona überwacht und verwaltet wird.
In der Tabelle oben sehen Sie den Gundam A-Gipfel von 2.000 E/A-Vorgängen pro Sekunde weist darauf hin, dass (zumindest für einige Teile der Arbeitslast) der Datenbankarbeitssatz nicht in den Speicher passt.
Wenn Ihre Datenbank nicht in den Speicher passt (auch wenn dies nicht der Fall ist), benötigen Sie dennoch schnellen Speicher, um Schreib- und Nachbearbeitungsvorgänge durchzuführen Start), um Leistungsprobleme zu vermeWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung voren. Heute ist SSD ein Synonym für schnellen Speicher.
Einige „Experten“ befürworten aus Kosten- oder Zuverlässigkeitsgründen immer noch die Verwendung rotierender Scheiben (mechanischer Scheiben). Ehrlich gesagt sind diese Argumente oft veraltet oder einfach falsch, wenn es um den Betrieb von Datenbanken geht. Heutzutage bieten SSDs beeindruckende Leistung und Zuverlässigkeit zu einem Premium-Preis.
Allerdings sind nicht alle SSDs geeignet. Für Datenbankserver sollten Sie eine SSD verwenden, die für Server-Workloads ausgelegt ist und die Daten schützt (z. B. bei einem Stromausfall). VermeWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung voren Sie kommerzielle SSDs, die für Desktop-Computer und Laptops entwickelt wurden.
SSDs, die über NVMe- oder Intel OpTan-Technologie verbunden sind, bieten die beste Leistung. Selbst bei einer Remote-Verbindung als SAN-, NAS- oder Cloud-Block-Gerät bieten SSDs im Vergleich zu rotierenden Festplatten immer noch eine überlegene Leistung.
Selbst Hochleistungsserver haben ihre Grenzen. Es gibt zwei Erweiterungsmethoden: nach oben und nach außen. Eine Skalierung bedeutet den Kauf weiterer Hardware. Dies kann teuer sein und die Hardware veraltet schnell. Die Skalierung zur Bewältigung einer größeren Last hat mehrere Vorteile:
Obwohl die horizontale Skalierung Vorteile hat, weist sie auch bestimmte Einschränkungen auf. Die Skalierung erfordert für die Datensynchronisierung eine Replikation, z. B. eine einfache MySQL-Replikation oder einen Percona XtraDB-Cluster. Im Gegenzug erhalten Sie jedoch zusätzliche Leistung und hohe Verfügbarkeit. Wenn Sie eine größere Skalierung benötigen, verwenden Sie MySQL-Sharding.
Sie müssen außerdem sicherstellen, dass mit der Clusterarchitektur verbundene Anwendungen die benötigten Daten finden können – normalerweise über einen Proxyserver und einen Lastausgleichsdienst (wie ProxySQL oder HAProxy).
Wenn Sie eine Skalierung planen, vermeWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung voren Sie eine zu frühe Skalierung. Die Arbeit mit verteilten Datenbanken ist tendenziell komplexer. Moderne Hardware und MySQL-Server ermöglichen Ihnen eine gute Erfahrung mit nur einem Server. Der kürzlich veröffentlichte Release CandWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vorate MySQL 8 zeigt, dass er mehr als 2 Millionen einfache Abfragen auf einem einzigen System verarbeiten kann.
Die besten Systeme werden unter Berücksichtigung der Beobachtbarkeit entwickelt – MySQL bildet da keine Ausnahme.
Sobald Sie Ihre MySQL-Umgebung eingerichtet, ausgeführt und richtig abgestimmt haben, können Sie sie nicht einfach einrichten und nicht verwalten. Datenbankumgebungen können von System- oder Arbeitslaständerungen betroffen sein. Seien Sie auf Überraschungen wie Verkehrsspitzen, Anwendungsfehler und MySQL-Ausfälle vorbereitet. Diese Dinge können und werden passieren.
Wenn Probleme auftreten, müssen Sie diese schnell und effektiv lösen. Der einzige Weg, dies zu erreichen, besteht darin, eine Art Überwachungslösung einzurichten und diese entsprechend zu initialisieren. Dadurch können Sie sehen, was in Ihrer Datenbankumgebung passiert, während diese in der Produktion läuft, und Serverdaten analysieren, wenn Probleme auftreten. Im Idealfall können Sie mit einem System Probleme verhindern, bevor sie auftreten oder sich so weit entwickeln, dass Benutzer ihre Auswirkungen erkennen können.
Zu den Überwachungstools gehören MySQL Enterprise Monitor, Monyog und Percona Monitoring and Management (PMM). Letzteres hat den zusätzlichen Vorteil, dass es kostenlos und Open Source ist. Diese Tools bieten eine hervorragende Bedienbarkeit für die Überwachung und Fehlerbehebung.
Da immer mehr Unternehmen auf Open-Source-Datenbanken (insbesondere MySQL) zurückgreifen, um ihre Geschäftsdaten in großen Produktionsumgebungen zu verwalten und bereitzustellen, müssen sie sich darauf konzentrieren, diese Datenbanken optimal zu optimieren und optimal laufen zu lassen. Wie bei allen Dingen, die für Ihre Geschäftsziele von entscheWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vorender Bedeutung sind, kann die Leistung Ihrer Datenbank über Ihre Geschäftsziele oder -ergebnisse entscheWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung voren. MySQL ist eine Datenbanklösung, die eine qualitativ hochwertige Datenbanklösung für Anwendungen und Websites bereitstellen kann. Sie muss jedoch an Ihre Bedürfnisse angepasst und überwacht werden, um Engpässe und Leistungsprobleme zu finden und zu verhindern.
Peter Zaitsev ist Mitbegründer und CEO von Percona, einem Anbieter von MySQL- und MongoDB-Lösungen und -Diensten der Enterprise-Klasse. „High Performance MySQL“, herausgegeben von O'Reilly, ist eines der beliebtesten MySQL-Performance-Bücher. Zaitsev bloggt häufig auf PerconaDatabasePerformanceBlog.com und spricht auf Konferenzen auf der ganzen Welt.
Dieser Artikel beschreibt 7 Tipps zur Verbesserung der MySQL-Leistung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Erklären Sie, was B/S und C/S sind
So implementieren Sie ein vertikales Menü über CSS3+HTML5
Das obige ist der detaillierte Inhalt vonWir stellen Ihnen 7 Tipps zur Verbesserung der MySQL-Leistung vor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!