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

MS SQL Server Discussion :

La transaction a été bloquée sur les ressources verrou


Sujet :

MS SQL Server

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut La transaction a été bloquée sur les ressources verrou
    Bonjour à tous,

    J'ai ce message d'erreur :

    la transaction a été bloquée sur les ressources verrou | objet générique pouvant être attendu par un autre processus et a été choisie comme victime
    Sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $maj = $conn->prepare("UPDATE neuro_event SET position = :i WHERE id = :id");
     
    $maj->execute(array(":i"=>$i, ":id"=>$maj_pos['id']));
    Auriez-vous déjà rencontré ce message d'erreur ?

    Sauriez-vous me dire comment le résoudre ?

    Merci d'avance et bonne année.

    beegees

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    ton thread a été tué par un autre process, il peut y avoir beaucoup de possibilité.
    retente le coup plusieurs fois, si cela se reproduit TOUT le temps tu as peut être un governorlimit trop faible (temps estimé par SQLserveur pour exécuter ta requête, si cela dépasse, il te kille...)
    Errare humanum est, perseverare diabolicum (Sénèque)

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Il s'agit d'un cas de verrou mortel pour lequel SQL Server à choisi de tuer l'un des processus bloquants.

    Les verrous mortels se produisent dans des transactions portant sur au moins deux tables (chaque processus devant mettre à jour au moins une table et lire ou écrire dans plusieurs autres tables).

    Ils sont favorisés par :
    1) une base non relationnelle (table fourre tout, à lire : http://blog.developpez.com/sqlpro/p1...ances-petites/)
    2) des transactions trop conséquentes
    3) des transactions côté client (dans l'application au lieu d'être dans des procédures stockées)
    4) une logique transactionnelle inadaptée (par exemple commencer par des lectures et finir par des mises à jour)
    5) l'utilisation de certains outils comme les ORM (à lire : http://sqlpro.developpez.com/cours/b...s-epaisses.pdf) ou les framework.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut,

    Merci à vous deux pour vos réponses.

    Le problème ne semble plus se présenter.

    Je reviens vers vous au cas où le problème réapparaît.

    Encore merci pour les explications et meilleurs vœux.

    beegees

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Dans ton cas, tu risques d'exécuter un nombre conséquent de mises à jour.
    Ce qui veut dire que tu vas provoquer beaucoup d'allers et retours entre ton logiciel et le moteur de base de données (communication inter-process donc lent).
    Une solution que je te propose serait de créer une requête UPDATE avec plusieurs UPDATE à l'intérieur (concaténation dans une chaîne).
    Et pour éviter d'écrouler le serveur de BDD avec une requête trop complexe (n'ayant pas de contexte on peut imaginer que tu balances une chaîne avec 100 000 UPDATE), tu pourrais envoyer les UPDATE avec des lots de 100.
    Cela réduirait les échanges et éviterait de faire trop de "marshalling" (transformation de code de ton logiciel vers SQL Server et re transformation du code de retour de SQL Server vers ton logiciel + communication inter-process).

  6. #6
    Membre habitué Avatar de Chou-ette
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 55
    Points : 128
    Points
    128
    Par défaut
    Bonjour

    Citation Envoyé par SQLpro Voir le message
    4) une logique transactionnelle inadaptée (par exemple commencer par des lectures et finir par des mises à jour)
    Pour ma culture, en quoi est-ce inadapté ? auriez-vous un exemple ?

    Merci

    Edit: je n'avais pas vu le up monstrueux de 11 ans, mea culpa

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    a été choisie comme victime
    Ils font dans le mélodrame chez SQL Server

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Chou-ette Voir le message
    Bonjour
    Pour ma culture, en quoi est-ce inadapté ? auriez-vous un exemple ?

    Merci

    Edit: je n'avais pas vu le up monstrueux de 11 ans, mea culpa
    Comme dit commencer par les lectures alors qu'il faudrait commencer par les mises à jour...

    Autre template classique pour éviter certains verrous mortels, appeler les requête dans le même ordre...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. [2016] Transaction bloquée sur les ressources thread | tampon de communication
    Par dmoya dans le forum Développement
    Réponses: 3
    Dernier message: 03/05/2022, 09h56
  2. [2017] La transaction a été bloquée sur les ressources verrou
    Par guigui69 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 28/04/2020, 19h28
  3. besoin d'un ou deux tuyaux sur les ressources svp
    Par giova_fr dans le forum MFC
    Réponses: 2
    Dernier message: 23/06/2005, 11h41

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