Udostępnij za pośrednictwem


Recompiling Stored Procedures

Jak baza danych została zmieniona przez akcje, takie jak indeksów Dodawanie lub zmienianie danych w indeksowanych kolumnach, pierwotnymi planami kwerendy, umożliwiające dostęp do jego tabel powinien być ponownie zoptymalizowane przez ponownej kompilacji je.This optimization happens automatically the first time a stored procedure is run after Microsoft SQL Server is restarted.Zachodzi także, jeśli używany przez zmiany procedura przechowywana nazwę tabela podstawowej.But if a new index is added from which the stored procedure might benefit, optimization does not happen until the next time the stored procedure is run after Microsoft SQL Server is restarted.W takim przypadku może być przydatne do wymuszenia procedurę przechowywaną, aby ponownie skompilować przy następnym czas wykonuje on

Inną przyczyną wymusić ponowną kompilację procedura przechowywana jest przeciwdziałać, gdy jest to konieczne, zachowanie "Wykrywanie parametrów" kompilacji procedura przechowywana.Kiedy SQL Server procedury przechowywane, wykonuje wszelkie parametry używane przez tę procedurę, gdy go kompiluje są dołączone jako część generowanie planu kwerend. Jeśli wartości te reprezentują typowe te z nazywany procedurę później, a następnie korzyści procedura przechowywana z planu kwerendy każdego razem kompiluje i wykonuje.W przeciwnym razie może ponieść wydajności.

Uwaga

SQL Server 2008 Funkcje poziomie instrukcja ponowną kompilację procedur przechowywanych.Kiedy SQL Server 2008 rekompilacji procedur przechowywanych, instrukcja, która spowodowała ponowną kompilację są kompilowane, a nie całą procedurę. W wyniku SQL Server używa wartości parametrów, jak istnieją w instrukcja ponownej ponowne generowanie planu kwerend. Wartości te mogą się różnić od tych, które pierwotnie zostały przekazane do procedury.

Wymusza ponowną kompilację procedura przechowywana

SQL Server udostępnia trzy sposoby wymusić ponowną kompilację procedura przechowywana:

  • The sp_recompile systemowa procedura składowana forces a recompile of a procedura przechowywana the next czas it is run.

  • Tworzenie procedury przechowywanej, które określa opcja WITH RECOMPILE w jego definicji wskazuje, że SQL Server nie buforuje plan dla tej procedury przechowywanej, procedura przechowywana jest ponownie kompilowana każdego czas jest on wykonywany. Opcja WITH RECOMPILE podczas procedura przechowywana zostały parametry, których wartości różnią się znacznie między wykonania procedura przechowywanaj, powodujące wykonanie różnych planów do utworzenia każdego czas.Użycie tej opcji jest mało prawdopodobna i powoduje, że przechowywana procedura do wykonania wolniej, ponieważ procedura przechowywana musi być ponownie skompilowana, każdy czas wykonywane jest.

    Jeśli chcesz tylko wykonania poszczególnych kwerend wewnątrz procedura przechowywana, aby być ponownie skompilowana, a nie całej procedura przechowywana, określ do kwerendy wskazówkę dotyczącą kwerendy RECOMPILE wewnątrz każdej kwerendy mają być ponownie kompilowana.Zachowanie to naśladuje SQL Serverjego zachowanie ponownej kompilacji poziomie instrukcja wspomniano powyżej, ale oprócz również za pomocą procedura przechowywana bieżące wartości parametrów, wskazówki dotyczącej kwerendy RECOMPILE używa wartości zmiennych lokalnych wewnątrz procedura przechowywana podczas kompilowania instrukcja. Opcja ta jest użyteczna w przypadku, gdy wartości nietypowych lub tymczasowe są używane w tylko podzbiór kwerendy należących do procedura przechowywana.Aby uzyskać więcej informacji zobacz Wskazówka dotycząca kwerendy (języka Transact-SQL).

  • Można wymusić procedura przechowywana, aby być ponownie skompilowana podczas wykonywania procedura przechowywana, określając opcję WITH RECOMPILE.Tej opcji należy używać tylko wtedy, gdy użytkownik jest podanie parametru jest nietypowych, lub jeśli dane znacznie uległy zmianie od czasu utworzenia procedura przechowywana.

    Uwaga

    Jeśli obiekt odwołuje się procedura przechowywana jest usunięty lub zmieniono jego nazwę, zwracany jest błąd, gdy procedura przechowywana jest wykonywane.Jeśli jednak obiekt, do którego odwołuje się procedura przechowywana jest zastępowany obiekt o takiej samej nazwie, procedura przechowywana jest wykonywany bez konieczności on odtworzony.

Ponowną kompilację procedura przechowywana jest uruchamiane przy następnym