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 :

Procédure stockée et timeout [2008R2]


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Procédure stockée et timeout
    Hello à tous,

    J'ai un souci depuis ce matin avec une procédure stockée.

    Lorsqu'une application (écrite en .NET framework 4.x) fait appel à cette dernière (avec tous les paramètres qui vont bien), sql server renvoie un timeout.

    Si j'exécute la même procédure directement dans SSMS avec les mêmes paramètres, tout se passe très bien et le chronomètre de SSMS indique 0 seconde.

    Sachant que le reste de l'application (accédant à la même DB que celle contenant la procédure stockée en question) fonctionne correctement, je m'interroge sur ce qui pourrait causer ce genre de comportement.

    J'ai déjà vérifier, il n'y a pas de verrou non libéré (en plus je n'aurais pas pu l'exécuter dans SSMS si ça avait été le cas).

    Je vous ai mis en pièce jointe :

    • le code de la procédure stockée (SP.sql)
    • le DDL de la table T_ACTIVATION_ACT (ACT.sql)
    • le DDL de la table T_DESACTIVATION_DAC (DAC.sql)
    • le plan d'exécution estimé de la procédure stockée (SP.xml)

    Si vous désirez le DDL des autres tables, il suffit de les demander. Ces deux tables-ci sont celles sur lesquelles la procédure passe le plus de temps.


    Merci d'avance car je nage dans le brouillard là.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    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 : 46
    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
    Par défaut
    Hello,

    Que donne le plan d'exécution réel ?

    ++

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Hello,

    Que donne le plan d'exécution réel ?

    ++
    Je vais tacher de fournir ça (faut que je chope avec user qui en a besoin pour avoir les paramètres adéquats car je vais tester sur le serveur de prod ^^).

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Il pourrait être intéressant de mettre un profiler pour voir exactement ce qui se passe quand la SP est appelée par l'application.

    Concernant votre SP, je tenterai déjà de remplacer vos NOT IN par des NOT EXISTS en s'assurant que les indexs nécessaires existent.

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Il pourrait être intéressant de mettre un profiler pour voir exactement ce qui se passe quand la SP est appelée par l'application.

    Concernant votre SP, je tenterai déjà de remplacer vos NOT IN par des NOT EXISTS en s'assurant que les indexs nécessaires existent.
    Cela m'a déjà été suggéré par darkelend (avec qui je converse par e-mail).
    Mais comme je lui ai dit, je ne comprends pas en quoi ce serait pertinant.
    Voilà ce que je lui ai répondu et avoir quoi il était d'accord :
    Citation Envoyé par kropernic par mail à darkelend
    En fait, après réflexion, je ne comprends pas pourquoi il veut mieux changer ces NOT IN en NOT EXISTS.

    Je ne pense pas que ce soit cela qui cause le problème. Sinon, la requête prendrait aussi pas mal de temps à s’exécuter lorsque je la lance dans SSMS.

    C’est qu’il doit y avoir un truc particulier avec le fait de la lancer depuis une application .NET…

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    En effet, cela n'explique pas la différence entre les deux méthodes (mais d'après vos plans d'éxécution, ces sous requetes ont un fort impact). Comme on peut supposer qu'il y a une différence au niveaus des plans d'éxécutions utilisé de part et d'autre, modifier la sp permettrait de faire d'une pierre deux coups. Cela dit il n'est pas garantit que cela apporte une amélioration à la requete, ce n'est qu'une suggestion à évaluer selon vos données.

    Par ailleur, comment testez vous depuis SSMS ? est-ce que vous appelez la SP avec un EXEC, ou est-ce que vous exécutez directement la requête qu'elle contient après avoir déclaré les différents paramètres ?

  7. #7
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    En effet, cela n'explique pas la différence entre les deux méthodes (mais d'après vos plans d'éxécution, ces sous requetes ont un fort impact). Comme on peut supposer qu'il y a une différence au niveau des plans d'éxécutions utilisé de part et d'autre, modifier la sp permettrait de faire d'une pierre deux coups. Cela dit il n'est pas garantit que cela apporte une amélioration à la requete, ce n'est qu'une suggestion à évaluer selon vos données.
    La db n'est pas bien grosse... Elle fait un peu moins de 15 GB (bon ce n'est plus la videothèque familiale en Access mais tout de même, une broutille pour MS SQL).

    Sinon, voici un nouvel extrait de mes échanges avec darkelend.
    Citation Envoyé par kropernic par mail avec darkelend
    Sorry mais j’ai pas l’habitude d’utiliser la fonction EXISTS en dehors d’une condition de IF.
    Du coup, j’ai du mal à y voir clair (faut avouer que n’avoir dormi que 4h n’aide pas des masses ‘-_-).

    Ca suffit si je remplace NOT IN par NOT EXISTS ?

    Plus généralement, est-ce qu’un NOT IN (suivi d’une requête) peut toujours être remplacé par un NOT EXISTS ?
    Qu'en est-il ? (il ne m'a pas répondu le bougre ^^)
    Citation Envoyé par aieeeuuuuu Voir le message
    Par ailleur, comment testez vous depuis SSMS ? est-ce que vous appelez la SP avec un EXEC, ou est-ce que vous exécutez directement la requête qu'elle contient après avoir déclaré les différents paramètres ?
    Je teste en faisant un EXEC.

    Entre temps, voici le plan d'exécution réel.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    J'oubliais ! J'ai lancé une trace dans le profiler. Je viens une ligne avec la SP en question mais que faut-il regarder ?

    Par contre, j'ai fait tester l'utilisateur en sélectionnant un autre type de chèque (cela affecte le paramètre @CHQ_TYPE et éventuellement le paramètre @CHQ_YEAR). Et là, ça passe...

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

Discussions similaires

  1. Timeout lors de l'exécution d'une procédure stockée
    Par duffman dans le forum Développement
    Réponses: 15
    Dernier message: 03/04/2012, 01h26
  2. procédure stockée/connection timeout
    Par Kropernic dans le forum VB.NET
    Réponses: 20
    Dernier message: 09/03/2012, 10h48
  3. Migration de données via Procédures stockées, erreur timeout
    Par Arnard dans le forum Accès aux données
    Réponses: 6
    Dernier message: 01/10/2009, 13h17
  4. Timeout et procédure stockée
    Par sybaris dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/08/2008, 09h00
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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