Wenn es um die Optimierung der Datenbankleistung geht, ist es am wichtigsten, die richtige auszuwählen. Sie sollten entscheiden, ob Ihre Anwendung eine relationale oder nicht relationale Datenbank erfordert. Selbst innerhalb eines Genres stehen Ihnen mehrere Optionen zur Auswahl. Neben relationalen Datenbanken finden Sie möglicherweise Oracle, MySQL, SQL Server und PostgreSQL. Andererseits führten nicht-relationale Datenbanken MongoDB, Cassandra und CouchDB ein.
Vielleicht möchte ich Ihnen vorschlagen, eine nicht relationale Datenbank für eine schnellere Lese-/Schreibleistung zu verwenden. Mit einigen Verbesserungen und Optimierungen können Sie jedoch eine relationale Datenbank über ihre bekannten Grenzen hinaus erweitern. Deshalb stelle ich Ihnen in diesem Artikel einige Tipps vor, um Ihre MySQL-Datenbank schneller zu machen.
Wenn Sie sich konkret fragen, warum Sie MySQL verwenden sollten, ist die Antwort einfach, denn es ist kostenlos, Open Source und in der PHP-Community sehr beliebt, während Oracle aufgrund seines hohen Preises nicht weit verbreitet ist. Andere Optionen sind weniger beliebt als MySQL.
- MySQL-Server-Konfiguration:
Nun, zunächst sollten Sie wissen, wo sich die Konfigurationsdateien abhängig von Ihrem Betriebssystem befinden. Auf Linux-Systemen befindet es sich in „/etc/mysql/my.cnf“.
Jetzt ist es an der Zeit, Ihre Engine InnoDB und MyISAM auszuwählen. Um die Auswahl zu erleichtern, sollten Sie wissen, dass InnoDB in MySQL 5.5 zur Standard-Engine wurde, da es „Sperren auf Zeilenebene, Fremdschlüssel und Transaktionen“ unterstützt, während MyISAM keine der genannten Funktionen unterstützt, was es selten nützlich macht modernes Anwendungsprogramm.
Nachdem Sie die richtige Engine ausgewählt haben, ist es an der Zeit, einige Konfigurationsvariablen in der my.cnf-Datei festzulegen.
max_connection-Variable:
max_connection-Variable stellt die Anzahl der von der Anwendung zugelassenen Verbindungen dar. Der Standardwert beträgt 151 Verbindungen. Wenn Sie jedoch die Fehlermeldung „MySQL-Fehler, zu viele Verbindungen…“ erhalten, können Sie diese Zahl problemlos erhöhen Im Speicher Ihres Servers teilt diese Variable MySQL mit, wie viele Gigabyte es verwenden kann. Diese Variable ist nützlich, wenn Sie große Blobs in der Datenbank speichern. Sie können dies auf 80–90 % des Serverspeichers festlegen. Wenn Ihr Server also über 16 GB Arbeitsspeicher verfügt, können Sie ihn auf 14 GB einstellen.
最大连接数 = 170
innodb_io_capacity-Variable:
Diese Variable teilt MySQL mit, wie viele Eingabe-/Ausgabeoperationen es verwenden kann. Dies hängt von Ihrer Festplatte ab. Beispielsweise ist ein einzelnes 7200-RPM-Laufwerk auf 200 I/O begrenzt, während eine Unternehmens-SSD-Festplatte auf 50.000 I/O begrenzt ist. Sie können die Ein-/Ausgabewerte ganz einfach über die Befehlszeile Ihres Betriebssystems finden und die Variablen auf 90 % der verfügbaren E/A festlegen, damit MySQL nie zu viele E/A-Vorgänge verwendet.
innodb_buffer_pool_size = 14GB
query_cache_limit- und query_cache_size-Variablen:
MySQL unterstützt auch das Zwischenspeichern von Daten im Speicher, wir können uns jedoch nicht darauf als Caching-System verlassen, da MySQL jedes Mal, wenn Ihr Programm Daten in die Datenbanktabelle schreibt, den gesamten Abfragecache neu aufbaut für den Tisch. Wenn Ihr Programm also stark ausgelastet ist, ist der MySQL-Cache völlig nutzlos. In diesem Fall ist es besser, beide Variablen auf 0 zu setzen, um den Overhead des MySQL-Cache zu sparen. Stattdessen können Sie etwas wie Redis verwenden, um den Cache zu verwalten .
innodb_io_capacity = 21000
Protokoll langsamer Abfragen:
Das Protokoll langsamer Abfragen zeigt Ihnen, welche Ihrer Abfragen Ihren definierten Schwellenwert überschreiten, sodass Sie nicht mehr raten müssen, welche Abfrage langsamer ist.
Zuerst müssen Sieslow_query_log
in Ihrer Konfigurationsdatei aktivieren. Öffnen Sie auf dem Linux-Server „/etc/mysql/my.cnf“ oder die entsprechende Datei auf Ihrem System. Und fügen Sie hinzu: query_cache_limit = 0
query_cache_size = 0
slow_query_log = 1 long_query_time = 1
Dann finden Sie Ihre Protokolle in der Tabelle „slow_log“. Dort sehen Sie Informationen zu allen langsamen Abfragen, die länger als eine Sekunde ausgeführt wurden. Zu diesen Informationen gehören die genaue Ausführungszeit und die Anzahl der von der Abfrage betroffenen Zeilen sowie der Benutzer, der sie ausgeführt hat. slow_query_log
。在Linux服务器中,打开 「/etc/mysql/my.cnf」或者你系统上同等的文件。
并添加:
log_output = 'TABLE'
那么,这两个选项将启用慢查询日志,并记录任何需要超过一秒的查询。如果你喜欢在一个表中而不是在一个文件中查看日志,你可以添加:
rrreee然后你可以在「slow_log」表中找到你的日志。你可以在那里看到所有执行超过一秒的慢查询的信息。这些信息包括查询的确切执行时间和受影响的行数,以及哪个用户执行的它。
查询优化
在你得到所有的慢查询后,你需要一种方式来优化它们,使它们更快。因此,你可以在查询语句前面加上「explain」关键词,从而获得相关查询的详情信息,例如:explain select * from users where active=1;
Nachdem Sie alle Ihre langsamen Abfragen erhalten haben, benötigen Sie eine Möglichkeit, sie zu optimieren, um sie schneller zu machen. Daher können Sie das Schlüsselwort „explain“ vor der Abfrageanweisung hinzufügen, um detaillierte Informationen über die relevante Abfrage zu erhalten, zum Beispiel: explain select * from user where active=1;
"explain" Schlüsselwort Kann Ihnen dabei helfen, zu definieren, welche Indizes die Abfrage trifft und wie viele Zeilen abgefragt werden müssen, um die Daten zu erhalten. Anhand dieser Informationen können Sie erkennen, ob Sie weitere Indizes erstellen oder die Datenbanktabellen neu strukturieren müssen.
Denormalisierung ist der Prozess der Verbesserung der Leseleistung durch Hinzufügen oder Gruppieren redundanter Daten. Wenn Sie beispielsweise eine Tabelle „Produkte“ und eine Tabelle „Kategorie“ haben und jedes Mal, wenn Sie die Tabelle „Produkte“ abfragen, müssen Sie auch den „Kategorienamen“ jedes Produkts abrufen. In diesem Fall können Sie „join“ verwenden, um „category_name“ abzurufen. Dies bedeutet jedoch, dass jedes Mal, wenn der Benutzer die Produktseite öffnet, eine komplexe Join-Abfrage ausgeführt wird. Daher können Sie erwägen, der Tabelle „Produkte“ einen „Kategorienamen“ hinzuzufügen. Trotz der redundanten Daten lohnt sich die Steigerung der Leseleistung.
Die Nicht-Normalisierungsmethode kann dazu führen, dass der „Kategoriename“ in der Tabelle „Produkt“ veraltet ist. Sie müssen also eine „Fremdschlüssel“-Einschränkung definieren, müssen sich aber darüber im Klaren sein, dass ein „Fremdschlüssel“ die Schreibleistung etwas verlangsamt, da MySQL die Einschränkung überprüfen muss, bevor die Daten geschrieben werden. Es ist also immer Ihre Aufgabe, die beste Wahl zu treffen.
Englische Originaladresse: https://codeburst.io/database-performance-optimization-8d8407808b5b
Übersetzungsadresse: https://learnku.com/mysql/t/71571
[Verwandte Empfehlungen: MySQL-Video Anleitung】
Das obige ist der detaillierte Inhalt vonWie optimiert man die Leistung von MySQL? Teilen von Optimierungstipps. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!