OVH Cloud OVH Cloud

EXECUTION LENTRE de PROCEDURE STOCKEE

3 réponses
Avatar
olivier
Nous sommes confronté à un curieux probleme sous SQL 2000 SP4 :
Nous avons créé un requete à laquelle 3 parametres typé sont passés, cette
requete comporte plusieurs jointures. Puis nous l'avons enregistrée en tant
que procédure stockée. Hors lorsque nous testons la procédure via l'analyseur
de requètes elle met 7 à 8 secondes à s'ecxécuter alors que si on execute
dans l'analyseur de requètes le requete elle même en déclarnt au préalable
les parametres, elle s'execute quasi immédiatement.
Pourquoi une procedure stockée est elle plus lente qu'un requete ?

3 réponses

Avatar
Philippe T [MS]
Bonjour,

Une recompilation de la procédure et une mise à jour des statistiques est
peut être nécessaire ?

----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"olivier" wrote in message
news:
Nous sommes confronté à un curieux probleme sous SQL 2000 SP4 :
Nous avons créé un requete à laquelle 3 parametres typé sont passés, cette
requete comporte plusieurs jointures. Puis nous l'avons enregistrée en
tant
que procédure stockée. Hors lorsque nous testons la procédure via
l'analyseur
de requètes elle met 7 à 8 secondes à s'ecxécuter alors que si on execute
dans l'analyseur de requètes le requete elle même en déclarnt au préalable
les parametres, elle s'execute quasi immédiatement.
Pourquoi une procedure stockée est elle plus lente qu'un requete ?


Avatar
BVesan
Bonjour,
Si la procédure comporte une unique requête et que l'instance de base de
données n'est pas chargée, le problème réside dans une différence de plan
d'accès.
Le plan d'accès de la requête lancée seule est calculé à la volée, en
tenant compte des valeurs des variables.
Celui de la procédure stockée est a priori pré calculé à la compilation ,
donc sans que l'optimiseur ait connaissance de la valeur des paramètres.

Une solution consisterait donc à créer la procédure en utilisant l'option
WITH RECOMPILE (recompilation avant chaque exécution).


Benjamin
Avatar
lionelp
Bonjour,

L'exécution de la requête et de la procédure stoqkée précédées de dbcc
freeproccache et set statistics profile on permettront certainement:
de comprendre qu'il y a des plans différents
de vérifier que dans un cas comme dans l'autre les statistiques estimées et
réalisées sont identiques sinon proches.

Il faut comprendre que :
lors de l'exécution d'une requête paramétrée l'optimiseur utilise les
statistiques généréles (entête de show_statistics)
lors de l'exécution d'un procédure stockée, à la première compilation, il y
a du "parameter sniffing", i.e. remplacement des paramètres par les valeurs,
et dans ce cas l'optimiseur utilise les statistiques détaillées (histogram
steps du show_statistics). La recompilation n'est pas systématique.

D'où des différences potentielles de temps d'exécution.

Cordialement,
Lionelp


Cordialement,
LionelP

"olivier" a écrit :

Nous sommes confronté à un curieux probleme sous SQL 2000 SP4 :
Nous avons créé un requete à laquelle 3 parametres typé sont passés, cette
requete comporte plusieurs jointures. Puis nous l'avons enregistrée en tant
que procédure stockée. Hors lorsque nous testons la procédure via l'analyseur
de requètes elle met 7 à 8 secondes à s'ecxécuter alors que si on execute
dans l'analyseur de requètes le requete elle même en déclarnt au préalable
les parametres, elle s'execute quasi immédiatement.
Pourquoi une procedure stockée est elle plus lente qu'un requete ?