В тази статия искам да споделя как да премахнете някои планове със заявки от кеша на процедура. Когато може да възникне такава необходимост? Например, съхранена процедура започва с такъв параметър, което води до образуването на неоптимално план заявка за съхранена процедура. И най-вече, за този конкретен случай е най-добрият план, но по-често тази процедура се използва с доста различни параметри, за които планът вече няма да е оптимално. Естествено, че е необходимо да се работи за такава процедура, като изисква от нея да се гарантира, че подобни инциденти не се повтори, но в момента, в който трябва да се премахне плана за заявка от кеша да се започне нова запомнена процедура доведе до съставянето и формирането на желания план. Разбира се в този случай ние не искаме да влияе на други планове в кеш паметта, така че да не предизвика масов прекомпилиране на запитвания и натоварват излишно.
Първи вариант, можете да промените съхранената процедура по себе си. Такива като откривателя на обекта, за да изберете съхранена процедура да се направи Script Store процедурен -> ALTER да -> New Query прозореца и да изпълни това, което имаме.
Сценарий на запомнени процедури
Това ще доведе до факта, че следващия път, когато съхранената процедура ще бъде то прекомпилирани. Методът е много прост и бърз, но той има един недостатък: тя води до промяна в областта на системната modify_date sys.objects представителство, въпреки че в действителност всички промени, които сме направили.
Вариант втори, по-сложни, за да направите запитване за Repose sys.dm_exec_cached_plans на системата, за да се получи желания дръжката (или дръжките) под оптималните планове и да ги премахнете от кеша от DBCC FREEPROCCACHE. Например, в моя тест база данни, аз ще направя такова искане и получаване на стойността на plan_handle област.