Strictement seule la RAM est importante?


4

Je dois travailler sur un projet qui aurait une très grande table avec des milliards d'enregistrements mais seulement deux champs l'un est l'identifiant et l'autre le texte.

Et id serait réglé à BIGINT et PK alors si 8 + 2 octets par ligne est utilisé pour indexer alors dans mon calcul 64 Go de RAM devrait être suffisant pour contenir au moins 5 milliards d'index.

Mais c'est seulement un facteur que je considère.

Pensez-vous qu'il y a d'autres facteurs que je devrais considérer?

Et la taille de la RAM peut également être augmentée si nécessaire. Et cette table serait la table la plus occupée avec peu d'écritures et beaucoup de lectures.

+1

Puis-je demander un peu plus d'informations sur ce projet? A quoi sert cette table? Quel problème essayez-vous de résoudre? 15 sept.. 112011-09-15 07:14:14

3

Vous devez prendre en compte le moteur de stockage que vous utiliserez pour votre projet, car MySQL met en cache différemment pour chaque moteur de stockage. MyISAM ne met en mémoire cache que les pages d'index.

InnoDB met en cache les données et les pages d'index. Étant donné que vous avez une table avec des identifiants volumineux, j'espère que vous utilisez MyISAM.

Voici une requête pour vous aider à déterminer la meilleure key_buffer_size:

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) 
recommended_key_buffer_size FROM 
(SELECT LEAST(POWER(2,32),KBS1) KBS 
FROM (SELECT SUM(index_length) KBS1 
FROM information_schema.tables 
WHERE engine='MyISAM' AND 
table_schema NOT IN ('information_schema','mysql')) AA) A, 
(SELECT 2 PowerOf1024) B; 

Cela donnera le paramètre recommandé pour MyISAM Key Cache (key_buffer_size) compte tenu de votre ensemble de données en cours (the query will cap the recommendation at 4G (4096M). Pour OS 32 bits, 4 Go est la limite. Si vous utilisez InnoDB, le dimensionnement de la key_buffer_size ne sera pas utile pour 64 bits, 8 Go.

MISE À JOUR 2011-09-16 14:49 EDT

. InnoDB and MyISAM cache differently.

est ici le même genre de requête à la taille de votre InnoDB Tampon Piscine:

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size 
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables 
WHERE engine='InnoDB') A, 
(SELECT 2 PowerOf1024) B; 
  0

Fait intéressant, je pense à utiliser InnoDB parce qu'il fonctionne mieux sous charge. Donc, ce que j'ai appris de votre réponse est que tant qu'il y a assez de cache de clés. La taille de la base de données n'a pas d'importance? 16 sept.. 112011-09-16 16:56:43

  0

J'ai mis à jour ma réponse à l'adresse en utilisant InnoDB 16 sept.. 112011-09-16 18:49:40

  0

Mais comme vous l'avez mentionné que la limite maximale est de 8 Go pour MyISAM, cela signifie-t-il que les ressources RAM ne seront pas utilisées efficacement? {Désolé de poser cette question trop tard ..} 01 oct.. 112011-10-01 22:14:09

+1

@Gary: Vous avez raison. La mémoire allouée au-dessus de 8GB pour key_buffer_size est gaspillée. Ceci est critique car seules les pages d'index sont mises en cache pour MyISAM. Vous pouvez créer des caches de clés dédiés à des tables MyISAM spécifiques: http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 oct.. 112011-10-01 22:41:42