Udostępnij przez


Migrating Query Plans

W większości przypadków uaktualnienie bazy danych SQL Server 2008 powstanie kwerendy lepszą wydajność. Jednak jeśli kluczowych kwerendy, które dokładnie dostroić wydajność, można zachować planów kwerendy te kwerendy przed uaktualnieniem przez utworzenie prowadnicy plan dla każdej kwerendy.Jeśli po uaktualnieniu, optymalizator kwerendy wybiera mniej wydajne plan dla jednego lub więcej kwerend, można włączyć prowadnic plan i wymusić optymalizator kwerendy do używania pre-upgrade planów.

Aby utworzyć plan prowadnic przed uaktualnieniem, wykonaj następujące kroki:

  1. Rejestrowanie przy użyciu bieżącego planu dla każdej kwerendy krytycznym znaczeniu sp_create_plan_guide przechowywane procedury i określając planu kwerendy w wskazówki dotyczącej kwerendy USE PLAN.

  2. Sprawdź, czy plan wykonania kwerendy jest stosowany do kwerendy.

  3. Uaktualnianie bazy danych SQL Server 2008.

    Plany są utrwalane w bazie danych uaktualniony w prowadnice plan i służą jako powrót w odniesieniu do planu strat zauważyć po uaktualnieniu.

    Firma Microsoft zaleca, aby nie włączać prowadnic planu po aktualizacji, ponieważ może pominąć możliwości lepiej planów w nowej wersji lub odsetek rekompiluje ze względu na zaktualizowanych statystyk.

  4. Jeśli wybrano mniej wydajne planów po uaktualnieniu, uaktywnić wszystkie lub podzbiór planu prowadzi do zastąpienia nowe plany.

Przykład

W poniższym przykładzie pokazano, jak zarejestrować pre-upgrade plan dla kwerendy dzięki utworzeniu plan wykonania kwerendy.

Krok 1: Zbieranie plan

Zarejestrowane w plan wykonania kwerendy plan wykonania kwerendy kwerendy musi być w formacie XML.Planów kwerend w formacie XML może być produkowany przy użyciu następujących sposobów:

Aby uzyskać więcej informacji na temat produkcji i analizowanie planów kwerend Zobacz Analyzing a Query.

W poniższym przykładzie zbiera plan kwerend dla instrukcja SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC; za pomocą kwerend wysyłanych do dynamicznego zarządzania widokami.

USE AdventureWorks;
GO
SELECT query_plan
    FROM sys.dm_exec_query_stats AS qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
    CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, DEFAULT) AS qp
    WHERE st.text LIKE N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;%';
GO

Krok 2: Utwórz prowadnicę plan wymusić plan

Korzystając z plan wykonania kwerendy plan wykonania kwerendy kwerendy formacie XML (uzyskany przez jedną z metod opisanych wcześniej), skopiuj i Wklej plan wykonania kwerendy kwerendy jako ciąg literału wewnątrz określonych w klauzula OPTION sp_create_plan_guide wskazówki dotyczącej kwerendy USE PLAN.

W ramach plan wykonania kwerendy XML escape znaki cudzysłowu ('), które są wyświetlane w plan z drugiego znaku cudzysłowu przed utworzeniem plan wykonania kwerendy.Na przykład planu, który zawiera WHERE A.varchar = 'This is a string' muszą mieć zmienione znaczenie za przez zmodyfikowanie kodu do WHERE A.varchar = ''This is a string''.

Poniższy przykład tworzy plan wykonania kwerendy do plan wykonania kwerendy kwerend zebrane w kroku 1 i wstawia plan wykonania XML kwerendy w @hints parametr. Zwięzłość tylko częściowo plan wykonania wyników znajduje się w tym przykładzie.

EXECUTE sp_create_plan_guide 
@name = N'Guide1',
@stmt = N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION(USE PLAN N''<ShowPlanXML xmlns=''''https://schemas.microsoft.com/sqlserver/2004/07/showplan'''' 
    Version=''''0.5'''' Build=''''9.00.1116''''>
    <BatchSequence><Batch><Statements><StmtSimple>
    …
    </StmtSimple></Statements></Batch>
    </BatchSequence></ShowPlanXML>'')';
GO

Krok 3: Sprawdź, czy plan wykonania kwerendy jest stosowana do kwerend

Uruchom ponownie kwerendę i sprawdź planu kwerend, który jest wytwarzany.Należy skontaktować się z planem odpowiada jednej określonej plan wykonania kwerendy.