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 :

Interrompre une requête sql trop longue [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2009
    Messages : 35
    Points : 33
    Points
    33
    Par défaut Interrompre une requête sql trop longue
    Bonjour à tous.
    Je suis en train de réaliser un outil en php mysql.
    Je suis face au problème suivant :

    j'ai un appel d'une page PHP (appel effectué via AJAX en asynchrone) qui effectue un très longue requête (plus d'une minute). J'aimerais que si l'utilisateur le souhaite, il puisse interrompre l'exécution de cette requête via un autre appel Ajax. Pour l'instant la solution implémentée est la suivante
    (en pseudo code

    * Appel du premier script php via AJAX. Le script effectue:
    - SELECT connection_id() AS connection_id
    - enregistrement de connection_id dans la SESSION
    - grosse requête qui prend longtemps

    * Instant donné, l'utilisateur clique sur un bouton qui lance un appel via AJAX du deuxième script. Le script effectue
    - récupération de la variable $connection_id dans la session
    - KILL QUERY $connection_id

    Le problème est que le deuxième script attends toujours la fin du premier script pour être exécuté. J'ai inséré des instructions de reporting (error_log) et me suis aperçu que tant que le premier script n'a pas terminé sa requête, alors le deuxième script ne s'exécute pas. J'aimerais savoir comment puis-je régler ce problème (peut-être ma solution n'est pas la bonne)

    Une chose cepandant: lorsque j'interromps ma requête à l'aide d'un outil client sql (donc sans passer par un script php) alors la pas de soucis...

    Merci de votre lecture

    Guillaume

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2009
    Messages : 35
    Points : 33
    Points
    33
    Par défaut Résolu
    Bon en fait un mec m'a donné une info hyper interéssante : une session sur php est verrouillée. Donc dans mon cas le blocage était pas au niveau de la base de données ou même de AJAX, comme j'avais pu le penser au début. Non le problème venait juste de l'accès à la variable $_SESSION qui était verrouillée par le premier script.

  3. #3
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    tu as une réponse de se coté :
    http://mysql.ifrance.com/showthread.php?t=60
    tu récupère l'id de la grosse requete, et si tu veux annuler la requete tu ouvre une nouvelle connexion à partir d'un lien ou un bouton et tu 'KILL' la grosse requete dont tu as récupérer l'id...
    jamais essayé mais tiens moi au courant du résultat...
    Développeur informatique contrarié...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2009
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par vorace Voir le message
    tu as une réponse de se coté :
    http://mysql.ifrance.com/showthread.php?t=60
    tu récupère l'id de la grosse requete, et si tu veux annuler la requete tu ouvre une nouvelle connexion à partir d'un lien ou un bouton et tu 'KILL' la grosse requete dont tu as récupérer l'id...
    jamais essayé mais tiens moi au courant du résultat...
    Samut Vorace, à mon avis tu n'as pas du bien lire mon thread ... parce que c'est exactement ce que j'explique.

    Donc OUI cela fonctionne parfaitement. Le problème que j'ai eu c'est une histoire de blocage de session PHP.

    En effet, j'utilise la session pour placer le premier identifiant de requête (la requête longue).

    Ensuite le deuxième appel va lire dans la session pour connaitre cet identifiant et lancer le KILL. Sauf que : la session est toujours verrouillée par le premier thread php.

    Il faut juste ajouter un "session_write_close()" dans le premier thread dès que possible pour que la session soit libéré et accessible par le second appel php.

    En espérant avoir été clair

    Guillaume.

  5. #5
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    autant pour moi...
    c'est bon à savoir
    Développeur informatique contrarié...

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

Discussions similaires

  1. Temps d'exécution requête SQL trop Longue
    Par farouk1301 dans le forum JDBC
    Réponses: 7
    Dernier message: 09/08/2012, 20h25
  2. Probleme de requête SQL trop longue
    Par piscou51000 dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/02/2010, 19h06
  3. Réponses: 6
    Dernier message: 25/09/2009, 11h10
  4. [Requête SQL]Trop longue pour une ligne
    Par jbulysse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/07/2008, 14h27
  5. Exécuter une requête SQL très longue
    Par coraziari_l dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 10/01/2008, 17h07

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