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 :

Auditer les locks ratés ?


Sujet :

Administration SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Auditer les locks ratés ?
    Bonjour,

    nous avons un sql server 2017 avec une activité assez importante (milliers d'update par heure).
    De manière sporadique (quelques fois par jour), nous avons des transactions qui tombent en timeout à cause de lock refusé. Nous avons analysé l'application mais nous n'avons pas trouvé la raison.

    De manière à investiguer, est-il possible en cas de lock refusé d'enregistrer "quelque part" (fichier, table, event viewer, ... n'importe où) les instructions en cours qui font qu'un select/update ne peut être effectué ?
    (au niveau appli on a un timeout sur select * from table where id in (<valueList>) ).

    Merci.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    novembre 2014
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

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

    Informations forums :
    Inscription : novembre 2014
    Messages : 782
    Points : 1 328
    Points
    1 328
    Billets dans le blog
    2
    Par défaut
    vous pouvez tracer les deadlock en activant le trace flag

    DBCC TRACEON(1204)
    DBCC TRACEON(1222)

    l'information sera stocké dans l'errorlog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC master.dbo.xp_readerrorlog 0, 1, N'deadlock victim=process', NULL, NULL, NULL, N'desc'

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    août 2005
    Messages
    5 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 374
    Points : 12 726
    Points
    12 726
    Par défaut
    Est-ce que tu peux définir un lock refusé ? Est-ce qu'il s'agirait de locks en timeout? De deadlocks ?
    Comment tu l'identifies à ton niveau pour le moment ?

    Si deadlock comme stipulé par Boubou2020 je ne conseille pas d'activer les trace flags car d'une part leur exploitation est compliquée dans le journal des erreurs SQL et d'autre part ils sont par défaut capturés dans la session d'événement étendue system_health avec SQL Server 2017.

    ++

  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
    20 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 557
    Points : 48 651
    Points
    48 651
    Billets dans le blog
    1
    Par défaut
    En sus cette méthode est considérée comme obsolète.... Pour les deadlock utilisez le profiler SQL.

    Pour le timemout il faut faire une session d'événement étendu en capturant les erreurs :
    • 8645
    • 17197
    • 17830




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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut profiler sql
    @mikedavem:
    "Est-ce que tu peux définir un lock refusé ? Est-ce qu'il s'agirait de locks en timeout? De deadlocks ?
    Comment tu l'identifies à ton niveau pour le moment ?"
    => au niveau du serveur applicatif
    System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
    statement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM stubbe.UniqueIdentifier (NOLOCK) WHERE Id IN 
    (
    'QCBDRa1AnqQQFHx00000042403241n9EAA021012007',
    'QCBDRa1AnqqVeub00000042403241n9EAA021012007',
    'QCBDRa1AnqQW0i400000042403241n9EAA021012007',
    'QCBDRa1AnqqX7WN00000042403241n9EAA021012007',
    'QCBDRa1AnQQy1Re00000042403241n9EAA021012007'
    )

    Pour le profiler sql , ca veut dire que je dois le laisser capturer des trucs pendant des heures et espérer que ça arrive assez vite.
    Ma question n'est pas ça: est-il possible via une configuration/un trigger/... de générer une trace quand une instruction sql tel update/select/delete renvoie un timeout, trace comprenant la raison du timeout (e.g. l'id de la seconde session/instruction qui a causé le lock), de manière à avoir de quoi investiguer sans devoir lancer à posteriori un profiler et espérer qu'exactement le même souci se produise endéans un temps raisonnable.

Discussions similaires

  1. Audit "Account Locked"
    Par nicolas23 dans le forum Administration
    Réponses: 5
    Dernier message: 01/08/2007, 12h42
  2. [ASE][T-SQL]SElect et les Lock Sh_
    Par exempleinfo dans le forum Sybase
    Réponses: 1
    Dernier message: 29/03/2006, 17h36
  3. [ASE] Les locks avec un cursor for update
    Par PiyuXYZ dans le forum Sybase
    Réponses: 1
    Dernier message: 11/02/2006, 14h17
  4. auditer les updates
    Par Isabella dans le forum Oracle
    Réponses: 7
    Dernier message: 07/12/2005, 16h20
  5. [DTS] Comment auditer les transformations sql faites via DTS
    Par danmick dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/08/2005, 08h40

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