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

Développement SQL Server Discussion :

Besoin d'une solution pour mes Deadlocks


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut Besoin d'une solution pour mes Deadlocks
    Bonjour,

    Voilà, j'ai plusieurs deadlock sur un projet depuis plusieurs jours.
    Certains j'ai plus les réglé en changeant légèrement la requête mais pour d'autres c'est une vrai plaie.

    J'ai utilisé le profiler et les graphiques de deadlock (un truc génial cela dit en passant) pour identifier ce qui posait problème.

    En gros j'ai systématiquement un "Échange" de pages entre deux requêtes toujours sur la même table.
    C'est une table de mouvements de stock qui contient ~200 lignes par page.

    Et là j'ai plusieurs solutions :
    - Utiliser des with(nolock) mais ça me fait trop mal donc je garde comme dernier recours.
    - "Défragmenté" les lignes pour que les lignes d'un même contexte se suive et aient plus de probabilités d'être sur la même page (cependant je sais pas du tout comment le faire)
    - Forcé le blocage au niveau table par défaut (je ne sais pas non-plus comment le faire)

    Quelqu'un a-t-il une autre proposition, ou une piste pour réaliser l'une ou l'autre des miennes ?

    A+

  2. #2
    Invité
    Invité(e)
    Par défaut
    • Pour les indexes qui bloquent, changer l'option « Allow page lock » à false
    • Créer des indexes pertinents

  3. #3
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    merci de voir du coté développement essayer de minimiser les longues transaction (avoir des requêtes courtes) tu peux aussi a essayer de changer votre niveau d'isolation


    ce ci aussi ne néglige pas que Parfois, un blocage peut être résolu en ajoutant l'indexation

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Citation Envoyé par Donpi Voir le message
    Bonjour,

    En gros j'ai systématiquement un "Échange" de pages entre deux requêtes toujours sur la même table.
    C'est une table de mouvements de stock qui contient ~200 lignes par page.

    A+
    On pourrait avoir un exemple de requête qui te pose problème?

    ++

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    De manière générale les deadlocks arrivent quand deux conditions sont réunies :
    • des transactions explicites
    • l'utilisation d'un même objet par au moins deux transactions

    En sus, la fréquence des deadlocks dépend directement de la durée des transactions :
    • plus le blocage est long (verrouillage d'index ou de table) plus il y a statistiquement de chances que cela survienne. (phénomène stochastique).


    Pour éradiquer globalement les deadlocks il faut :
    1) MINIMISER la durée des transactions (par exemple éradiquer les curseurs, travailler uniquement en procédures stockées, rajouter de la RAM, du CPU, des disques plus rapide...)
    2) avoir un modèle de données FORTEMENT NORMALISÉ (respecter à la lettre les formes normales 1, 2, 3, BC, 4 et 5)
    3) rajouter des INDEX pertinents (analyser ce que demande SQL Server dans sys.dm_db_èmissing_index_details)
    4) séquencer les ordres SQL dans le même sens (dans les procédures)
    5) s'interdire l'utilisation d'ORM ou de framework dès que le traitement devient un tant soit peu complexe

    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/ * * * * *

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    En sus des conseils prodigués par SQLPro :

    - pourriez-vous partager un xdl ou une trace, de sorte que nous puissions vous aider plus avant ?
    - vous pouvez lire les articles de Bart Duncan et Jonathan Kehayias sur ce sujet
    - vous pouvez lire les billets que j'ai posté à ce sujet sur la trace système, l'origine des verrous mortels, et la création de fichiers de trace côté serveur.
    - le chapitre 20 du livre que j'ai co-écrit avec SQLPro et Mikedavem peut également vous aider

    @++

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut
    Bonjour,

    Il n'est difficile de fournir une requête "significative" qui plante car elles sont très variées.
    Et le "bottleneck" est dans des triggers.

    Dans tout les cas j'ai fais un mix de toutes vos remarques et j'ai commencé par la plus simple.
    J'ai créé les indexes demandés par SQL. IL y avait effectivement un gros manque sur un index.
    Pour le moment j'ai laisser le "Alow page lock" a actif.

    Merci du soutiens, a+

Discussions similaires

  1. Cherche désespérement une solution pour mes menus..
    Par Mézza dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 25/06/2010, 12h28
  2. Besoin d'une idée pour formater mes données
    Par guidav dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 04/04/2007, 19h49
  3. Comment créé une "interface" pour mes programmes??
    Par alcazar dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/02/2004, 13h02

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