est exécutant une instruction code> alter code> pour une procédure stockée car tous les plans d'exécution mis en cache pour cette procédure stockée deviennent invalides et expirent dans SQL Server 2008/2005? P>
3 Réponses :
oui.
Vous pouvez vérifier cela en faisant p> avant et après. p> "http: // http: // technique.microsoft.com/en-us/library/cc293624.aspx "rel =" noreferrer "> TechNet P> [Situations dans lesquelles des plans serait supprimé du cache inclure] Les opérations globales telles que l'exécution
DBCC FreeProctacaCaCaCaCaCaCaCaCrocaC (code> pour effacer tous les plans du cache, ainsi que des modifications à une seule procédure, telle que
alter Procédure code>, qui supprimerait tous les plans de cette procédure de cache. p>
blockQuote> p>
Alors que je vous croyais (comme vous avez une bonne réputation), il est documenté sur MSDN n'importe où
Oui ce sera. Trouvera un lien.
@Aaron - ne mentionne pas explicitement alter proc code> que je peux voir.
Je pense que la table code> ou affichage code> est destinée à signifier tout changement de schéma. Vous pouvez vérifier avec les événements de trace que le schéma a changé la sous-classe est ce qui se produit.
Eh bien, au moins, vous verrez SP: CacherMove Events (pas nécessairement un recompilement explicite).
@Aaron - Yep. J'espérais juste trouver une citation absolument non ambiguë mais pas de chance jusqu'à présent
@Kane - l'a trouvé absolument sans ambiguïté ici! . .. Ces situations comprenaient des opérations globales telles que l'exécution de FreeProctaccacaccacacacédent à tous les plans du cache, ainsi que des modifications à une seule procédure, telles que la procédure d'altérilitation, qui supprimerait tous les plans de cette procédure de cache. ... code>
FYI J'ai déposé un bug contre la documentation. connect.microsoft.com/sqlserver/feedback/Détails/687418 .. . N'hésitez pas à voter / commentaires.
L'élément Connect a été mis à jour avec un engagement de corriger la documentation.
@Aaronbertrand, mais qu'en est-il des procédures stockées qui utilisent SQL dynamique où des mandrins de code SQL sont ajoutés à (ou supprimés de) l'instruction SQL résultante? En fonction des paramètres d'entrée, la même SCROC peut générer différentes déclarations ad-hoc SQL. Cela peut être le cas des Sprates utilisées pour la recherche et la filtration des données à afficher dans les grilles d'interface utilisateur. Lorsque cette SPROC est abandonnée et créée à nouveau (par exemple avec code mis à jour), ces plans précédemment mis en cache pour chaque cas d'appel à la CPR-SPROP ont également été retirés du cache? Je ne le pense pas.
@Andrews qui est facile à tester, non? N'oubliez pas que quelque chose une procédure appelle via sys.sp_executeql code> ne "appartient pas" à cette procédure stockée; La question n'était pas sur le SQL dynamique. Si vous déposez / créez ou modifiez la procédure, vous verrez le plan
PROC CODE> DISPLAIER, mais tout
adhoc code> ou
préparé code> des plans résultant de la dynamique. SQL restera, car ils ne sont pas directement associés à la procédure (et peuvent être partagés avec d'autres procédures, ou code ad hoc, qui appelle exactement les mêmes états avec les mêmes paramètres de session exacts).
oui. Bien sûr, cela est facile à tester:
la ligne de sys.dm_exec_cached_plans est parti p>
mais si votre procédure a dynamique SQL, le plan code> Proc code> disparaîtra, mais des plans d'enfants ( résultats: p> maintenant, modifier la procédure (mais de telle manière qu'elle reste produit le même SQL): p> la requête ci-dessus rendement: p> Bien sûr que ce n'est pas un état permanent - D'autres requêtes et autres pressions de mémoire sur le système dicteront combien de temps ces requêtes ad hoc restent dans le cache. p> p> adhoc code> /
préparé code> ) restera. p>
Cela fait - mais il peut y avoir d'autres facteurs. P>
Parfois avec de graves problèmes de performances, j'ai constaté que l'exécution explicitement sur dBCC FreeProccaCaCaCaCaCaCaCaCaCaCache CODE> peut améliorer considérablement les performances du système. Bien sûr, vous pouvez également expliquer explicitement le cache pour une seule SPUCT si vous savez que cela pose des problèmes. P>
Est-ce dans une situation où le cache de plan est plein de nombreuses requêtes adhoc à usage unique ou quelque chose? Si cela optimise pour les charges de travail Adhoc pourrait être une option.
Pour être honnête, j'ai vu cela plusieurs fois, j'ai passé beaucoup de temps dessus la première fois à essayer de résoudre - eu des entrepreneurs dans et tout. Nous ne sommes jamais arrivés à la cause de la route seulement découvert qu'après beaucoup de mises à jour de base de données, il était parfois nécessaire d'appeler dbcc libresProctacaccaché code>.