Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Powoduje ponowne skompilowanie procedur przechowywanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika przy następnym uruchomieniu. Robi to poprzez usunięcie istniejącego planu z pamięci podręcznej procedur, wymuszając utworzenie nowego planu przy następnym uruchomieniu procedury lub wyzwalania. W kolekcji SQL Server Profiler zdarzenie SP:CacheInsert jest rejestrowane zamiast zdarzenia SP:Recompile.
Transact-SQL konwencje składni
Składnia
sp_recompile [ @objname = ] N'object'
[ ; ]
Arguments
[ @objname = ] N'object'
Kwalifikowana lub niekwalifikowana nazwa procedury przechowywanej, wyzwalacza, tabeli, widoku lub funkcji zdefiniowanej przez użytkownika w aktualnej bazie danych. @objname to nvarchar(776), bez domyślnego zachowania.
Jeśli @objname jest nazwą procedury przechowywanej, wyzwalacza lub funkcji zdefiniowanej przez użytkownika, procedura zapisana, wyzwalacz lub funkcja zostanie ponownie skompilowana przy następnym uruchomieniu.
Jeśli @objname jest nazwą tabeli lub widoku, wszystkie procedury przechowywane, wyzwalacze lub funkcje definiowane przez użytkownika, które odwołują się do tabeli lub widoku, zostaną ponownie skompilowane przy następnym uruchomieniu.
Zwracanie wartości kodu
0 (powodzenie) lub liczba niezerowa (niepowodzenie).
Uwagi
sp_recompile Szuka obiektu tylko w aktualnej bazie danych.
Zapytania używane przez procedury przechowywane, wyzwalacze i funkcje zdefiniowane przez użytkownika są optymalizowane tylko po ich kompilacji. W miarę wprowadzania indeksów lub innych zmian wpływających na statystyki w bazie danych, skompilowane procedury przechowywane, wyzwalacze i funkcje definiowane przez użytkownika mogą tracić efektywność. Poprzez ponowne kompilowanie procedur przechowywanych i wyzwalaczy działających na tabeli, możesz ponownie zoptymalizować zapytania.
Proaktywne wykonywanie tej procedury przechowywanej jest zazwyczaj zbędne. SQL Server automatycznie rekompiluje procedury przechowywane, wyzwalacze i funkcje definiowane przez użytkownika, gdy jest to korzystne. Istnieje wiele powodów, dla których silnik bazy danych może zdecydować się na rekompilację obiektów. Najczęściej automatyczne rekompilowanie następuje po zmianach w podstawowej szacunce kardynalności spowodowanych automatycznymi lub ręcznymi aktualizacjami statystyk.
Rekompilacja procedury przechowywanej przy każdym wykonaniu jest jednym z mniej efektywnych sposobów radzenia sobie z problemami planu zapytań spowodowanymi parametryzacją. Funkcja optymalizacji planu wrażliwego na parametry, wprowadzona w SQL Server 2022 (16.x), próbuje automatycznie rozwiązać ten problem. W poprzednich wersjach, zamiast wywoływać sp_recompile przy każdym wykonaniu, rozważmy:
- Dodaj opcję WITH RECOMPILE do zapytania, wymagającą zmiany kodu.
- Zastosuj
WITH RECOMPILEtę opcję wraz z przewodnikiem po planie. - Stosuj
WITH RECOMPILEtę opcję za pomocą podpowiedzi z Query Store bez wprowadzania zmian w kodzie. - Więcej informacji można znaleźć w artykule Rozwiązywanie zapytań z problemami planu wrażliwym na parametry.
Permissions
Wymaga zgody ALTER na określony obiekt.
Przykłady
Poniższy przykład powoduje, że procedury przechowywane, wyzwalacze i funkcje zdefiniowane przez użytkownika działające na tabeli Sales.Customer są rekompilowane przy następnym uruchomieniu.
USE AdventureWorks2022;
GO
EXECUTE sp_recompile N'Sales.Customer';
GO