IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

20 minutes pour un import de 15000 lignes, normal ?


Sujet :

MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 56
    Points
    56
    Par défaut 20 minutes pour un import de 15000 lignes, normal ?
    Bonjour,

    Un client de la Web Agency où je bosse se sert d'un CSV (en provenance de Sage) pour importer ses produits, leurs caractéristiques ainsi que d'autres informations liées à ceux-ci.

    Bref, plutôt qu'effectuer une requête SQL de type INSERT par produits/caractéristiques, nous avons décidé de créer un fichier .sql contenant toutes les requêtes (1 par ligne) et de l'importer par la suite via un script Shell.

    Ce .sql comporte donc environ 15000 lignes et met actuellement 20 minutes à être importé.

    Ma question est la suivante : est-ce une durée normale ? Si non, comment réduire cette durée, quels paramètres optimiser sur le serveur dédié (http://www.ovh.com/fr/produits/superplan_best_of.xml) ?

    Informations :
    - les tables concernées sont en InnoDB
    - un import local (WAMP) du .sql met environ 1 minute à être effectué (via PHPMyAdmin > Importer)

    Je suis à votre disposition pour toute information qui pourrait vous aider à répondre à ma question.

    Merci par avance.

  2. #2
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut test sur le serveur
    Bonjour,
    Avez vous essayé de tester le lancement du script directement en local, c'est à dire après avoir uploadé le fichier (par ftp par exemple) sur le serveur puis via le shell à distance ?
    Cela vous indiquerait déjà d'où vient le problème, la connexion ou bien le serveur ...

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    Tout d'abord merci pour votre réponse.

    Pour répondre à votre question : Oui, le script Shell télécharge le .sql avant de l'exécuter en local.

  4. #4
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    On s'est mal compris, pour trouver l'origine du problème, il faudrait tester manuellement, sans utiliser le script automatique déjà fait.
    Vous téléchargez manuellement le fichier .sql sur le serveur puis vous ouvrez un shell à distance, lancez une session mysql et exécutez le script. Si ce dernier point met toujours 20 minutes, vous aurez déjà identifié la source du problème. En gros il faut découper les tâches du script une à une, jusqu'à tomber sur le problème.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    Le script Shell ne fait qu'un "mysql .......... < data.sql".

    J'ai testé directement la commande dans le Shell avec le même résultat.

    J'espère répondre concrètement à votre question et l'avoir bien comprise.

    Merci encore.

  6. #6
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    15000 en 20 minutes, ça fait 12,5 par seconde.
    Suivant le contexte c'est peut-être pas si mal que ça.

    - Combien de lignes contient la table ?
    - Combien de colonnes contient la table ?
    - Combien d'index y a-t-il sur cette table ?
    - Y a-t-il des triggers sur la table ?
    - Le script est-il exécuté sur le serveur qui héberge la base MySQL ?

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Un client de la Web Agency où je bosse se sert d'un CSV (en provenance de Sage) pour importer ses produits, leurs caractéristiques ainsi que d'autres informations liées à ceux-ci.
    Plutôt que de faire 15 000 INSERT, tu as essayé LOAD DATA INFILE ?
    Et s'il faut ensuite répartir les données dans plusieurs tables, tu charges le CSV dans une table temporaire avec LOAD DATA INFILE puis avec les requêtes adéquates, tu répartis les données dans les bonnes tables.
    C'est peut-être plus long à préparer mais si c'est une opération répétitive, ce sera sûrement plus rapide à terme.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut
    Les tables sont en InnoDB...

    Il y a donc des FK et le contrôle de leur respect ce qui n'est pas gratuit non plus.

    Est il envisageable d'effectuer un commit de temps en temps afin d'alléger la journalisation ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  9. #9
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut
    Tu fais bien tout dans une seule transaction ?
    Si c'est pas le cas il y a un commit a chaque insert donc c'est normal que ca soit lent...

  10. #10
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2005
    Messages : 95
    Points : 88
    Points
    88
    Par défaut
    Salut,
    peux-tu transmettre ton my.cnf ?

    Comme t'es sur un dédié, tu peux exécuter mysqltuner qui te fournira qq pistes d'optimisation. http://blog.mysqltuner.com/download/

    Sébastien
    DBA SQLServer, Oracle, Mysql, DB2, Postgresql

  11. #11
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut configuration différente ?
    Bonjour,
    A mon avis, si le test met 1 minute sur une simple machine tournant sous windows comparé à 20 minutes sur un serveur sous linux je suppose que c'est que vous n'avez pas la même configuration entre les deux machines, sous windows mysql est bien plus lent même avec la 5.5. Voir les contraintes comme les clés étrangères des tables en innodb, les triggers, les index aussi.
    Avez vous essayé avec un ETL du type de Pentaho Kettle (à condition que vous ayez un accès distant à la base), c'est ultra simple dans des cas d'import sans modification comme ici ?
    Sinon, découpez votre script .sql pour voir quelle partie est la source d'étranglement.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/02/2014, 16h17
  2. Pb pour compter le nb de ligne (COUNT)
    Par fages dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/06/2005, 13h44
  3. .bat pour l'import de fichier txt dans postgres
    Par pseudomh dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 25/03/2005, 00h02
  4. quel format doit avoir une BD pour l'importer avec copy?
    Par daknoom dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/02/2005, 19h41
  5. [C#] DataGrid: Conserver tri pour l'édition d'1 ligne
    Par gilder89 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/12/2004, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo