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 :

Suivi des erreurs de type "Cannot insert duplicate key row"


Sujet :

Administration SQL Server

  1. #21
    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
    dbaffaleuf >> 01h44 ... insomnie passagère ou bien ?

    En fait, je pense que l'explication vient surtout du fait que d'insérer des données directement dans une table pourrait être extrêmement coûteux.

    Un thread de gestion de trace est exécuté toutes les 4 secondes lorsqu'une trace est active. Cette trace est responsable de l'écriture des données des buffers utilisés par les providers. Cela permet d'écrire de gros blocs de données sur disque d'un seul coup au lieu d'écrire sur disque à chaque fois qu'un événement est collecté. Cela réduit donc énormément l'impact d'une trace surtout sur un serveur extrêment chargé.

    Si l'on permet d'écrire dans une table directement (un provider dédié donc), on aurait un souci majeur : pour une table l'écriture avec de gros blocs de données n'est pas supporté. Celle-ci s'effectue ligne à ligne. Imaginez donc si le nombre d'événements à écrire devient très important on aurait quelques problèmes majeurs :

    Le buffer utilisé par le provider pourrait rapidement être saturé du fait de l'insertion ligne à ligne dans la table. Certaines événéments ne seraient donc plus tracés et même si l'on empêchait cette perte d'événements, cela pourrait engendrer un certain nombres de verrous sur la table.

    Je pense que c'est la raison pour laquelle un tel provider n'existe pas pour une trace serveur.

    ++

  2. #22
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    dbaffaleuf >> 01h44 ... insomnie passagère ou bien ? ++
    Non pas d'insomnies. Juste du boulot.
    David B.

  3. #23
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Si je comprends bien, cette limitation n'est pas levée avec SQL 2008 ?
    Enfin, ce qui est tout de même bizarre pour un risque de perf ou que les logs ne suivant pas, c'est que la fonction est autorisée avec un paramétrage manuel mais pas via un script.


    mikedavem
    Par contre, j'ai effectivement pensé à appliquer ta méthode, mais le Profiler ne propose d'enregistrer dans un fichier qu'avec le format .trc. Qui n'est pas au format texte, donc inutilisable en dehors de l'application.
    Tu l'utilisais comment ce fichier de trace ?

  4. #24
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Ce qui m'agace, c'est qu'il suffirait que le Profiler offre la clause OU dans son Filtre avant capture, et que dans les Logs, les erreurs entraînant une erreur soit identifiées (par exemple au niveau du champs "Success") pour éviter tout ce binz.

    C'est pourtant pas la mer à boire !!!!!!!!

  5. #25
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Merci pour vos explications. Un doc intéressant pour faire ce programme en .NET :

    http://msdn.microsoft.com/en-us/library/ms345134.aspx


    Pour FMJ,
    Tu l'utilisais comment ce fichier de trace ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *  INTO TABLE FROM :: fn_trace_gettable (N'z:\monfichiet.trc', 1)
    Emmanuel T.

  6. #26
    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 FMJ Voir le message
    Si je comprends bien, cette limitation n'est pas levée avec SQL 2008 ?
    Avec le profiler non mais avec les événements étendues oui
    Elsuket et moi même préparons un article à ce sujet.

    Par contre, j'ai effectivement pensé à appliquer ta méthode, mais le Profiler ne propose d'enregistrer dans un fichier qu'avec le format .trc. Qui n'est pas au format texte, donc inutilisable en dehors de l'application.
    Tu l'utilisais comment ce fichier de trace ?
    kagemaru a répondu à ta question. En utilisant la fonction ::fn_trace_gettable tu peux effectivement importer ce que tu veux dans une table.

    ++

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2014, 15h44
  2. Merge insert duplicate key in object index
    Par americ dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/06/2014, 16h16
  3. Requête insert + duplicate key update
    Par sfpx dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/05/2012, 07h16
  4. Thread avec des erreurs de type AccessViolation
    Par cvexxx dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2009, 09h34
  5. Réponses: 6
    Dernier message: 09/06/2006, 12h17

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