L'utilisation maximale de la mémoire de MySQL dépend beaucoup du matériel, de vos paramètres et de la base de données elle-même.
Matériel
Le matériel est la partie évidente. Plus il y a de RAM, plus les disques sont fous, plus rapides sont les ftw . Ne croyez pas ces lettres d'information mensuelles ou hebdomadaires. MySQL ne s'adapte pas de manière linéaire, même pas sur le matériel Oracle. C'est un peu plus compliqué que ça.
L'essentiel est: il n'y a pas de règle générale pour ce qui est recommandé pour votre configuration MySQL. Tout dépend de l'utilisation actuelle ou des projections.
Paramètres et base de données
MySQL propose d'innombrables variables et commutateurs pour optimiser son comportement. Si vous rencontrez des problèmes, vous devez vraiment vous asseoir et lire le manuel (f'ing).
Quant à la base de données - quelques contraintes importantes:
- moteur de table (
InnoDB
, MyISAM
, ...)
- Taille
- indices
- usage
La plupart des conseils MySQL sur le stackoverflow vous indiqueront environ 5 à 8 paramètres dits importants. Tout d'abord, ils n'ont pas tous d'importance - par exemple, allouer beaucoup de ressources à InnoDB et ne pas utiliser InnoDB n'a pas beaucoup de sens parce que ces ressources sont gaspillées.
Ou - beaucoup de gens suggèrent d'augmenter la max_connection
variable - eh bien, ils ne savent pas que cela implique également que MySQL allouera plus de ressources pour répondre à ces besoins max_connections
- si jamais nécessaire. La solution la plus évidente peut être de fermer la connexion à la base de données dans votre DBAL ou d'abaisser le wait_timeout
pour libérer ces threads.
Si vous comprenez ma dérive - il y a vraiment beaucoup, beaucoup de choses à lire et à apprendre.
Moteurs
Les moteurs de table sont une décision assez importante, beaucoup de gens les oublient très tôt et se retrouvent soudainement à se battre avec une MyISAM
table de 30 Go qui verrouille et bloque toute leur application.
Je ne veux pas dire que MyISAM est nul , mais InnoDB
peut être modifié pour répondre presque ou presque aussi vite que MyISAM
et offre des choses telles que le verrouillage de ligne UPDATE
alors que MyISAM
verrouille toute la table lorsqu'elle est écrite.
Si vous êtes libre d'exécuter MySQL sur votre propre infrastructure, vous voudrez peut-être également consulter le serveur percona, car parmi les nombreuses contributions d'entreprises comme Facebook et Google (elles savent rapidement), il inclut également la propre goutte de Percona. en remplacement de InnoDB
, appelé XtraDB
.
Voir mon essentiel pour la configuration du serveur percona (et du client) (sur Ubuntu): http://gist.github.com/637669
Taille
La taille de la base de données est très, très importante - croyez-le ou non, la plupart des utilisateurs d'Intarwebs n'ont jamais manipulé une configuration MySQL volumineuse et intense, mais celles-ci existent vraiment. Certaines personnes vont troller et dire quelque chose comme «Utilisez PostgreSQL! 111», mais ignorons-les pour le moment.
L'essentiel est: à en juger par la taille, la décision concernant le matériel doit être prise. Vous ne pouvez pas vraiment faire fonctionner une base de données de 80 Go rapidement sur 1 Go de RAM.
Les indices
Ce n'est pas: plus on est de fous. Seuls les indices nécessaires doivent être définis et l'utilisation doit être vérifiée avec EXPLAIN
. Ajoutez à cela que MySQL EXPLAIN
est vraiment limité, mais c'est un début.
Configurations suggérées
À propos de ceux-ci my-large.cnf
et des my-medium.cnf
fichiers - je ne sais même pas pour qui ils ont été écrits. Roulez le vôtre.
Apprêt de réglage
Un bon début est l' amorce de réglage . C'est un script bash (indice: vous aurez besoin de linux) qui prend la sortie de SHOW VARIABLES
et SHOW STATUS
et l'enveloppe dans une recommandation, espérons-le utile. Si votre serveur a fonctionné un certain temps, la recommandation sera meilleure car il y aura des données sur lesquelles les baser.
Cependant, l'amorce d'accord n'est pas une sauce magique. Vous devriez toujours lire toutes les variables qu'il suggère de changer.
En train de lire
J'aime vraiment recommander le mysqlperformanceblog . C'est une excellente ressource pour toutes sortes de conseils liés à MySQL. Et ce n'est pas seulement MySQL, ils en savent aussi beaucoup sur le bon matériel ou recommandent des configurations pour AWS, etc. Ces types ont des années et des années d'expérience.
Une autre excellente ressource est , bien sûr, planet-mysql .