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

Outils MySQL Discussion :

[MySQL5][innoDB][table lockée?]Lock wait timeout exceeded


Sujet :

Outils MySQL

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 951
    Par défaut [MySQL5][innoDB][table lockée?]Lock wait timeout exceeded
    Bonjours,

    je travaille sur un relativement gros site d'e-commerce, et on a un énorme pb!

    tout d'abors le contexte :
    - le code n'a pas ete changé depuis hier
    - seule la taille des données stockée en base a (forcement augmanté)

    maintenant, le pb :
    - soudainement, est apparut le bug suivant (en production!)
    l'appel a la procedure stockée suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creerCaddie( <params> );
    provoque l'erreur suivante :
    Lock wait timeout exceeded;
    voici le code de la proc sto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DELIMITER $$;
    CREATE DEFINER=`user`@`%` PROCEDURE `creerCaddie`(    <params>     )
    BEGIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                   SET AUTOCOMMIT=0;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                   START TRANSACTION;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                           INSERT INTO Caddie (  <tables>  )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                           VALUES (     <ParamEntree>  );                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                           COMMIT;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                           SELECT LAST_INSERT_ID() as panierid;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    END$$
    DELIMITER ;$$
    nous avons eu ce pb durant plussieures heures, le seul moyen de le resorber etait de redémarrer le serveur MySQL. Mais il reaparaissait.
    il a disparut tout seul, depuis, nous avons supprimés la transaction inutile.
    le code de la procedure stockée etait fonctionnel et inchangé depuis janvier.

    Mon intérogation est la suivante :
    apres renseignements sur internet, avec innoDB, seules les row liés a des requetes d'insert / update sont lockés dans la/les table concernée.


    donc, comment un insert / update peut etre bloqué par une transaction qui, de plus, effectue bien un commit a sa fin ??


    la table concerné fait 5.5Mo, avec 10Mo d'indexes, et compte ~30 000 enregistrements. ca ne me semble pas enorme...
    elle possede en outre 2 foreign key pointants vers des tables relativement plus legeres.



    la resultante de ce bug est que toute reservation est impossible lorsqu'il survient!
    si quelqu'un a une piste... :'(


    edit : sous mySQL Administrator, on pouvait voir des threads d'ecriture sur cette table en attente lorsque le bug survenait, leut etat etait 'locked'
    Images attachées Images attachées  

Discussions similaires

  1. INSERT - Lock wait timeout exceeded
    Par mariemor64 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/09/2011, 14h01
  2. erreur de type Lock wait timeout exceeded
    Par mounir.housni dans le forum Hibernate
    Réponses: 4
    Dernier message: 17/08/2010, 14h17
  3. lock wait timeout exceeded
    Par bouquito dans le forum Requêtes
    Réponses: 0
    Dernier message: 09/08/2009, 19h25
  4. Lock wait timeout exceeded ?
    Par ctobini dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 14/02/2008, 10h33
  5. Lock wait timeout exceeded
    Par pop_up dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/08/2007, 08h10

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