2009-01-19 6 views
1

Salut le système J'utilise Mysql 5.0.xTables à langer de MyISAM à InnoDB font lente

Je viens de changer beaucoup de tables de MyISAM à InnoDB

Avec les tables MyISAM il a fallu environ 1 minute installer notre base de données Avec InnoDB, il faut environ 15 minutes installer la même base de données

Pourquoi le InnoDB si long?

Que puis-je faire pour accélérer les choses?

La base de données d'installation fait les étapes suivantes

1) supprime le schéma

2) Créer le schéma

3) Créer des tables

4) Créer des procédures stockées

5) Insérer les données par défaut

6) Insérer des données via la procédure stockée

EDIT:

des données L'Insertion par défaut prend la plupart du temps

+0

Quelle étape prend la majorité du temps? – Zoredache

Répondre

5

Modifier l'étape Insérer des données pour démarrer une transaction au début et à l'engager au fin. Vous obtiendrez une amélioration, je le garantis. (Si vous avez beaucoup de données, vous voudrez peut-être diviser la transaction par table.)

Si votre application n'utilise pas de transactions du tout, vous devez régler le paramètre innodb_flush_log_at_trx_commit sur 2. Cela vous donnera Il y a beaucoup de performances en retour car vous aurez presque certainement activé auto_commit et cela générera beaucoup plus de transactions que les paramètres par défaut d'InnoDB. Ce paramètre l'empêche de vider inutilement les tampons de disque à chaque validation.

+0

Je suis d'accord avec vous sur "innodb_flush_log_at_trx_commit" ,. pour les cas où InnoDB est utilisé comme remplacement de place pour MyISAM, alors c'est une meilleure option. –

+1

Et une autre chose., Insérez les données dans la table innodb dans l'ordre des clés primaires. –

3

15 minutes ne semble pas excessive pour moi. Après tout, c'est un coût ponctuel.

Je ne suis pas certain, mais j'imagine qu'une partie de l'explication est l'intégrité référentielle n'est pas libre. InnoDB doit faire plus de travail pour le garantir, donc bien sûr cela prendrait plus de temps. Il se peut que votre script doive être modifié pour ajouter des contraintes après la création des tables.

+1

Peut-être envisager d'utiliser une seule transaction au lieu de validation automatique. – falstro

+0

@roe - merci - La transaction unique rend les choses beaucoup plus rapides –

0

Comme dit duffymo, désactivez vos contraintes (index et clés étrangères/primaires) avant d'insérer les données.

Peut-être que vous devriez restaurer certains indices avant que les données insérées par la procédure stockée, si son utilisation beaucoup de sélectionner déclarations

Questions connexes