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

Requêtes MySQL Discussion :

Un gros résultat de requête qui fait planter le serveur Php


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 70
    Points : 73
    Points
    73
    Par défaut Un gros résultat de requête qui fait planter le serveur Php
    [EDIT]Oups, je crois que mon message trouverait plus sa place dans le forum SGBD de Php. Désolé. Comment je fais pour déplacer la discution ?[/EDIT]

    Bonjour,

    J'ai une requête chargée de calculer des alertes à envoyer aux internautes.
    La requête est bien optimisée - je lui ai rajouté un spoiler, un volant sport et des jantes alliage - si bien qu'elle me renvoie TOUS les résultats en une fois.

    L'ennui maintenant, c'est que quand le nombre de résultats retournés est trop important (plusieurs centaines de milliers à plusieurs millions d'enregistrements), le serveur PHP ne suit plus : le script est lancé comme processus Php (lancement par Cron) et la quantité de données chargées en mémoire est telle que le serveur ralentie et devient inaccessible.
    Et pourtant, c'est du dédié qui ne fait tourner que le Php (Double coeur bixéon gorgé de ram, avec peinture métallisée)

    Voici comment Php récupère ma requête, la traitement est très classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $resultat = $mysqli->query($ma_requete_sql);
    if($resultat && $resultat->num_rows)
    {
    	while($alerte = $resultat->fetch_object())
    	{
    		//Traitement et envoi du mail
    	}
    }

    Je ne vais pas entrer dans le détail, mais il est difficile de découpe ma requête en requêtes plus petites.

  2. #2
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    La solution MySQL au problème PHP serait la clause 'LIMIT' afin de procéder par fenêtre:

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 70
    Points : 73
    Points
    73
    Par défaut
    Pas Sivrît ! Le problème avec cette solution, c'est quelle risque de "couper en deux" une alerte (si plusieurs produits correspondent à une alerte, plusieurs lignes sont retournées).

    Je voulais plus savoir s'il existait un moyen de créer un pointeur entre Php et les résultats, pour les parcourir ligne à ligne sans tout renvoyer d'un coup vers Php.

    Je pensais jusqu'ici que c'était ainsi que fonctionnait la machinerie interne de myql_query(), mais visiblement je me suis trompé.

    En attendant, je pense effectivement utiliser un système basé sur les limites, même si ce sera un poil plus compliqué qu'une simple ligne de code à rajouter.

    Merci quand même.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    il faut que tu utilises un curseur côté serveur, avec mysqli_use_result.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. Requête Ajax fait planter le serveur Rails
    Par Ameisk dans le forum Ruby
    Réponses: 0
    Dernier message: 02/08/2011, 09h07
  2. Requête qui fait ramer le serveur
    Par Théolude dans le forum Requêtes
    Réponses: 8
    Dernier message: 09/02/2010, 09h26
  3. Réponses: 1
    Dernier message: 07/02/2008, 02h54
  4. Requete qui fait planter le serveur.
    Par Lambrosx dans le forum Installation
    Réponses: 6
    Dernier message: 05/04/2007, 18h28
  5. Réponses: 12
    Dernier message: 16/03/2004, 14h21

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