Symptomy
Po wypełnieniu zmiennej tabeli zawierającej wiele wierszy i dołączeniu jej do innych tabel optymalizator zapytań może wybrać nieefektywny plan kwerend, co może powodować wolniejsze działanie kwerendy.
Rozwiązanie
Po zastosowaniu tej poprawki możesz włączyć flagę śledzenia 2453, aby zezwolić na ponowne kompilację zmiennej tabeli w przypadku zmiany odpowiedniej liczby wierszy. Może to umożliwić Optymalizatorowi zapytań wybranie bardziej wydajnego planu. Problem został po raz pierwszy rozwiązany w poniższej aktualizacji zbiorczej lub/lub dodatkach Service Pack dla programu SQL Server.
Zbiorcza aktualizacja 3 dla programu SQL Server 2014 /en-us/help/2984923
Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla programu SQL Server:
Dodatki Service Pack są kumulatywne. Każdy nowy dodatek Service Pack zawiera wszystkie poprawki zawarte w poprzednich dodatkach Service Pack oraz nowe poprawki. Nasze zalecenie polega na zastosowaniu najnowszego dodatku Service Pack oraz najnowszej aktualizacji zbiorczej dla tego dodatku Service Pack. Instalowanie poprzedniego dodatku Service Pack przed instalacją najnowszego dodatku Service Pack nie jest konieczne. Aby znaleźć więcej informacji na temat najnowszego dodatku Service Pack i najnowszej aktualizacji zbiorczej, Skorzystaj z tabeli 1 w poniższym artykule:
Jak ustalić wersję, wersja i poziom aktualizacji programu SQL Server i jego składników
Więcej informacji
W przypadku użycia zmiennej tabeli w partii lub procedurze kwerenda jest kompilowana i zoptymalizowana pod kątem początkowego pustego stanu zmiennej tabeli. Jeśli ta zmienna tabeli jest wypełniana wieloma wierszami w czasie wykonywania, wstępnie skompilowany plan zapytań może nie być już optymalny. Na przykład kwerenda może przyłączyć się do zmiennej tabeli z pętlą zagnieżdżoną, ponieważ jest ona zwykle wydajniejsza w przypadku małej liczby wierszy. Ten plan kwerend może być nieefektywny, jeśli zmienna tabeli ma miliony wierszy. Dołączenie skrótu może być lepszym wyborem w tym warunku. Aby uzyskać nowy plan kwerend, należy go ponownie skompilować. W przeciwieństwie do innych tabel użytkownika lub tymczasowych, zmiana liczby wierszy w zmiennej tabeli nie powoduje wyzwolenia ponownej kompilacji zapytań. Zazwyczaj można to zrobić, korzystając z opcji (ponowna kompilacja), która ma koszt własny. Flaga śledzenia 2453 umożliwia ponowne kompilowanie zapytań bez opcji (ponowne KOMPILOWAnie). Ta flaga śledzenia różni się od opcji (ponowne KOMPILOWAnie) w dwóch głównych aspektach. (1) używa tego samego progu liczby wierszy co inne tabele. Kwerenda nie musi być kompilowana dla każdej opcji wykonywania odróżnienia (ponowne KOMPILOWAnie). Może wyzwolić ponowną kompilację tylko wtedy, gdy zmiana liczby wierszy przekracza wstępnie zdefiniowany próg. (2) opcja (kompilacja) wymusza, aby kwerenda była w trakcie wybierania parametrów i optymalizować jej wykonywanie. Ta flaga śledzenia nie wymusza wglądu do parametrów.Uwaga ta flaga śledzenia musi być włączona w czasie wykonywania. Tej flagi śledzenia nie można używać z QUERYTRACEON. Ta flaga śledzenia musi być używana z zachowaniem ostrożności, ponieważ może zwiększyć liczbę ponownych kompilacji zapytań, które mogą być kosztami większymi niż lepsze optymalizacje zapytań.
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".