Istnieje kilka sposobów, aby zapewnić rekompilacji procedury przechowywanej:
- użyciu
WITH RECOMPILE
,
- podejmowania procedura przechowywana dynamikę (myślę
exec()
)
- znakowanie proc do ponownej kompilacji z
sp_recompile
.
- zmianę schematu, że w pamięci podręcznej planu kwerend opiera
- wywołującego
DBCC FREEPROCCACHE
- Na poziomie zapytań sprawozdaniem jednostkowym ciągu proc mogą być ponownie skompilowana z nutą zapytań RECOMPILE (SQL 2008).
Czynniki rekompilacji
Oprócz twardych czynników wymienionych powyżej, co powoduje, że procedura przechowywana rekompilacji? Cóż, wiele rzeczy. Niektóre z nich są splecione z powyższą listą, ale chcę je ponownie przedstawić b/c, co może nie być oczywiste.
- Wstawianie lub usuwanie dużej ilości danych (gęstość danych w indeksach & stoły często kontroluje planów kwerend)
- Odbudowa indeksów (zmiana obiektów bazowych)
- Tworzenie/upuszczanie tabel tymczasowych (ponownie, leżące u podstaw zmian DML).
- planu kwerend ages out (nie myśl wykorzystywane niedawno i SQL chcą, aby oczyścić wykorzystania pamięci)
To bynajmniej nie wyczerpującej listy. Optymalizator zapytań ewoluuje i zaskakuje niezależnie od tego, jak długo korzystasz z SQL Server. Ale tutaj są pewne środki, które mogą być użyteczne:
ALE CZEKŁO - ALE WIĘCEJ!
Z tym stwierdzeniem, domniemaniem w twoim pytaniu jest, że rekompiluje zawsze złe wykonanie. W rzeczywistości często rekompliacja jest dobra.
Więc kiedy chcesz go przekompilować? Spójrzmy na jeden przykład proc, który wyszukuje po nazwisku. Przechowywane procedury to "parameter sniffing", które jest błogosławieństwem (jeśli działa dla ciebie) i przekleństwem (jeśli działa przeciwko tobie). Najpierw przekaż komuś hasło: Zebr%
dla zerbrowskiego. Indeks ostatnich nazw zdaje sobie sprawę, że jest to bardzo specyficzne i zwróci, powiedzmy, 3 wiersze z miliona - więc jeden plan wykonania jest zbudowany. Z proc skompilowany dla wyniku niskiego rzędu, następne wyszukiwanie jest dla S%
. Cóż, S jest Twoim najczęstszym imieniem i pasuje do 933,543 wierszy z 1 miliona.
Tak. Teraz o co chodzi? –
Myślę, że musisz zadać konkretne pytanie. –