web-dev-qa-db-fra.com

Optimiser MySQL pour lecture seule?

Nous avons 14 Go de CSV de 138 millions de lignes totales. J'ai d'abord importé cela dans une table mysql avec Innodb, puis j'ai essayé avec Myisam. Dans les deux cas, une simple sélection de la clé primaire (qui est juste une autocrated int) a pris 6-7 secondes, bien que Myisam était parfois un peu plus rapide à 5-6 secondes.

Nous n'avons besoin que d'écrire les données une fois et j'utilise MySQLIMPort. Dans cet esprit, comment puis-je améliorer la vitesse de la requête?

... Cela ne vaut rien que nous avons 2 concerts de RAM et tout est un tableau (et il doit rester de cette manière en raison de la nature des requêtes). Est-ce la meilleure performance que je Peut-être attendre compte tenu du matériel? Ou existe-t-il autre chose que je devrais essayer, comme la compression? Ou vraiment, j'ai besoin de beaucoup plus de RAM?

6
tiredofcoding

Format de myisam Row

Si la table est beaucoup de champs de varchar, j'aimerais suggérer les suivants

Pour chaque table myisam que vous chargez, faites-le au préalable

ALTER TABLE mytable ROW_FORMAT=Fixed;

Cela augmentera les performances de la requête jusqu'à 15-30% sans changer quoi que ce soit d'autre. L'effet secondaire de faire cela a des tables plus grandes et des index plus gros.

J'ai des messages précédents à ce sujet:

RAM accru

Si vous avez de nombreux index, vous pouvez augmenter RAM sur le serveur DB, puis tenter de précharger toutes les pages d'index MyISAM dans la mémoire tampon de clé.

Computer d'abord la taille d'un tampon de clé que vous souhaitez (en gigaoctets)

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

Si SuggestedKeyBufferSize peut être configuré pour le serveur DB, puis procédez comme suit (exemple 4G)

Étape 01) Définissez ceci dans /etc/my.cnf

[mysqld]
key_buffer_size=4G

Étape 02) Précharge tous les index MyISAM

Voir mon message sur la façon de faire ceci: MySQL Procédure chaude

2
RolandoMySQLDBA