2009-12-27 4 views
0

J'ai plusieurs grandes tables MyISAM (fichier de données d'environ 1,5 Go) que j'ai besoin d'optimiser de façon semi-régulière car les fichiers d'index deviennent énormes. L'opération OPTIMIZE prend beaucoup de temps. L'état de la requête pendant son exécution est "Réparer par tri". Comment puis-je améliorer les performances d'une instruction OPTIMIZE? Est-ce que l'augmentation de l'aide de sort_buffer va augmenter?Amélioration de la vitesse de MySQL Optimize Statement

+0

J'utilise la version 4.1 –

Répondre

1

Essayez de régler myisam_sort_buffer_size dans votre connexion, .: par exemple

set session myisam_sort_buffer_size = 52428800 
+0

Y at-il une raison particulière pour laquelle cela doit être réglé au cours de la session par opposition au fichier de configuration my.cnf? Si je règle la valeur à 1 Go, ce 1 Go sera-t-il TOUJOURS réservé, même si aucun optimisation n'est en cours? –

+0

Toute opération pouvant utiliser la mémoire offerte l'utiliserait. Vous ne voulez pas avoir plus de 80% de votre RAM dédiée à MySQL (bonne règle générale). Si vous avez des tonnes de RAM inutilisées, vous pouvez modifier le paramètre dans my.cnf, mais il y a de fortes chances que la RAM soit mieux utilisée par d'autres parties de MySQL (par exemple, cache de requêtes). Si vous placez tous vos tampons volumineux et les pires cas où tous les tampons sont réellement utilisés, la base de données peut s'arrêter lorsque le système d'exploitation commence à échanger fortement la RAM sur le disque. –

+0

Si je crée une connexion DB dans un script PHP, alors exécutez l'instruction de session SET, puis exécutez la commande optimize, est-ce que cela utiliserait la nouvelle valeur de myisam_sort_buffer_size? Une fois le script terminé, myisam_sort_buffer_size retournera-t-il à sa valeur par défaut? –