Maison  >  Article  >  base de données  >  Exemple détaillé de la façon de résoudre le problème selon lequel MySQL occupe trop de mémoire

Exemple détaillé de la façon de résoudre le problème selon lequel MySQL occupe trop de mémoire

WBOY
WBOYavant
2022-07-06 14:03:122929parcourir

Cet article vous apporte des connaissances pertinentes sur mysql. Il résout principalement les problèmes liés à l'utilisation excessive de la mémoire. Deux systèmes, Windows et CentOS7, sont utilisés pour résoudre ce problème. J'espère que cela aidera tout le monde. .

Exemple détaillé de la façon de résoudre le problème selon lequel MySQL occupe trop de mémoire

Apprentissage recommandé : Tutoriel vidéo mysql

Avant-propos

Pour certains joueurs petits bourgeois, le nombre de serveurs et la mémoire sont souvent très limités. Par exemple, ma configuration de serveur personnel est de 2 cores 4G5M.

La mémoire 4G n'est vraiment pas si grande pour les joueurs Java. Il y a vraiment beaucoup de monde pour ouvrir quelques middlewares + propres microservices, et puis MySQL est une grosse erreur. MySQL sur ma machine locale n'occupe que quelques Mo de mémoire (même si je ne l'utilise pas beaucoup, MySQL sur cette machine est bel et bien ouvert) :

Exemple détaillé de la façon de résoudre le problème selon lequel MySQL occupe trop de mémoire

alors que le serveur occupe 400 Mo, donc il n'y a en fait aucun débit. Juste pour y jouer seul, l'utilisation de la mémoire est vraiment trop importante. . .

Solution

J'ai appris que l'utilisation de la mémoire de MySQL peut être réduite en modifiant la configuration, alors je l'ai essayé et enregistré. Comme j'ai deux serveurs en même temps, l'un est installé avec Windows Service 2016 et l'autre avec CentOS7. La situation sur les deux serveurs est similaire, je ferai donc deux enregistrements en même temps pour votre référence.

Trouver le fichier de configuration

Service Windows 2016

L'emplacement par défaut du fichier de configuration est C:ProgramDataMySQLMySQL Server 8.0my.ini S'il y a des modifications, recherchez-le en fonction de votre situation réelle.

CentOS7

Le chemin par défaut du fichier de configuration est /etc/my.cnf S'il y a une modification, vous pouvez la trouver en fonction de votre situation réelle.

Modifiez le fichier de configuration

Vous pouvez utiliser Ctrl + F pour effectuer une recherche sous Windows, et vous pouvez utiliser « /key » pour rechercher sous Linux. Si vous ne savez pas comment faire, vous pouvez vous référer à Baidu.

Il y a trois choses que nous devons trouver et modifier :

  1. Trouver table_definition_cache, nous l'avons modifié à 400table_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。

Exemple détaillé de la façon de résoudre le problème selon lequel MySQL occupe trop de mémoire

CentOS7

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

Exemple détaillé de la façon de résoudre le problème selon lequel MySQL occupe trop de mémoire

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

L'explication officielle est : le nombre de définitions de table qui peuvent être stockées dans le cache de définition (à partir du fichier .frm). Si vous utilisez un grand nombre de tables, vous pouvez créer un grand cache de définition de table pour accélérer l'ouverture des tables. Contrairement au cache de table ordinaire, le cache de définition de table occupe moins d'espace et n'utilise pas de descripteurs de fichiers. Les valeurs minimale et par défaut sont toutes deux de 400.

Trouver table_open_cache, nous l'avons changé en 256Exemple détaillé de la façon de résoudre le problème selon lequel MySQL occupe trop de mémoire

Chaque fois que MySQL ouvre une table, il lira certaines données dans le cache table_open_cache lorsque MySQL ne trouve pas les informations correspondantes dans celui-ci. cache Quand, il sera lu à partir du disque.

L'explication officielle est : le nombre de tables ouvertes pour tous les threads. Augmenter cette valeur augmente le nombre de descripteurs de fichiers requis par mysqld. Par conséquent, vous devez vous assurer que le nombre de fichiers autorisés à être ouverts est défini sur au moins 4096 dans la variable « limite de fichiers ouverts » dans la section [mysqld safe].

🎜Trouvez performance_schema et remplacez-le par off🎜🎜Si vous ne trouvez pas cela, ajoutez simplement performance_schema = off à l'endroit approprié. 🎜🎜 Utilisé pour surveiller la consommation des ressources, l'attente des ressources, etc. du serveur MySQL lors d'une opération de niveau inférieur, après la fermeture, cela peut réduire les coûts et ne modifiera pas le comportement du serveur. 🎜🎜Enregistrez et quittez après modification. 🎜🎜🎜Redémarrer MySQL🎜🎜🎜🎜Service Windows 2016🎜🎜🎜Démarrez la console en tant qu'administrateur, entrez net stop mysql, puis entrez net start mysql. 🎜🎜Après redémarrage, il occupait encore 62M. 🎜🎜Insérer la description de l'image ici🎜🎜🎜CentOS7🎜🎜 🎜 Entrez le service mysqld restart sur la console pour redémarrer. 🎜🎜Insérer la description de l'image ici🎜🎜Si ce n'est pas le cas fonctionne, vous pouvez essayer la commande /etc/init.d/mysqld restart. 🎜🎜Après le redémarrage, il prend 92 Mo, ce qui est un peu plus que celui de Windows. 🎜🎜🎜🎜🎜Postscript🎜🎜Cette méthode peut en effet réduire l'utilisation de la mémoire de MySQL, mais je réduis simplement les performances en échange de mémoire. Si les exigences de débit sont relativement élevées, elle ne peut certainement pas être modifiée directement de cette manière. doit être ajusté en fonction des besoins réels. 🎜

Apprentissage recommandé : Tutoriel vidéo mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer