Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure SQL Database
Podczas tworzenia przewodnika dotyczącego planu możesz użyć programu SQL Server Profiler do przechwycenia dokładnego tekstu zapytania do użycia w argumencie statement_text procedury składowanej sp_create_plan_guide. Pomaga to upewnić się, że przewodnik planu zostanie dopasowany do zapytania w czasie kompilacji. Po utworzeniu przewodnika planu można również użyć programu SQL Server Profiler do przetestowania, czy przewodnik planu jest w rzeczywistości dopasowany do zapytania. Ogólnie rzecz biorąc, należy przetestować przewodniki planu przy użyciu programu SQL Server Profiler, aby sprawdzić, czy zapytanie jest dopasowane do przewodnika planu.
Przechwytywanie tekstu zapytania przy użyciu programu SQL Server Profiler
Jeśli uruchomisz zapytanie i przechwycisz tekst dokładnie tak, jak został przesłany do programu SQL Server przy użyciu programu SQL Server Profiler, możesz utworzyć przewodnik planu typu SQL lub SZABLON, który będzie dokładnie pasował do tekstu zapytania. Zapewnia to, że przewodnik planowania jest używany przez optymalizator zapytań.
Rozważ następujące zapytanie przesłane przez aplikację jako samodzielną grupę.
SELECT COUNT(*) AS c
FROM Sales.SalesOrderHeader AS h
INNER JOIN Sales.SalesOrderDetail AS d
ON h.SalesOrderID = d.SalesOrderID
WHERE h.OrderDate BETWEEN '20000101' and '20050101';
Załóżmy, że to zapytanie ma zostać wykonane przy użyciu operacji sprzężenia scalania, ale showPLAN wskazuje, że zapytanie nie używa sprzężenia scalania. Nie można zmienić zapytania bezpośrednio w aplikacji, dlatego zamiast tego utworzysz przewodnik planu określający, że wskazówka zapytania MERGE JOIN zostanie dołączona do zapytania w czasie kompilacji.
Aby przechwycić tekst zapytania dokładnie tak, jak program SQL Server go otrzymuje, wykonaj następujące kroki:
Uruchom śledzenie za pomocą SQL Server Profiler. Upewnij się, że wybrano typ zdarzenia SQL:BatchStarting.
Uruchom zapytanie przez aplikację.
Wstrzymaj śledzenie profilera programu SQL Server.
Kliknij zdarzenie SQL:BatchStarting, które odpowiada zapytaniu.
Kliknij prawym przyciskiem myszy i wybierz Wyodrębnij dane zdarzenia.
Ważny
Nie próbuj skopiować tekstu wsadowego, zaznaczając go w dolnym okienku okna śledzenia profilera. Może to spowodować, że przewodnik planu, który tworzysz, może nie być zgodny z oryginalnym zestawem.
Zapisz dane zdarzenia w pliku. Jest to tekst wsadowy.
Otwórz plik tekstowy wsadowy w Notatniku i skopiuj tekst do buforu kopiowania i wklejania.
Utwórz przewodnik planu i wklej skopiowany tekst wewnątrz cudzysłowów ('') określonych dla argumentu @stmt. Należy uciec od jakiegokolwiek znaku apostrofu w argumencie @stmt, poprzedzając go innym znakiem apostrofu. Należy zachować ostrożność, aby nie dodawać ani usuwać żadnych innych znaków podczas wstawiania tych pojedynczych cudzysłowów. Na przykład literał daty „20000101” powinien być zapisany jako „”20000101„”.
Oto przewodnik po planie:
EXEC sp_create_plan_guide
@name = N'MyGuide1',
@stmt = N'<paste the text copied from the batch text file here>',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (MERGE JOIN)';
Przewodniki dotyczące planu testowania przy użyciu programu SQL Server Profiler
Aby sprawdzić, czy przewodnik planu jest dopasowywany do zapytania, wykonaj następujące kroki:
Uruchom ślad profilera programu SQL Server, upewniając się, że wybrano typ zdarzenia Showplan XML (znajdujący się w węźle wydajności).
Uruchom zapytanie przez aplikację.
Wstrzymaj śledzenie profilera programu SQL Server.
Znajdź zdarzenie Showplan XML dla kwerendy, której dotyczy problem.
Notatka
Nie można użyć zdarzenia Showplan XML dla kompilacji zapytania. PlanGuideDB nie istnieje w tym przypadku.
Jeśli przewodnik planu jest typu OBJECT lub SQL, sprawdź, czy zdarzenie Showplan XML zawiera atrybuty PlanGuideDB i PlanGuideName przewodnika planu, którego oczekujesz zgodności z zapytaniem. Lub w przypadku przewodnika po planie SZABLONu sprawdź, czy zdarzenie Showplan XML zawiera atrybuty TemplatePlanGuideDB i TemplatePlanGuideName dla oczekiwanego przewodnika planu. To potwierdza, że przewodnik planu działa. Te atrybuty znajdują się w <StmtSimple> elemencie planu.