L'utilisation maximale de la mémoire de MySQL dépend beaucoup du matériel, de vos paramètres et 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 joyeux et rapides ftw . Ne croyez pas ces lettres de nouvelles mensuelles ou hebdomadaires cependant. MySQL n'évolue pas de manière linéaire - pas même 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 (putain) manuel.
Quant à la base de données -- quelques contraintes importantes :
- moteur de table (
InnoDB
,MyISAM
, ...) - taille
- indices
- utilisation
La plupart des conseils MySQL sur stackoverflow vous indiqueront environ 5 à 8 paramètres dits importants. Tout d'abord, tous n'ont pas d'importance - par ex. allouer beaucoup de ressources à InnoDB et ne pas utiliser InnoDB n'a pas beaucoup de sens car ces ressources sont gaspillées.
Ou - beaucoup de gens suggèrent d'augmenter le max_connection
variable - eh bien, ils ne savent pas que cela implique également que MySQL allouera plus de ressources pour répondre à ces max_connections
-- si jamais nécessaire. La solution la plus évidente pourrait être de fermer la connexion à la base de données dans votre DBAL ou de réduire le wait_timeout
pour libérer ces fils.
Si vous me comprenez, il y a vraiment beaucoup de choses à lire et à apprendre.
Moteurs
Les moteurs de table sont une décision assez importante, beaucoup de gens les oublient tôt et se retrouvent soudainement à se battre avec un MyISAM
de 30 Go table qui verrouille et bloque toute leur application.
Je ne veux pas dire MyISAM craint , 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 sur UPDATE
alors que MyISAM
verrouille toute la table lors de l'écriture.
Si vous êtes libre d'exécuter MySQL sur votre propre infrastructure, vous pouvez également consulter le serveur percona
car parmi les nombreuses contributions d'entreprises comme Facebook et Google (ils savent vite), cela inclut également le remplacement direct de Percona pour InnoDB
, appelé XtraDB
.
Voir mon essentiel pour la configuration de percona-server (et -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 gens sur les Intarwebs n'ont jamais géré une configuration MySQL importante et intense en écriture, mais celles-ci existent vraiment. Certaines personnes trolleront et diront quelque chose comme "Utilisez PostgreSQL!!!111", mais ignorons-les pour l'instant.
L'essentiel est le suivant :à en juger par la taille, une décision concernant le matériel doit être prise. Vous ne pouvez pas vraiment faire fonctionner rapidement une base de données de 80 Go avec 1 Go de RAM.
Indices
Ce n'est pas le cas :plus il y en a, mieux c'est. Seuls les index 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 ces my-large.cnf
et my-medium.cnf
fichiers - je ne sais même pas pour qui ils ont été écrits. Roulez vous-même.
Introduction au réglage
Un bon début est le l'introduction au 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 utile, espérons-le. Si votre serveur a fonctionné un certain temps, la recommandation sera meilleure car il y aura des données sur lesquelles les baser.
L'amorce de réglage n'est cependant pas une sauce magique. Vous devriez toujours lire toutes les variables qu'il suggère de changer.
Lecture
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 gars ont des années et des années d'expérience.
Une autre excellente ressource est planet-mysql , bien sûr.