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

PHP & Base de données Discussion :

transactions => forte augmentation du temps de traitement


Sujet :

PHP & Base de données

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut transactions => forte augmentation du temps de traitement
    Bonjour,

    j'effectue le traitement d'un fichier CSV et pour chaque ligne du fichier, si elle est valide, j'alimente plusieurs tables SQL (SGBD=MySQL). Au début, j'avais fait des INSERT "simples". Le fichier contient environ 110 000 lignes et son traitement prenait environ une heure. J'ai inséré les INSERT dans des transactions afin de ne pas risquer de pourrir la bdd.

    Voici le code d'un des INSERT :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                  $ppp = self::getPPP();
     
                  $ppp->startTransaction();
     
                  $sql=<<<sql
        INSERT INTO t_us_user (user_sesaid, user_firstname, user_lastname, user_email, cou_ident, bu_ident, loc_ident, 
        user_ident_manager, OZ_ident)
        VALUES({$ppp($sesa,'int')}, {$ppp($firstname)}, {$ppp($lastname)}, {$ppp($email)}, {$ppp($COU_ident)}, {$ppp
                ($BU_ident)}, {$ppp($LOC_ident)}, {$ppp($USER_ident_manager)}, {$ppp($OZ_ident)} ) 
        sql;
                $id = (int)$ppp->insert($sql);
     
                $ppp->commit();
    Ca fait 55 minutes que ça tourne et on a traité que 10 000 lignes. Est-ce lié aux transactions ou à autre chose ?

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Pour lever le doute, j'ai enlevé les transactions et relancé. Le repas étant passé par là, en 1h50, seulement 16 000 lignes traitées, donc c'est ailleurs...

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Une transaction sera forcément plus longue qu'un insert seul.

    En revanche , une transaction qui fait de l'insertion par lot (par lot de 100 par exemple) sera plus rapide que 100 inserts simple.

    Donc si tu veux accelérer tes traitements , fait des insertions par lot.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Si je démarre une transaction, puis fais une dizaine d'insertions (ce qui correspond au traitement d'une ligne du CSV), puis un commit, ça irait ?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Ca pourrait ,
    en général il faut faire des essais pour trouver la taille de lot la plus efficiente.

    Edit , il semblerait que les transaction ne soit pas si efficiente que ca sous mysql (c'est le cas sous sqlite).

    La doc mysql : https://dev.mysql.com/doc/refman/5.7...imization.html préconise plusieurs chose :
    Faire des insert avec multiple VALUES ou encore mieux passer par un fichier.

    Quelques exemples de performances ici : https://kvz.io/improve-mysql-insert-performance.html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Ton dernier lien date de 2009 et les exemples utilisent les fonctions mysql_xxx

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Raison de plus pour re faire des tests et voir ce qui est le plus efficient
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation JProgressBar & temps de traitement incconu
    Par greg1602 dans le forum Composants
    Réponses: 22
    Dernier message: 30/11/2005, 20h52
  2. [Tableaux] Temps de traitement ... affichage de page
    Par mathieu77186 dans le forum Langage
    Réponses: 37
    Dernier message: 25/10/2005, 17h45
  3. [MySql] temps de traitement interminable
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/07/2005, 15h14
  4. [Perf]Utilisation des Logger et temps de traitement ?
    Par elitost dans le forum Logging
    Réponses: 6
    Dernier message: 12/04/2005, 23h13
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

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