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

Développement SQL Server Discussion :

Comportement étrange procédure stockée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 130
    Par défaut Comportement étrange procédure stockée
    Bonjour à toutes et à tous,

    je rencontre un phénomène quelque peu étrange que je ne m'explique pas...
    Voilà mon problème :

    Je dispose de 2 bases de données dont le contenu est identique, dans le même environnement (seul leur nom change car elles ne vont pas être utilisées de la même façon, mais ce n'est pas le sujet).
    Je lance une procédure stockée (récupération de données selon différents critères, sur plusieurs vues), la même, sur chacune des 2 bases.

    Le temps d'exécution pour chaque BDD est complètement incohérent : quelques secondes pour la première, plusieurs minutes pour la seconde

    L'ennui c'est que cette procédure est utilisée en production, et que selon le volume de données demandées (filtre sur une plage temporelle), son utilisation habituelle est plutôt de l'ordre de la 1/2h...
    Je pensais que cela venait de l'environnement de production, mais vu mes résultats en développement je commence à avoir de sérieux doutes

    Quelqu'un aurait-il une idée ? Des propriétés à regarder du côté des bdd ?

    Merci par avance !

  2. #2
    Membre éprouvé Avatar de pulsdrum
    Homme Profil pro
    MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Inscrit en
    Juillet 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 61
    Par défaut
    Bonjour,

    Plusieurs pistes :
    - Regarde dans les propriétés de tes bases de données dans quels fichiers / disques dures elles sont stockées.
    - Regarde les index utilisés par la procédure via l’affichage du plan d'exécution graphique dans SQL Server Management Studio.
    - Regarde si t’es tables/vues utilisées par la procédure son partitionnées.

    D’autre part, sache que tu peux optimiser ta procédure pour des paramètres spécifique (OPTION OPTIMIZE FOR).

    Tu peux aussi utiliser l’option « WITH RECOMPILE » pour dire à SQL Server de générer un nouveau plan d’exécution à chaque appel de la procédure.

    Enfin tu peux utiliser "SQL Server Database Engine Tuning Advisor" pour optimiser ta procédure. Il te proposera de créer des index, de partitionner t’es tables… S’il pense que c’est utile

    ++

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Tu peux aussi utiliser l’option « WITH RECOMPILE » pour dire à SQL Server de générer un nouveau plan d’exécution à chaque appel de la procédure.
    Si la procédure stockée est utilisée en production et appelée très fréquemment, cela va consommer beaucoup de CPU.

    En piste 1 on peut tout simplement vérifier si les statistiques sont maintenues sur les deux serveurs ...

    @++

  4. #4
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 130
    Par défaut
    Bonjour et merci pour vos réponses

    @pulsdrum :
    les fichiers de bdd et les logs pour les 2 bases sont stockées au même endroit.

    @elsuket :
    de quelles statistiques parles-tu ?

    La procédure stockée n'est a priori pas utilisée souvent, quelques fois par jour.
    Je vais regarder du côté de "SQL Server Database Engine Tuning Advisor" aussi...
    mais j'ai des doutes que ce ne soit qu'un histoire d'optimisation si ?
    Dans le sens où avec les mêmes données qu'en production je passe de 5 minutes à 1/2h...

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Les statistiques, ça change vraiment tout.
    J'aime bien l'exemple de l'annuaire, ça parle aux gens. Alors imaginez la requête suivante : trouvez toutes les personnes s'appelant "Ichido", pour toutes les villes.

    Mon annuaire comporte réellement 10 villes, et 10000 noms (la plupart différents, peut-être 9000 valeurs différentes) par ville.

    Statistiques à jour : il y a 10 villes dans l'annuaire, la dispersion sur les noms est très forte, je vais aller regarder chaque ville et pour chacune, je vais essayer de trouver le nom. Je vais faire 10 lectures à petit scan d'index, et concaténer le tout.
    Statistiques pas du à jour : j'ai 10000 villes, et seulement 10 noms par ville. Il semble nettement plus raisonnable de tout lire d'un coup, et filtrer directement sur le nom. Je fais un "full table scan" et je me lis les 100 000 enregistrements.

    On imagine la différence de temps de traitement

  6. #6
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 130
    Par défaut
    En fait j'avais rapatrié une sauvegarde la bdd de production pour la tester (histoire d'avoir les mêmes volumes). Je dois donc avoir les mêmes statistiques dans les 2 environnements non ? Tout comme le même taux de fragmentation des index a priori ?

    A noter que j'utilise la base en source pour Reporting Services. Je sais que je ne suis pas sur le forum Microsoft BI, mais pensez-vous que ça puisse jouer d'une façon ou d'une autre sur le temps de réponse ?
    Je ne vois que ça comme différence entre mes 2 bases de test en fait...

Discussions similaires

  1. Procédure stockée : comportement instable
    Par dgi77 dans le forum PL/SQL
    Réponses: 11
    Dernier message: 25/10/2007, 18h30
  2. Procédure stockée : comportement instable
    Par dgi77 dans le forum SQL
    Réponses: 11
    Dernier message: 25/10/2007, 18h30
  3. Réponses: 18
    Dernier message: 04/04/2007, 14h34
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  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