none
Exécution de querry 5x plus rapide sur serveur sql local que sur réseau RRS feed

  • Question

  • Bonjour à tous et bonne année 

    Alors voilà, j'ai une application qui effectue toute une série de calculs au démarrage en lançant des querry. Lorsque je me branche sur mon serveur de production cette procédure met plus de 40 secondes pour se terminer. J'ai fait un backup de cette base de donnée de production et je l'ai installée en local sur ma machine. La première exécution me donne des temps de 20 secondes et les exécutions suivantes me donnent des temps de moins de 7 secondes!

    Dois-je comprendre qu'en travaillant avec une base de donnée locale, l'ordinateur met en cache toutes les infos (cela expliquerait les temps de réponse meilleurs)? 

    Dois-je comprendre qu'une base de données sur un serveur accessible sur le réseau ne peut pas me donner des temps de réponse aussi bon qu'une base de donnée locale?

    Je m'excuse par avance si ce sont des questions stupides mais j'aime bien comprendre. Une fois que j'aurai compris, je pourrai peut être envisager une optimisation quelconque.

    Encore une fois, une bonne année à tous. 

    mardi 6 janvier 2009 14:47

Réponses

  • Bonjour,

     

    Bonne année et comme je vois que c'est vôtre premier post sur les forums MSDN, je vous dis : bienvenue sur nos forums et j'espère que nous pourrons vous apporter rapidement une réponse satisfaisante à vôtre problème.

    Vôtre question est loin d'être stupide mais elle est une des plus complexes à expliquer.

    Tout query  executé entraîne la création de ce que l'on appelle ( entre autre ) un plan d'execution.En gros, Sql Server conserve la trace de l'exécution précédente, ce qui permet d'accélérer les executions suivantes

    Je vous invite à consulter ce lien ( pas évident à comprendre à la première lecture ) qui vous expliquera pourquoi, dans certaines conditions, un query s'éxécute plus rapidement la 2ème fois que la 1ère fois

    http://msdn.microsoft.com/fr-fr/library/ms181055.aspx

    si vous avez le courage, profitez-en pour lire le lien ( malheureusement en anglais ) qui est fourni à la fin de l'article.

     

    Pour la différence de temps d'execution entre un serveur local et réseau, l'une des premières explications ( très "bateau", je reconnais ) concerne le réseau : la transmission réseau est toujours plus lente qu'entre un processeur et un disque dur.

    Mais il peut y avoir d'autres raisons, comme, par exemple, la différence de charge entre un poste local et un serveur "remote". Il faudrait voir si le poste en réseau a les mêmes caractéristiques matérielles ( processeur/mémoire/disque ) que le poste local, de même il faudrait pouvoir comparer les apllications qui s'exécutent sur les 2 postes.

    Peut-être que des applications lourdes en IO s'excutent sur le poste en réseau ( s'il est serveur de fichiers ou de messagerie ). Peut-être que d'autres utilisateurs accédent à cette instance Sql Server en même temps que vous...

    Il faudrait aussi vérifier que certains paramètres concernant la mémoire minimum/maximum ne sont pas configurés de la même façon sur les 2 machines.

     

    Je ne peux que vous donner des pistes, car c'est un problème "classique" et tous les spécialistes que j'ai vu répondre sur le Forum MSDN US ( Getting Started with Sql Server ou Performance ) répondent la même chose : à configurations égales, un accès réseau est toujours plus lent qu'un accès local.Après, il faut vérifier le nombre et la lourdeur" des applications qui s'éxécutent sur les 2 machines.

     

    N'hésitez surtout pas à poster à nouveau pour une aide supplémentaire ou pour avoir plus d'explications

     

    Bonne journée

     

    PS : Le lien en français est valable pour Sql Server 2005 et 2008 ( un peu moins pour Sql Server 2000 )

     

     

     

    vendredi 9 janvier 2009 23:30