Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2011, 10h32   #1
Membre à l'essai
 
Homme Cédric D.
Développeur Web
Inscription : mai 2004
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Cédric D.
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 68
Points : 24
Points : 24
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.
Phenol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 10h50   #2
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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 ...
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 10h55   #3
Membre à l'essai
 
Homme Cédric D.
Développeur Web
Inscription : mai 2004
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Cédric D.
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 68
Points : 24
Points : 24
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.
Phenol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h14   #4
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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.
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h31   #5
Membre à l'essai
 
Homme Cédric D.
Développeur Web
Inscription : mai 2004
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Cédric D.
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 68
Points : 24
Points : 24
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.
Phenol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h59   #6
Membre Expert
 
Avatar de Nudger
 
Homme Thomas Arnaud
Directeur de projet
Inscription : octobre 2010
Messages : 452
Détails du profil
Informations personnelles :
Nom : Homme Thomas Arnaud
Âge : 36
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 : 452
Points : 1 012
Points : 1 012
Envoyer un message via Skype™ à Nudger
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 ?
__________________
www.nudge.org Surveillez et optimisez vos applications Java
Nudger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 13h55   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h10   #8
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 17h18   #9
Membre extrêmement actif
 
Avatar de kedare
 
Mathieu
Administrateur systèmes et réseaux
Inscription : juillet 2005
Messages : 1 476
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : juillet 2005
Messages : 1 476
Points : 1 260
Points : 1 260
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...
kedare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 18h35   #10
Membre du Club
 
Inscription : mars 2005
Messages : 66
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2005
Messages : 66
Points : 44
Points : 44
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
slefevre01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h00   #11
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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.
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h32.


 
 
 
 
Partenaires

Hébergement Web