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

MS SQL Server Discussion :

Fonction Bloquée : souci de plan d'exécution ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut Fonction Bloquée : souci de plan d'exécution ?
    Bonjour,

    Depuis quelques semaines, je fais face à une problématique de performance sur une fonction de mon application.

    Il s'agit d'une fonction que je qualifierais de complexe et qui traite bcp de données (à mon niveau ). Elle est appelée par un programme .Net de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from MaFonction([param]).
    En temps normal, elle répond entre 50 & 100 ms. Mais pour une raison que je cherche encore, elle passe à plus de 5 minutes ...

    Evidemment, quand je l'exécute directement dans Management Studio, elle retombe à 50 ms. Dans un premier temps, on a donc pensé à un souci de code. Mais les différents tests (modification de la fonction, changement de mode d'appels, ...) n'ont rien données

    La solution trouvée pour le moment est :
    - redémarrer le serveur (ne fonctionne plus depuis quelques jours),
    - supprimer puis recréer la fonction (3/4 fois car une fois ne suffit pas).

    Au regard de nos recherche, on pense à un souci de plan d'exécution mais être sur.

    Ma question : dans ce genre de situation --> que chercher ? que regardez ? quelle trace ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    En effet cela peut faire penser à un mauvais plan d’exécution (parameter sniffing).

    Qu'utilisez vous côté .net pour exécuter ? ADO.NET via SQLCLIENT? LINQ TO SQL? LINQ TO ENTITIES? autres?

    Postez le code de la fonction...

  3. #3
    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
    Citation Envoyé par maitrebn Voir le message
    Evidemment, quand je l'exécute directement dans Management Studio, elle retombe à 50 ms.
    Avec les mêmes paramètres ?

    Au regard de nos recherche, on pense à un souci de plan d'exécution mais être sur.
    C'est probable. pouvez vous poster le code de la fonction ?

    Ma question : dans ce genre de situation --> que chercher ? que regardez ? quelle trace ?
    Vous pouvez déjà vous assurer que c'est bien la fonction en question qui met du temps à s'exécuter en lançant une trace sur l'évènement SP:Completed (avec le profiler )

    La solution trouvée pour le moment est :
    - redémarrer le serveur (ne fonctionne plus depuis quelques jours),
    - supprimer puis recréer la fonction (3/4 fois car une fois ne suffit pas).
    que se passe-t-il ensuite ? l'appel depuis le code retombe vers les 100 ms ?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    Bonjour,
    Il faut que je vois pour la fonction si je peux la mettre en ligne.

    Sinon :
    - aieeeuuuuu :
    • Oui avec les mêmes paramètres
    • J'ai validé que c'était bien cette fonction via SQL Manager,
    • Oui après le recréation de la PS, l'exécution dans le code passe à 100 ms,


    - iberserk
    -- ADO.NET / SQL Client

  5. #5
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    Est ce que les statistics sont à jour ? Est ce qu'un alter de la fonction suffit pour solutionner le problème ?

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    Oui les stats sont à jour (il y a une reconstruction journalière). Non, un alter ne suffit pas.

  7. #7
    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
    Citation Envoyé par maitrebn Voir le message
    La solution trouvée pour le moment est :
    - redémarrer le serveur (ne fonctionne plus depuis quelques jours),
    - supprimer puis recréer la fonction (3/4 fois car une fois ne suffit pas).
    si le but de tout ça est de forcer la régénération du plan d'exécution, un EXEC sp_recompile LaFunction sera quand même nettement moins violent !

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    On a essayé dans la commande mais cela n'a résolu le souci. J'essayerais avec sp_recompile.

    Mais le but pour le moment est plus de comprendre ce qui bloque ...

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    ou un :
    OPTION (RECOMPILE)
    en fin de requête SELECT.

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

  10. #10
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Bon, histoire d'avancer...

    Par exemple:
    Lancez une trace (SQL Profiler) avec les plan d’exécutions.

    Lorsque vous rencontrez le problème sauvegardez la ligne correspondante dans le profiler.

    Lancez ensuite la même requête dans SSMS et comparez les plans d’exécutions.

    NB: on a hâte de voir le code de cette fonction

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    .
    Pour le code, j'ai tjrs pas le GO pour la mettre en ligne ... et je pense que je ne l'aurais pas c'est pour cela que je cherche plutôt des pistes d'analyse.

    Dans le profiler : comment avoir une trace avec le plan d'exécution ?

Discussions similaires

  1. Plan d' exécution
    Par rod59 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/06/2006, 21h50
  2. Réponses: 11
    Dernier message: 17/05/2006, 08h39
  3. Comparer des plan d'exécution
    Par sygale dans le forum Oracle
    Réponses: 7
    Dernier message: 06/04/2006, 17h58
  4. DRIVER - fonctions dispatch - soucis de compilation
    Par - Robby - dans le forum Windows
    Réponses: 1
    Dernier message: 26/01/2006, 21h13
  5. Réponses: 3
    Dernier message: 22/07/2005, 15h16

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