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

Administration SQL Server Discussion :

Cherche pistes pour expliquer un blocage de base


Sujet :

Administration SQL Server

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut Cherche pistes pour expliquer un blocage de base
    Bonjour,

    J'ai une application qui par moment se fige, soit complètement, soit... presque complètement.

    J'ai dans un premier temps identifié quelques traitements susceptibles de provoquer une surcharge anormale, voir des dead locks, notamment en lançant des transactions monstrueuses inutilement.

    Cependant, maintenant que ça semble "propre", j'ai toujours des soucis de blocages.

    Quand j'interroge SQL Server, il me sort des choses un peu surprenantes au niveau des verrous.

    Par exemple (SID 470), un select (pas bien complexe) qui est "suspended" alors que rien ne le bloque. Il tape sur une seule table, "FI".
    => Pourquoi être suspended si rien le bloque ?
    Un update (SID 387) sur cette même table FI est bloqué par le select (SID 470)
    => Bon, admettons, même si ça me semble un peu bizarre que SQL Server pose un verrou dans ce cas. En soit ça me choque pas plus que ça.
    Et là, tout fout le camp : un select (SID 157) sur une autre table qui n'a rien à voir : KM est bloquée par la session SID 387. Comment un verrou dans une table peut bloquer l'accès à une autre table, alors que les requêtes ne font aucune jointure ? (et qu'il n'y a pas de FK déclarée dans la base)

    Avec ce genre de blocage de plusieurs tables à la fois par des transactions qui n'ont rien à voir les unes avec les autres, j'en fini par me dire que c'est pas étonnant d'avoir des plantages avec des deadlocks...


    Je soupçonne dans un premier temps une base remplie raz-la-gueule et que SQL Server mélange tout dans les pages par manque de place.
    Sauf qu'il y a 15 Go de libre dans la base... Donc ça semble un peu étrange que dans ces conditions SQL Server mélange les données de plusieurs tables dans une même page (sauf si par le passé la base était pleine peut-être ?).

    Bon, on reste sur cette piste de verrou de page qui impacte plusieurs tables, et je cherche une solution :
    - impossible de modifier les requêtes en READ UNCOMMITED ou autre verrou optimiste : j'ai pas la main sur le code pour ajouter des hints.
    - impossible aussi de forcer un verrou à la ligne qui pourrait éventuellement résoudre mon souci

    Question : est-ce qu'il existe un paramètre (au niveau base de données, ou session utilisateur via la chaine de connexion ODBC ou OLEDB, ou au niveau de l'instance) qui puisse par défaut exécuter les requêtes :
    - avec un verrou à la ligne
    - ou/et des verrous optimistes
    => Afin de réduire l'impact des select concurrents qui actuellement se bloquent mutuellement


    Aussi, je remarque des COLLATE dans les requêtes.
    Sauf erreur de ma part, c'est une piste pour expliquer les ralentissements, dans la mesure où :
    - le collate en lui-même est lent
    - ça empêche d'utiliser un index sur la colonne lue

    Sauf que j'ai beau regarder, tout est en French_CI_AS : instance, tempdb, base de données, aucune info de COLLATE différent dans le DDL des tables.
    => Du coup, faire un collate vers le même charset est-il pénalisant, ou bien SQL Server, dans sa grande sagesse, l'ignore tout bonnement lorsqu'il est inutile ?


    Merci d'avance pour vos réponses
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Possiblement la tempdb qui sature à cause de tris, regroupements ou autres opérations du même genre.

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Ok merci.

    On va creuser dans cette direction.
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Tout dépend du style de codage de l'application.... Si une application fait des transactions explicite, SQL Server ne verra que la requête actuellement envoyée... pas les autres. Ce n'est que si tu es dans des routines que tu aura toutes les requêtes. Ainsi dans ce type d'application, un blocage peu naître d'une requête précédente qui a déjà disparue de l'exécution, amis dont les verrous sont toujours en cours...

    En gros, dans une application tu as une transaction explicite avec requête UPDATE qui pose des verrous exclusif sur T1, puis après un select sur T2 qui pose des verrous partagés sur T2, puis le COMMIT.... Tu verras donc que la dernière requête attend avec la libération des verrous de la précédente que tu n'as pus dans le cache si un autre processus la b loque par des verrous contradictoire....
    Bref, il faut remonter à "avant"... par le profiler par exemple en traquant le session_id.

    C'est pourquoi je préfère mille fois les procédures stockées !!!

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

Discussions similaires

  1. [Débutant] Cherche pistes pour developpement
    Par percy78 dans le forum Langages
    Réponses: 1
    Dernier message: 27/01/2017, 15h32
  2. Cherche pistes pour démarrer
    Par StringBuilder dans le forum Android
    Réponses: 15
    Dernier message: 16/07/2012, 12h41
  3. cherche code pour convertir un décimal en base 35
    Par coufcouf dans le forum Langage
    Réponses: 2
    Dernier message: 05/03/2007, 15h44
  4. Réponses: 4
    Dernier message: 11/10/2006, 13h48
  5. [SRC] Cherche piste pour TLabel orientable
    Par Kaejar dans le forum C++Builder
    Réponses: 16
    Dernier message: 08/06/2005, 17h13

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