Question

Bonjour, j'utilise Mysql 5.0.x

Je viens de changer beaucoup de tables de MyISAM à InnoDB

Avec les tables MyISAM, l'installation de notre base de données a pris environ 1 minute . Avec InnoDB, il faut environ 15 minutes pour installer la même base de données

.

Pourquoi InnoDB prend-il tant de temps?

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

L’installation de la base de données effectue les étapes suivantes

1) Supprime le schéma

2) Créez le schéma

3) Créer des tableaux

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

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

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

EDIT:

L'insertion de données par défaut prend presque tout le temps

Était-ce utile?

La solution

Modifiez l'étape Insérer des données pour démarrer une transaction au début et la valider à la fin. Vous obtiendrez une amélioration, je vous le garantis. (Si vous avez beaucoup de données, vous pouvez diviser la transaction en tables.)

Si votre application n'utilise pas du tout de transactions, vous devez définir le paramètre innodb_flush_log_at_trx_commit sur 2. Cela vous donnera beaucoup de performances car vous obtiendrez certainement l'auto_commit activée. Beaucoup plus de transactions que les paramètres par défaut d'InnoDB sont configurés. Ce paramètre empêche le vidage inutile des tampons de disque à chaque validation.

Autres conseils

15 minutes ne me semblent pas excessives. Après tout, il s’agit d’un coût ponctuel.

Je n'en suis pas certain, mais j'imagine qu'une partie de l'explication est que 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.

Votre script doit peut-être être modifié pour ajouter des contraintes après la création des tables.

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

Peut-être devriez-vous restaurer certains index avant les données insérées via une procédure stockée, si cela utilise beaucoup d'instructions select

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top