Mamy jedno konkretne zapytanie SQL Server 2008 (nie zapisany proc, ale ten sam ciąg SQL - wykonywany co 5 minut), który sporadycznie buforuje bardzo zły plan zapytań.
To zapytanie zwykle działa w ciągu kilku milisekund, ale przy tym złym planie zapytań zajmuje to ponad 30 sekund.
Jak chirurgicznie usunąć tylko jeden zły plan zapytań z pamięci podręcznej z programu SQL Server 2008, nie usuwając całej pamięci podręcznej zapytań na produkcyjnym serwerze bazy danych?
sql-server
sql-server-2008
cache
query
Jeff Atwood
źródło
źródło
Odpowiedzi:
Wymyśliłem kilka rzeczy
pokaże wszystkie buforowane plany zapytań. Niestety nie jest tam wyświetlany tekst SQL.
Możesz jednak dołączyć tekst SQL do planów w następujący sposób:
Odtąd dodawanie
WHERE
klauzuli w celu znalezienia SQL, o którym wiem, że jest w zapytaniu, jest dość proste , a następnie mogę wykonać:aby usunąć każdy plan zapytań z pamięci podręcznej planu zapytań. Nie do końca łatwe lub wygodne, ale wydaje się działać.
edycja: zrzut całej pamięci podręcznej zapytania również będzie działał i jest mniej niebezpieczny niż się wydaje, przynajmniej z mojego doświadczenia:
źródło
Jeśli wiesz, jak wygląda dobry plan, skorzystaj z podpowiedzi .
Nie można usunąć określonego wpisu pamięci podręcznej, ale można wyczyścić całą pulę pamięci podręcznej
DBCC FREESYSTEMCACHE(cachename/poolname)
.Możesz uzyskać nazwę pamięci podręcznej złego planu zapytań, jeśli masz uchwyt planu (z sys.dm_exec_requests.plan_handle dla id_sesji w kłopocie podczas wykonywania lub z sys.dm_exec_query_stats po wykonaniu):
Jednak wszystkie plany SQL mają nazwę „Plany SQL”, co sprawia, że wybranie odpowiedniego dla DBCC FREESYSTEMCACHE jest ... trudnym wyborem.
Aktualizacja
Nieważne, zapomniałem
DBCC FREEPROCCACHE(plan_handle)
, tak, to zadziała.źródło
sys.dm_exec_cached_plans
nie ma w nim wpisu dlaplan_handle
odsys.dm_exec_requests
?Rozwiązanie FREEPROCCACHE jest w porządku, ale bardziej bezpośrednim sposobem na to jest użycie OPCJI (RECOMPILE) na swoim ciągu SQL (wspomniałeś, że to nie był SP), to mówi silnikowi, że jest to plan jednorazowego użytku, ponieważ prawdopodobnie podejrzewasz istnieje wąchanie parametrów lub statystyki są drastycznie różne w różnych biegach i podejrzewasz, że jest to problem z błędnym planem buforowanym.
źródło