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 :

Mon Mysql Pédale et plante


Sujet :

Installation MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Par défaut Mon Mysql Pédale et plante
    Bonjour,

    voila je suis webmaster d'un site et je pense que il doit plus être accessible maintenant. je viens d'acquerir un serveur dédié ou j'ai donc installer MySQL/PHp .... Le truc c'est que j'ai un forum assez enorme ( enfin pas non plus démentielle, mais gros ) de l'odre de 15 000 sujets dans la table "forum_sujet" et 80 000 messages dans la "forum_msg".

    Avec cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT fs.ID, COUNT(fm.ID) as 'NbMsg'
                                               FROM forum_sujet fs
                                               LEFT JOIN  forum_msg fm ON fs.ID = fm.ID_sujet
                                               LEFT JOIN  categorie c ON fs.ID_forum = c.ID
                                               WHERE valid_news = 1
                                               GROUP BY fs.ID desc ORDER BY fs.Dernier_Date desc
    Cette requete fonctionne mais au bon d'un moment quelques heures ... ça crash, le serveur plente, et il faut tout redemarré. De plus cette requete est hyper lente, elle peut prendre presque 40sec parfois !!

    j'ai donc optimisé avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT fs.ID, COUNT(fm.ID) as 'NbMsg'
                                               FROM forum_sujet fs, forum_msg fm
                                               WHERE fs.ID = fm.ID_sujet AND valid_news = 1
                                               GROUP BY fs.ID desc ORDER BY fs.Dernier_Date desc
    Sauf que celle là, c'est radical, ça fé tout plenté direct, reboot complet, il veut plus rien savoir, Mysql patine dans la semoule !!

    J'ai d'abord pensé un crash de table, j'ai donc réparer , optimisé, analyser ces deux tables !! et rien de particulier, tout va bien !! Et ça rame à mort avec la premiere requete, et ça plente direct avec la deuxième.

    VOila je suis donc perdu, le site n'est plus en ligne et crash tout le temps !! j'ai pensé à l'espace memoire attribué à Mysql pour de grosse requete ... j'ai modifier, ça avait l'air d'aller, mais ça a fini par cracher qd même. Est ce que Mysql accumule quelques chose au cours du temp ??? et fini par plenter ? pourquoi ma deuxieme requete patine dans le semoule ( renvoi aucune erreur evidemment ) ....

    Voila j'y arrive plus .... si quelqu'un à une idée ????

    PS : j'ai 128Mo de RAM sur mon dédié.

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT fs.ID, COUNT(fm.ID) as 'NbMsg'
        FROM forum_sujet fs
        INNER JOIN forum_msg fm ON fs.ID = fm.ID_sujet
        WHERE valid_news = 1
        GROUP BY fs.ID desc ORDER BY fs.Dernier_Date desc
    1 - Cette jointure est préférable.

    2- Lancez et retournez-nous le résultat un EXPLAIN PLAN de cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    EXPLAIN SELECT fs.ID, COUNT(fm.ID) as 'NbMsg'
        FROM forum_sujet fs
        INNER JOIN forum_msg fm ON fs.ID = fm.ID_sujet
        WHERE valid_news = 1
        GROUP BY fs.ID desc ORDER BY fs.Dernier_Date desc
    3- Merci de nous retourner la description des tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SHOW CREATE TABLE FORUM_SUJET\G
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SHOW CREATE TABLE FORUM_MSG\G
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Par défaut
    Voila pour le explain

    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE fs ALL PRIMARY NULL NULL NULL 14438 Using where; Using temporary; Using filesort
    1 SIMPLE fm ref ID_sujet ID_sujet 4 moteurprog.fs.ID 6
    et les tables ça donne ça :

    CREATE TABLE `forum_msg` (
    `ID` int(8) NOT NULL auto_increment,
    `ID_sujet` int(11) NOT NULL default '0',
    `Titre` varchar(100) NOT NULL default '',
    `Message` longtext NOT NULL,
    `Date` datetime default NULL,
    `Membre` varchar(80) NOT NULL default '',
    `ID_membre` int(11) NOT NULL default '0',
    PRIMARY KEY (`ID`),
    KEY `ID_sujet` (`ID_sujet`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=101429 ;


    CREATE TABLE `forum_sujet` (
    `ID` int(8) NOT NULL auto_increment,
    `ID_forum` int(3) NOT NULL default '0',
    `Referant` int(1) NOT NULL default '0',
    `Titre` varchar(100) NOT NULL default '',
    `Type` int(11) NOT NULL default '0',
    `Clicks` int(5) NOT NULL default '0',
    `ID_ss_cat` int(8) NOT NULL,
    `Membre` varchar(80) NOT NULL default '',
    `Dernier_Date` datetime default NULL,
    `Dernier_pseudo` varchar(80) NOT NULL default '',
    `Vue` int(1) NOT NULL default '0',
    `Date_crea` datetime NOT NULL default '0000-00-00 00:00:00',
    `resolu` int(1) NOT NULL default '0',
    `ID_membre` int(11) NOT NULL default '0',
    `Bloquer` int(1) NOT NULL default '0',
    `FAQ` int(1) NOT NULL default '0',
    `valid_news` int(1) NOT NULL default '1',
    `Delestage_date` date NOT NULL,
    `sondage` int(1) NOT NULL default '0',
    PRIMARY KEY (`ID`),
    KEY `ID_forum` (`ID_forum`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21533 ;
    Voila !! pour infos a quoi sert le explain ?

  4. #4
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Un index sur Valid_news peut aider.

    EXPLAIN permet de lister les index possibles et de dire lesquels sont utilisés, lesquels ne le sont pas.

    Mais apparement, pas bcp d'optimisation possible niveau modèle. Niveau configuration serveur par contre...

    Quelques notes à lire sont déjà dans lLa FAQ MySQL
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Par défaut
    c'est pas possible qu'avec aussi peu de volumétrie, on fasse planter un serveur, ou qu'une requête comme ca dure 40 secondes!

    Il doit y avoir autre chose que la requete SQL...

  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Comme dit Alexandre un index sur valid_news (et sur Dernier_date) peut être utile.

    Sinon c'est dans un script PHP ou même en ligne de commande ça fait tout planter ?

Discussions similaires

  1. [Pb]MySQL > mysql.sock + KDE planté
    Par tsuki75 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 11/04/2008, 20h35
  2. Mon windev 11 se plante sous vista
    Par amadousoind dans le forum WinDev
    Réponses: 1
    Dernier message: 26/11/2007, 12h17
  3. récupérer mon mysql [table user]
    Par mohamed dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/07/2007, 20h44
  4. Mon Client / Serveur UDP plante
    Par DjSeblaterreur dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/07/2007, 17h12
  5. Connexion a mon mysql
    Par aliwassem dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 11/06/2006, 19h35

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