2012-07-31 2 views
22

Existe-t-il un moyen de déterminer si un index mysql s'intègre entièrement dans la mémoire disponible? Si oui, comment pourrais-je:Comment savoir si l'index mysql s'adapte entièrement en mémoire

  • Déterminer la taille des index de MySQL
  • Déterminer la mémoire disponible pour l'application
  • Déterminer si les indices correspondent entièrement à la mémoire

Répondre

16

Dépend Storage Engine

MyISAM (Caches Index Pages De fichiers .MYI)

SELECT FLOOR(SUM(index_length)/POWER(1024,2)) IndexSizesMB 
FROM information_schema.tables WHERE engine='MyISAM' AND 
table_schema NOT IN ('information_schema','performance_schema','mysql'); 

Soustraire que de key_buffer_size. Si la réponse> 0, puis sur Oui

InnoDB (Caches données et pages d'index)

SELECT FLOOR(SUM(data_length+index_length)/POWER(1024,2)) InnoDBSizeMB 
FROM information_schema.tables WHERE engine='InnoDB'; 

Soustraire que de innodb_buffer_pool_size. Si la réponse> 0, puis sur Oui

je l'ai écrit à ce sujet dans le DBA StackExchange

Sur un serveur dédié DB, assurez-vous que InnoDBSizeMB+IndexSizesMB ne dépasse pas 75% de la RAM.

+0

Merci, est-ce que ce qui suit vous semble réaliste? 'innodb_buffer_pool_size = 134217728' -' above-query = 283164672' = '-148946944'. Si c'est le cas, devrais-je augmenter mon 'innodb_buffer_pool_size', ou quelle serait la prochaine étape ici? – David542

+1

Votre pool de mémoire tampon est 128M. Votre InnoDBSize est 270M. Donc, augmentez 'innodb_buffer_pool_size' à 300M. – RolandoMySQLDBA

+0

J'ai refait la requête pour faire MB au lieu de Bytes. – RolandoMySQLDBA

2

Pour trouver la mémoire disponible pour MySQL , regardez dans my.cnf, probablement situé à: /etc/mysql/my.cnf

key_buffer_size = 264M 

Pour trouver la taille des index pour une table: SHOW TABLE status FROM [DBNAME]

+0

Dans mon fichier my.cnf, je n'ai aucune option liée à la mémoire définie. Quelle est l'option spécifique ici qui devrait être définie? – David542

Questions connexes