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.
Applies to:SQL Server
Details
| Attribute | Value |
|---|---|
| Product Name | SQL Server |
| Event ID | 2814 |
| Event Source | MSSQLSERVER |
| Component | SQLEngine |
| Symbolic Name | PR_POSSIBLE_INFINITE_RECOMPILE |
| Message Text | Wykryto możliwość nieskończonej ponownej kompilacji dla SQLHANDLE %hs, PlanHandle %hs, przesunięcie początkowe %d, przesunięcie końcowe %d. Ostatnią przyczyną ponownego kompilu była %d. |
Explanation
Co najmniej jedna instrukcja spowodowała ponowne skompilowania partii zapytań co najmniej 50 razy. Określona instrukcja powinna zostać poprawiona, aby uniknąć dalszych ponownych kompilacji.
W poniższej tabeli wymieniono przyczyny ponownej kompilacji.
| Reason code | Description |
|---|---|
| 1 | Schema changed |
| 2 | Statistics changed |
| 3 | Deferred compile |
| 4 | Ustawianie zmiany opcji |
| 5 | Zmieniono tabelę temp |
| 6 | Zmieniono zdalny zestaw wierszy |
| 7 | Zmieniono uprawnienia przeglądania |
| 8 | Zmieniono środowisko powiadomień o zapytaniach |
| 9 | PartitionView changed |
| 10 | Zmieniono opcje kursora |
| 11 | Żądana opcja (ponowna kompilacja) |
| 12 | Opróżniony plan sparametryzowany |
| 13 | Linearyzacja planu testowania |
| 14 | Planowanie wpływu na zmianę wersji bazy danych |
| 15 | Plan magazynu zapytań wymusza zmianę zasad |
| 16 | Wymuszenie wymuszania planu magazynu zapytań nie powiodło się |
| 17 | Brak planu magazynu zapytań |
| 18 | Przeplatane wykonanie wymagane ponownej kompilacji |
| 19 | Nie rekompiluj |
| 20 | Zmieniono wskazówki dotyczące magazynu zapytań |
| 21 | Aplikacja wskazówek dotyczących magazynu zapytań nie powiodła się |
| 22 | Ponowne komkompilowanie magazynu zapytań w celu przechwycenia zapytania kursora |
| 23 | Ponowne komponowanie w celu oczyszczenia planu dyspozytora wieloplanowego |
Aby wyświetlić wszystkie kody kompilacji, uruchom następujące dynamiczne zapytanie widoku zarządzania:
SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';
User action
Wyświetl instrukcję powodującą ponowną kompilację, uruchamiając następujące zapytanie. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. Kolumny
database_nameiobject_namesąNULLprzeznaczone dla ad hoc i przygotowane Transact-SQL instrukcji.SELECT DB_NAME(st.dbid) AS database_name, OBJECT_NAME(st.objectid) AS object_name, st.text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000 /* replace the 0x01000600B... value with the actual sql_handle */ ) AS st WHERE qs.statement_start_offset = 123 /* replace 123 with actual starting_offset value */ AND qs.statement_end_offset = 456 /* replace 456 with actual ending_offset value */ AND qs.plan_handle = 0x06000100A27E7C1FA821B10600; /* replace 0x06000100A27E7C1FA821B10600 with actual plan_handle value */Na podstawie opisu kodu przyczyny zmodyfikuj instrukcję, partię lub procedurę, aby uniknąć ponownej kompilacji. Na przykład procedura składowana może zawierać co najmniej jedną
SETinstrukcję. Te instrukcje należy usunąć z procedury.Aby uzyskać więcej przykładów przyczyn ponownej kompilacji i rozwiązań, zobacz Kompilacja wsadowa, Ponowne kompilowanie i Problemy z buforowaniem planu w programie SQL Server 2005. Aby uzyskać więcej informacji na temat ponownej kompilacji, zobacz Recompile execution plans (Ponowne kompilowanie planów wykonywania).
Jeśli problem będzie się powtarzać, skontaktuj się z pomocą techniczną firmy Microsoft.