2010-12-07 61 views
4

J'ai trois grandes tables MySQL. Ils s'approchent de 2 millions d'enregistrements. Deux des tables sont InnoDB et sont actuellement d'environ 500 Mo. L'autre table est MyISAM et est d'environ 2,5 Go. Nous exécutons un script d'importation à partir de FileMaker pour insérer et mettre à jour les enregistrements dans ces tables mais dernièrement il est devenu très lent - insérant seulement quelques centaines d'enregistrements par heure.Comment accélérer MySQL INSERTs/UPDATEs?

Que puis-je faire pour améliorer les performances afin de rendre les insertions et les mises à jour plus rapides?

+1

Pour plus d'informations sur le 'script d'importation de FileMaker à insérer et à mettre à jour'. S'agit-il d'un script FileMaker (lent)? Existe-t-il des calculs FileMaker non stockés impliqués (lent)? Et comment FileMaker parle-t-il avec MySQL? – Ted

+0

duplication possible de [Comment améliorer les performances de MySQL INSERT et UPDATE?] (Http://stackoverflow.com/questions/2367229/how-to-improve-mysql-insert-and-update-performance) – hakre

Répondre

0

Il s'avère que la raison de la lenteur venait du côté de FileMaker. L'exportation des enregistrements FileMaker vers un fichier CSV et l'exécution des commandes INSERT/UPDATE ont entraîné une exécution très rapide.

2

Pour INSERT, cela peut concerner les index que vous avez définis sur les tables (ils doivent être mis à jour après chaque INSERT). Pourriez-vous poster plus d'informations à leur sujet? Et y a-t-il des déclencheurs sur les tables? Pour UPDATE, il s'agit d'une histoire différente, il se peut que la mise à jour de l'enregistrement ne soit pas lente mais que l'enregistrement soit lent. Pourriez-vous essayer de changer la mise à jour en un SELECT et voir si elle est encore lente? Si oui, alors vous devriez étudier vos index.

2

Pour la table Innodb, si c'est un risque acceptable, je considérerais de changer le niveau innodb_flush_log_at_trx_commit. Quelques plus de détails dans this blog post, avec quelques autres pointeurs de réglage Innodb.

Pour les deux moteurs, la mise en lots INSERT peut accélérer les choses jusqu'à un certain point. Voir doc.

Quelle version de MySQL utilisez-vous? Il y a eu de nombreuses améliorations avec le nouveau moteur "Plugin" InnoDB et la simultanéité des opérations sur des serveurs avec plusieurs processeurs.

+0

+1 pour le traitement par lots, Si vous ne le faites pas déjà, cela aide beaucoup. – thomaspaulb

2

La requête est-elle lente lorsqu'elle est exécutée sur MySQL à partir de la ligne de commande?

Si vous utilisez l'action de script Execute SQL de FileMaker, celle-ci se connecte et se déconnecte après chaque appel, ce qui provoque des ralentissements importants lors de l'exécution d'un grand nombre de requêtes. Nous avons demandé à nos clients de passer à notre JDBC plugin (avis de non-responsabilité d'auto-promotion ici) pour éviter cela, ce qui entraîne des accélérations majeures.