2010-12-04 16 views
2

Quelqu'un a une idée sur les points suivants:MySQL 5.1 Mémoire Tableau

Je courais MySQL 5.1 sur une installation et Linux 64 bits ont créé un couple de table de mémoire. Le documentation pour les tables de mémoire de MySQL indique que la RAM ne sera pas "libérée" jusqu'à ce que la table soit droppée ou tronquée. J'ai abandonné toutes ces tables, mais l'utilisation de la RAM (à partir de la commande top) n'a pas baissé un peu, même après plusieurs heures (90% sur 48 Go après avoir déposé les tables). Il a progressé pendant quelques jours avec plusieurs tables créées et abandonnées.

Merci, James

+0

Merci pour toute l'aide. Je n'ai toujours pas trouvé un moyen de libérer la RAM de manière fiable sans écraser le serveur (charger trop dans le RAM et le serveur se réinitialise). – James

Répondre

1

Il est possible que le système d'exploitation n'a pas encore rincée ces pages de RAM. Essayez d'utiliser la mémoire dans un autre processus et de voir si les chiffres descendent pour le processus du serveur MySQL.

+0

C'est ce que j'avais deviné, mais il semblerait que je sois tombé sur le serveur. C'était à 90% de RAM, j'ai alloué une nouvelle table puis la réinitialisation du serveur mysql (toutes les requêtes ouvertes ont également été supprimées ...). J'ai créé une table qui a pris 45% de RAM depuis le haut et l'ai abandonnée il y a environ 4-5 heures, mais elle est toujours utilisée. J'ai demandé sur les forums MySQL mais pas de réponses de ceux pour le moment non plus. – James

0

Vous pouvez envisager d'utiliser des tables MyISAM dans un tmpfs à la place. L'inconvénient est que vous devrez les recréer à chaque redémarrage du serveur (les tables du gestionnaire de mémoire persistent elles-mêmes lors d'un redémarrage).

MyISAM est beaucoup plus d'espace efficace que le moteur de la mémoire, et probablement tout aussi rapide sur certaines charges de travail (vous aurez envie de le tester sur un système non-production)

Vous voulez probablement essayer de diagnostiquer exactement ce qui utilise la mémoire - ce ne sont peut-être pas les tables de mémoire. Malheureusement, savoir ce qui utilise la mémoire dans MySQL est difficile.

La mémoire des tables de mémoire doit être libérée, mais il est possible qu'elle ne puisse pas être libérée en raison de la fragmentation, c'est-à-dire que d'autres types de mémoire sont alloués entre les espaces. Normalement, les "grosses" allocations dans MySQL apparaissent au démarrage (par exemple, le pool de tampons innodb) mais si vous avez mal configuré my.cnf, elles pourraient arriver plus tard aussi.

Essayez de poster cette question avec votre my.cnf sur serverfault.

+0

Merci pour la suggestion. Je vais essayer de voir ce qui se passe. Nous n'utilisons aucune table InnoDB ici, juste MyISAM et quelques tables de mémoire. – James

0

La dernière fois que j'ai utilisé une table MEMORY était il y a 4 ans et je pense que nous avons résolu le problème en utilisant la commande OPTIMIZE TABLE. Je ne trouve pas de documentation en ligne pour confirmer que ça fonctionne: S, mais essayez-le et voyez si ça aide. En dehors de cela, Ebay a publié un correctif pour que la table MEMORY ait des lignes dynamiques au lieu des lignes fixes. Cela signifie qu'ils prendront moins de mémoire. Il est également (récemment) disponible dans le serveur Percona http://www.mysqlperformanceblog.com/2011/09/06/dynamic-row-format-for-memory-tables/

+0

Whoa. Ancienne question, mais commentaire utile. J'ajoute une mise à jour à la question principale afin que les gens la trouvent s'ils rencontrent cette page. – James