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

Installation MySQL Discussion :

Problème de performance sur une "grosse" BD


Sujet :

Installation MySQL

  1. #1
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut Problème de performance sur une "grosse" BD
    Bonjour,

    Je rempli une base de donnée à partir d'un programme .NET

    Tout fonctionnait bien jusqu'au moment où ma base de donnée à dépassé les 10Mo.


    Je n'ai que 2 tables et chaqu'une a +- 75000 enregistrements.

    J'ai installé le dernier EastPhp, le problème que j'ai est que ma base de donnée sera au final 8* plus grosses et que les select et les insert se font de + en + lentement. Mon cpu sature à 100%.

    Y a-t'il des améliorations possibles? ou alors dois-je me tourner vers une autre base de donnée? (MSsql server)

    Merci,

    frechy

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 897
    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 897
    Points : 6 024
    Points
    6 024
    Par défaut
    Il faudrait nous communiquer le design de la base (tables & index), ainsi que la description des accès aux données (insert en rafale?, requètes, etc...)
    "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

  3. #3
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    Voici la structure des tables


    *****

    *****



    Je ne saurais pas vous montrer mes requettes pour l'instant, mais si je me souvient bien, je fais ceci:

    - Ouverture connection
    - Select
    - Select
    - Insert
    - Select
    - Insert
    - Fermeture connection

    Et je fais cette séquence en boucle, tout a très bien fonctionné jusqu'au moment où la taille à augmenté...[/img]

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 897
    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 897
    Points : 6 024
    Points
    6 024
    Par défaut
    1er constat, le schéma n'a rien d'extraordinaire.

    Pour l'enchainement des requètes, je vois bien la finalité (avec ma boule de cristal )...

    ce qu'il manque, c'est des précisions sur les SELECT et d'éventuelles clauses WHERE qui mettraient en oeuvre des colonnes non indexées
    "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

  5. #5
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    Voici les requettes, je les reprend de mon programme, donc il y a des variables qui interviennent...logique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "SELECT COUNT(`Nom`) FROM `societes` WHERE `Nom` = '" + nom + "' AND `Adr` = '" + adr + "'";
     
    //Si le count retourne 0
     
    => "INSERT INTO `societes` ( `adrweb` , `Nom` , `Adr` , `Tel` , `Fax` , `EMail` , `Web` )  VALUES ('" + adrweb + "' , '" + nom + "' , '" + adr + "' , '','','" + mail + "','" + web + "')";
     
    => "SELECT MAX(`IdSoc`) FROM `societes` WHERE 1" // ici je récupere l'Id qui vient d'etre créé lors du précédent insert (id autoincrement)
     
     
    //Sinon (count a retourné >0)
     
    => "SELECT IdSoc FROM `societes` WHERE `Nom` = '" + nom + "' AND `Adr` = '" + adr + "'";
    A ce stade j'ai ajouté une société si elle n'existait pas et j'ai récupérer son Id. Si la société était déjà présente, alors j'ai récupérer son Id.

    Maintenant j'ajoute une catégorie à la société (si cette société n'est pas déjà liée à cette catégorie)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "SELECT COUNT(`IdSoc`) FROM `catsoc` WHERE `IdSoc` = " + id + " AND `IdCat` = " + Cat;
     
     
    //Si count = 0
     
    =>"INSERT INTO `catsoc` ( `IdCat` , `IdSoc`  ) VALUES (" + Cat + " , " + id + ")";
    Il y a peut être moyen d'economiser les requettes, par exemple, lorsque je fais un insert, il y a peut être moyen de récupérer directement l'id créé (pour ne pas devoir faire un select MAX)

    Ce qui me fait peur égallement, c'est que le nombre d'enregistrement n'augmente plus, est-ce que mysql arrete de compter apres une certaine taille?

  6. #6
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    J'ai oublié de préciser la configuration du "serveur"

    P4 1.5Ghz
    768 Ram
    Win XP Pro sp2


    Je pense que c'est sufisant pour une BD de 2 tables lol. Mais s'il le faut vraiment, je peux passer sur un Bi-Xeon avec MS sql server...mais bon est-ce que ca en vaut vraiment la peine?

  7. #7
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Sans regarder les params de la base de donnees:

    N'utilise pas la concatenation avec des +, mais avec un stringbuilder: c'est pas mysql qui rame c'est ton appli .net (tempete de strings pour le garbage collector)

    http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemtextstringbuilderclasstopic.asp

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 897
    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 897
    Points : 6 024
    Points
    6 024
    Par défaut
    Il y a peut être moyen d'economiser les requettes, par exemple, lorsque je fais un insert, il y a peut être moyen de récupérer directement l'id créé (pour ne pas devoir faire un select MAX)
    Regarde du coté du Last_Insert_ID (en +, un select MAX est à proscrire sur une clé qui augmente, augmente, augmente )

    Sinon, pour les select, il conviendrait d'indexer les colonnes participant aux clauses WHERE. Attention cependant à l'indexation de colonnes à "rallonge" suite à des pb évidents de performance.

    De plus (pour la colonne Adr):
    Citation Envoyé par Aide MySQL
    Pour les colonnes CHAR et VARCHAR, les index peut être créés sur uniquement une partie de la colonne, avec la syntaxe col_name(length). Pour les colonnes BLOB et TEXT la longueur d'index est obligatoire
    http://dev.mysql.com/doc/mysql/fr/create-index.html
    "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 confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    Merci, je regarderai à ca demain.

    Pour l'histoire du stringbuilder, je ne suis pas sur que celà pose problème car c'est mysqld.exe qui prend 100% du cpu.

    Enfin si ca peut accélérer le traitement, je ferai la modification

  10. #10
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    J'ai rajouté un index sur nom et adresse.

    Je suis passé à un temps d'execution de +- 900ms à +-10ms!!! 8)



    Merci beaucoup

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

Discussions similaires

  1. Problème performance sur une jointure
    Par chicken92000 dans le forum Développement
    Réponses: 12
    Dernier message: 08/02/2011, 14h57
  2. Divers problèmes de performance sur une application Swing
    Par Julien Bodin dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 06/09/2010, 16h28
  3. Problèmes de performances sur une base oracle 10g
    Par ORAMEL dans le forum Oracle
    Réponses: 3
    Dernier message: 11/09/2007, 10h11

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