Heim  >  Artikel  >  Datenbank  >  Detailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht

Detailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht

WBOY
WBOYnach vorne
2022-07-06 14:03:122999Durchsuche

Dieser Artikel bringt Ihnen relevantes Wissen über MySQL. Er löst hauptsächlich zwei Systeme, Windows und CentOS7, um dieses Problem zu lösen .

Detailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht

Empfohlenes Lernen: MySQL-Video-Tutorial

Vorwort

Für einige Kleinbürger sind die Anzahl der Server und der Speicher oft sehr begrenzt. Meine persönliche Serverkonfiguration ist beispielsweise 2 Kerne 4G5M.

4G-Speicher ist für Java-Spieler wirklich nicht so groß. Es ist wirklich überfüllt, ein paar Middleware + eigene Microservices zu öffnen, und dann ist MySQL ein großer Fehler. MySQL auf meinem lokalen Computer belegt nur ein paar MB Speicher (obwohl ich es nicht oft verwende, ist MySQL auf diesem Computer tatsächlich geöffnet):

Detailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht

Während der Server 400 MB belegt, gibt es tatsächlich keinen Durchsatz. Nur um es alleine zu spielen, ist der Speicherverbrauch wirklich zu hoch. . .

Lösung

Ich habe gelernt, dass die Speichernutzung von MySQL durch Ändern der Konfiguration reduziert werden kann, also habe ich es ausprobiert und aufgezeichnet. Da ich zwei Server gleichzeitig habe, ist einer mit Windows Service 2016 und der andere mit CentOS7 installiert. Die Situation auf beiden Servern ist ähnlich, daher werde ich zu Ihrer Referenz zwei Datensätze gleichzeitig erstellen.

Suchen Sie die Konfigurationsdatei

Windows Service 2016

Der Standardspeicherort der Konfigurationsdatei ist C:ProgramDataMySQLMySQL Server 8.0my.ini. Wenn es Änderungen gibt, suchen Sie sie entsprechend Ihrer tatsächlichen Situation.

CentOS7

Der Standardpfad der Konfigurationsdatei ist /etc/my.cnf. Wenn es Änderungen gibt, können Sie diese entsprechend Ihrer tatsächlichen Situation finden.

Ändern Sie die Konfigurationsdatei

Sie können Strg + F verwenden, um unter Windows zu suchen, und Sie können die Taste „/“ verwenden, um unter Linux zu suchen. Wenn Sie nicht wissen, wie, können Sie sich an Baidu wenden.

Es gibt drei Dinge, die wir finden und ändern müssen:

  1. Suchen Sie table_definition_cache, wir haben ihn auf 400 geänderttable_definition_cache,我们修改为400

    官方解释为:可以存储在定义缓存中的表定义数(来自.frm文件)。如果使用大量表,可以创建大型表定义缓存以加快表的打开速度。与普通的表缓存不同,表定义缓存占用更少的空间,并且不使用文件描述符。最小值和默认值均为400。

  2. 找到 table_open_cache,我们修改为256

    MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。

    官方解释为:所有线程的打开表数。增加该值会增加mysqld所需的文件描述符的数量。因此,您必须确保在[mysqld safe]部分的变量“open files limit”中将允许打开的文件量设置为至少4096。

  3. 找到 performance_schema ,修改为off

    如果找不到这个的话,直接在合适的地方加上 performance_schema = off 即可。

    用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况,关闭之后可以节省开销,不会使server的行为发生变化。

修改完之后保存退出。

重启MySQL

Windows Service 2016

以管理员身份启动控制台,输入 net stop mysql,然后再输入 net start mysql。

重启之后还占62M。

Detailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht

CentOS7

控制台输入 service mysqld restart 即可重启。

Detailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht

如果不行的话,可以试试 /etc/init.d/mysqld restart

Die offizielle Erklärung lautet: die Anzahl der Tabellendefinitionen, die im gespeichert werden können Definitionscache (aus der .frm-Datei). Wenn Sie eine große Anzahl von Tabellen verwenden, können Sie einen großen Tabellendefinitionscache erstellen, um das Öffnen von Tabellen zu beschleunigen. Im Gegensatz zum gewöhnlichen Tabellencache benötigt der Tabellendefinitionscache weniger Platz und verwendet keine Dateideskriptoren. Der Mindest- und der Standardwert betragen jeweils 400.

Finden Sie table_open_cache, wir haben es in 256 geändert. Detailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht

Jedes Mal, wenn MySQL eine Tabelle öffnet, werden einige Daten in den table_open_cache-Cache gelesen, wenn MySQL die entsprechenden Informationen darin nicht finden kann Cache Wenn es von der Festplatte gelesen wird.

Die offizielle Erklärung lautet: die Anzahl der offenen Tische für alle Threads. Durch Erhöhen dieses Werts erhöht sich die Anzahl der von mysqld benötigten Dateideskriptoren. Daher müssen Sie sicherstellen, dass die Anzahl der Dateien, die geöffnet werden dürfen, in der Variable „open files limit“ im Abschnitt [mysqld safe] auf mindestens 4096 eingestellt ist.

🎜Suchen Sie performance_schema und ändern Sie es in „off“🎜🎜Wenn Sie dies nicht finden können, fügen Sie einfach performance_schema = off an der entsprechenden Stelle hinzu. 🎜🎜 Wird zur Überwachung des Ressourcenverbrauchs, des Wartens auf Ressourcen usw. des MySQL-Servers während eines Vorgangs auf niedrigerer Ebene verwendet. Nach dem Schließen können Kosten gespart werden, ohne dass sich das Verhalten des Servers ändert. 🎜🎜Speichern und nach der Änderung beenden. 🎜🎜🎜MySQL neu starten🎜🎜🎜🎜Windows Service 2016🎜🎜🎜Starten Sie die Konsole als Administrator, geben Sie „net stop mysql“ und dann „net start mysql“ ein. 🎜🎜Nach dem Neustart waren immer noch 62 MB belegt. 🎜🎜Bildbeschreibung hier einfügen🎜🎜🎜CentOS7🎜🎜 🎜 Geben Sie service mysqld restart auf der Konsole ein, um neu zu starten. 🎜🎜Bildbeschreibung hier einfügen🎜🎜Wenn das nicht der Fall ist funktioniert, können Sie den Befehl /etc/init.d/mysqld restart ausprobieren. 🎜🎜Nach dem Neustart benötigt es 92 MB, was etwas mehr ist als das von Windows. 🎜🎜🎜🎜🎜Postscript🎜🎜Diese Methode kann zwar die Speichernutzung von MySQL reduzieren, aber ich reduziere nur die Leistung im Austausch gegen Speicher. Wenn die Durchsatzanforderungen relativ hoch sind, kann sie auf diese Weise sicherlich nicht direkt geändert werden müssen entsprechend den tatsächlichen Anforderungen angepasst werden. 🎜

Empfohlenes Lernen: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel zur Lösung des Problems, dass MySQL zu viel Speicher beansprucht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen