6
votes

Quels facteurs peuvent provoquer une recompilation de procédure stockée sur SQL Server?

Quels facteurs devrais-je être au courant de cela peut causer une recompilation de procédure stockée excessive?

Exemples du code qui entraînera une procédure stockée à recompiler serait utile. Le but serait d'éviter une recompilation si possible, ce qui devrait améliorer les performances.

Les chemins SQL dynamiques et variables entraînant des sorties différentes (soit par type de données et / ou nombre de colonnes) semblent pouvoir présenter un problème. Les hypothèses sont-elles correctes? Y a-t-il d'autres exemples?

Edit: J'ai trouvé un autre exemple. Créer une table temporaire dans une déclaration de contrôle de flux entraînera un recompilement.


4 commentaires

Oui. Maintenant quelle est la question?


Je pense que vous devez poser une question spécifique.


J'ai posté une réponse à cette question en double ici: Quand une procédure stockée est-elle recompilée


Dupliqué possible de Quand une procédure stockée est-elle recompilée? (SQL Server)


3 Réponses :


18
votes

Il existe quelques façons d'assurer la recompilation d'une procédure stockée:

  • en utilisant avec recompilement ,
  • Faire la procédure stockée dynamique (penser exec () )
  • Marquage de la procédure pour recompiler avec sp_recompile .
  • Changer le schéma qu'un plan de requête en cache repose sur
  • appelant dbcc freeProccaccache
  • au niveau de la requête Une instruction individuelle dans un proc pouvant être recompilée avec la requête de requête recompile (SQL 2008).

    FACTEURS DE RECOMPILATION

    Outre les facteurs difficiles énumérés ci-dessus, quelles sont les causes de la procédure stockée? Eh bien, beaucoup de choses. Certaines d'entre elles sont entrelacées avec la liste ci-dessus, mais je veux les réexprimer B / C, cela pourrait ne pas être évident.

    • L'insertion ou la suppression de nombreux données (la densité de données dans les index et les tableaux contrôle souvent les plans de requête)
    • Index de reconstruction (une modification des objets sous-jacents)
    • créer / déposer des tables Temps (à nouveau, sous-jacentes à des modifications DML).
    • Plan de requête Âge (pense pas utilisé récemment et SQL souhaitant à nettoyer l'utilisation de la mémoire)

      Ceci n'est en aucun cas une liste exhaustive. L'optimiseur de requête évolue et surprend selon la durée de l'utilisation du serveur SQL. Mais voici quelques ressources pouvant être utiles:


0 commentaires

3
votes

Certaines options de réglage peuvent provoquer une recompilation de procédure stockée ou même plusieurs recompilations dans une seule exécution!

Certaines de ces options ne peuvent pas être même à l'intérieur du SP P>

--this will cause recompilation
SET concat_null_yields_null ON;
EXEC spMyProc;


0 commentaires

0
votes

Les paramètres de nombres en option / variant peuvent également ressembler à une recompilation, car les plans sont mis en cache contre une liste d'arguments spécifique.

Dans les cas où des déclarations sont converties en SP par la connexion (dans l'espoir de la réutilisation future), les valeurs sont extraites et paramétrées.

Si ces paramètres incluent des éléments tels que dans les clauses peuplées de manière dynamique par l'appelant, la liste des paramètres correspond rarement et vous voyez de nouveaux plans générés à chaque fois que la clause de la clause contient un nombre différent de valeurs.


0 commentaires