Wykonanie planu buforowanie i ponowne użycie

SQL Server ma pulę pamięci, który jest używany do przechowywania planów wykonania i buforów danych.Procent z puli przydzielonych do planów wykonania lub bufory danych oscyluje dynamicznie, w zależności od stanu systemu.Część puli pamięci, która jest używana do przechowywania planów wykonania jest określany jako pamięć podręczna procedury.

SQL Server Plany wykonanie mają następujące główne składniki:

  • Plan kwerendy

    Większość plan wykonania jest strukturą re-entrant, tylko do odczytu danych używana przez dowolną liczbę użytkowników.To odnosi się do planu kwerend.Kontekst użytkownika nie jest przechowywana w planu kwerend.Są nigdy nie więcej niż jedną lub dwie kopie tej kwerendy, zaplanować w pamięci: jedna kopia dla wszystkich wykonań szeregowych i drugi dla wszystkich wykonań równoległych. Kopia równoległych obejmuje wszystkich wykonań równolegle, niezależnie od ich stopnia proste.

  • Kontekst wykonywania

    Każdy użytkownik, który jest aktualnie wykonywana kwerenda ma strukturę danych, który przechowuje dane specyficzne dla ich realizacji, takie jak wartości parametrów.Kontekst wykonywania odnosi się do tej struktury danych.Struktury danych kontekstu wykonania są używane ponownie.Jeśli użytkownik wykonuje kwerendę i jedną ze struktur nie jest używany, to ustawienie ponownie jest inicjowane z kontekstu dla nowego użytkownika.

Execution context, same query, different literals

When any SQL statement is executed in SQL Server, the relational engine first looks through the procedure cache to verify that an existing execution plan for the same SQL statement exists.SQL Server reuses any existing plan it finds, saving the overhead of recompiling the SQL statement.Jeśli nie z istniejących planów wykonywania, SQL Server generuje nowy plan wykonania kwerendy.

SQL Server ma efektywny algorytm do znalezienia wszystkich istniejących planów wykonywania żadnych konkretnych instrukcja języka SQL.W większości systemów minimalnych zasobów, które są używane przez to skanowanie jest mniejsza od zasobów, które są zapisywane przez możliwość ponowne używanie istniejących planów zamiast kompilowanie każdej instrukcja języka SQL.

Algorytmy, aby odpowiadały nowej instrukcji SQL do istniejących, nieużywane planów wykonania w pamięci podręcznej wymagają wszystkich odwołań do obiektu w pełni kwalifikowana.Na przykład pierwszy z nich SELECT instrukcje nie jest takie samo z istniejącego planu, a drugi jest takie samo:

SELECT * FROM Contact

SELECT * FROM Person.Contact

Usuwanie wykonanie plany z pamięć podręczna procedury

Plany wykonanie pozostają w pamięć podręczna procedury tak długo, jak jest za mało pamięci do ich przechowywania.Gdy istnieje ciśnienia pamięci, Database Engine podejściu ukierunkowany na koszty wykorzystuje do ustalenia, których wykonanie planów do usunięcia z pamięci podręcznej procedury. Podjęcie decyzji na koszty, Database Engine powoduje zwiększenie i zmniejszenie bieżącej zmiennej kosztów dla każdego planu wykonania następujących czynników.

Gdy proces użytkownika wstawia plan wykonania w pamięci podręcznej, proces użytkownika ustawia bieżący koszt równa pierwotnego kosztu kompilacji kwerendy; ad-hoc wykonanie planów, proces użytkownika ustawia bieżący koszt na zero.Po tej dacie za każdym razem, proces użytkownika odwołuje się do planu wykonania powoduje zresetowanie bieżący koszt do pierwotnego kosztu kompilacji; dla ad-hoc wykonanie planów zwiększa procesu użytkownik bieżący koszt.Dla wszystkich planów maksymalna wartość dla bieżącego kosztu jest pierwotnego kosztu kompilacji.

Gdy istnieje ciśnienia pamięci, Database Engine odpowiada usuwając planów wykonywania z pamięć podręczna procedury. Aby określić, które zamierza usunąć, Database Engine wielokrotne bada stan każdego plan wykonania i usuwa planów po ich koszt bieżący jest równy zero. Plan wykonania z zerową bieżący koszt nie jest usuwany automatycznie istnieje ciśnienia pamięci; jest on usuwany tylko wtedy, gdy Database Engine sprawdza, czy plan i bieżący koszt wynosi zero. Badając plan wykonania Database Engine Umieszcza bieżący koszt w kierunku zera, jeśli kwerendy nie jest aktualnie używany w planie, zmniejszając koszt bieżący.

The Database Engine repeatedly examines the execution plans until enough have been removed to satisfy memory requirements.W czasie, gdy istnieje ciśnienia pamięci, plan wykonania mogą mieć jego koszt wzrosła i zmniejszyła się więcej niż jeden raz.Gdy ciśnienia pamięci już nie istnieje, Database Engine Zatrzymuje, zmniejszając koszty bieżącego planów wykonania nieużywane i wszystkich planów wykonania pozostają pamięć podręczna procedury, nawet wtedy, gdy ich koszt wynosi zero.

The Database Engine uses the zasób monitor and user threads to free memory from the pamięć podręczna procedury in response to memory pressure. Wątki użytkowników i monitora zasób można sprawdzić planów jednocześnie uruchomić powoduje zmniejszenie bieżących kosztów dla każdego planu wykonania nieużywane.Monitor zasób usuwa planów wykonywania z pamięć podręczna procedury gdy istnieje ciśnienia globalnej pamięci.To powoduje zwolnienie pamięci, aby wymuszać zasady dla pamięci systemowej, proces pamięci, pamięci puli zasób i maksymalny rozmiar pamięci podręcznej wszystkie.

Maksymalny rozmiar pamięci podręcznej wszystkie jest funkcją rozmiar pula buforów i nie może przekraczać serwera maksymalną ilość pamięci.Aby uzyskać więcej informacji na temat konfigurowania serwera maksymalną ilość pamięci, zobacz temat Maksymalna pamięć ustawienie sp_configure (języka Transact-SQL).

Wątki użytkownika usuwanie planów wykonywania z pamięć podręczna procedury gdy istnieje ciśnienia pojedynczego pamięci podręcznej.Ich wymuszać zasady rozmiar maksymalny pamięci podręcznej pojedynczy i maksymalny pamięci podręcznej pojedyncze wpisy.

Poniższe przykłady ilustrują, których wykonanie planów uzyskać usunięte z pamięć podręczna procedury:

  • Plan wykonania odwołuje się często, tak, aby jego koszt nigdy nie prowadzi do zera.Plan pozostaje pamięć podręczna procedury i nie jest usuwany, chyba że istnieje ciśnienia pamięci i bieżący koszt wynosi zero.

  • Plan wykonania ad-hoc dodaje się i nie jest używany ponownie, zanim istnieje ciśnienia pamięci.Ponieważ planów ad-hoc są inicjowane z bieżącym kosztem zero, jeśli aparat bazy danych sprawdza, czy plan wykonania, będzie widoczna zero bieżący koszt i usunięcie planu z pamięć podręczna procedury.Plan wykonania ad-hoc pozostaje w pamięci podręcznej procedurę z zerową bieżący koszt w przypadku, gdy ciśnienia pamięci nie istnieje.

Aby ręcznie usunąć jeden plan lub wszystkie plany z pamięci podręcznej, należy użyć DBCC FREEPROCCACHE (języka Transact-SQL).

Plany ponownej kompilacji wykonanie

Certain changes in a database can cause an execution plan to be either inefficient or invalid, based on the new state of the database.SQL Server detects the changes that invalidate an execution plan and marks the plan as not valid.Następnie nowy plan musi być ponownie kompilowana dla następnego połączenia, który wykonuje kwerendę.Następujące warunki, które unieważni plan:

  • Zmiany wprowadzone do tabela lub widoku, do którego odnosi się kwerendy (instrukcji ALTER tabela i ALTER VIEW).

  • Zmiany żadnych indeksów używane przez plan wykonania.

  • Aktualizacje statystyki używane przez plan wykonania wygenerowany jawnie z instrukcja, takie jak statystyka UPDATE lub generowana automatycznie.

  • Usunięcie indeksu, używane przez plan wykonania.

  • Jawnym wywołaniem elementu sp_recompile.

  • Duża liczba zmian w kluczach (generowane przez instrukcji INSERT lub DELETE od innych użytkowników, które modyfikowania tabela przez kwerendę).

  • Dla tabel zawierających wyzwalacze, jeśli liczba wierszy w dodaje or usunięte tabel znacznie zwiększa rozmiar.

  • Wykonywanie procedura przechowywana, za pomocą opcji WITH RECOMPILE.

Większość ponownych kompilacji są wymagane do poprawności instrukcja lub uzyskania planów potencjalnie szybsze wykonywanie kwerendy.

W SQL Server 2000, za każdym razem, gdy instrukcji w partia powoduje ponowną kompilację całej partia, czy przesyłane za pomocą procedura przechowywana, wyzwalacza, ad-hoc partia lub gotowa instrukcja jest ponownie kompilowana. W SQL Server 2005 i nowszych tylko w instrukcja wewnątrz partia tej przyczyny ponownej kompilacji jest ponownie kompilowana. Ze względu na to różnica liczby ponownej kompilacji w SQL Server 2000 i nowsze wersje nie są porównywalne. Ponadto istnieją więcej typów ponowne kompilacje w SQL Server 2005 i nowszych z powodu jego zestaw funkcji rozwinięty.

Instrukcja-poziom ponownej kompilacji korzystne dla wydajności, ponieważ w większości przypadków niewielką liczbę instrukcja powoduje ponowne kompilacje i kar skojarzone z punktu widzenia czas PROCESORA i blokady.Dla innych instrukcji w związku z tym unika się kary te partia które nie mają być ponownie kompilowana.

The SQL Server ProfilerSP:Recompile trace event reports statement-level recompilations.To zdarzenie śledzenia raportuje tylko ponowne wsadowego kompilacje w SQL Server 2000. Dalsze, TextData kolumnie to zdarzenie jest pusta.Dlatego też SQL Server 2000 praktyka do śledzenia SP: StmtStarting or SP: StmtCompleted uzyskaćTransact-SQL tekst, która spowodowała ponowną kompilację nie jest już wymagany.

Zdarzenie śledzenia SQL:StmtRecompile raporty o poziomie instrukcja ponownych kompilacji.To zdarzenie śledzenia może służyć do śledzenia i debugowania ponownych kompilacji.Dlatego SP: Recompile generuje tylko w przypadku procedury przechowywane i wyzwalacze, SQL:StmtRecompile generuje procedur przechowywanych, wyzwalaczy, instancje ad hoc, instancji, które są wykonywane przy użyciu sp_executesql, kwerendy i dynamiczne SQL przygotowane.

The EventSubClass kolumna of SP:Recompile and SQL:StmtRecompile contains an integer code that indicates the reason for the recompilation.Następująca tabela zawiera znaczenia każdego numeru kodu.

Wartość EventSubClass

Description

1

Zmienić schemat.

2

Statystyka zmienione.

3

Odroczone kompilacji.

4

Zmienić opcji zestaw.

5

Zmianie tabela tymczasowa.

6

Zdalne zestawu zestaw wierszy zmienił.

7

DO zmiany uprawnień PRZEGLĄDANIA.

8

Kwerendy powiadomienie zmiany środowiska.

9

Podzielony na partycje zmiany widoku.

10

Opcje kursor zmienił się.

11

OPTION (RECOMPILE) wymagane.

Uwaga

Gdy opcja AUTO_UPDATE_STATISTICS bazy danych jest zestaw on, kwerendy są ponownie kompilowane, gdy one docelowe tabele lub widoki indeksowane, którego statystyki zostały zaktualizowane lub których cardinalities zmieniły się znacznie od ostatniego wykonania.To zachowanie dotyczy standardowego użytkownika tabel, tabel tymczasowych oraz inserted i deleted tabele utworzone przez DML wyzwalacze. Jeśli wydajność kwerendy dotyczy nadmiarowych ponownych kompilacji, należy rozważyć zmianę tego ustawienia do OFF.Gdy opcja AUTO_UPDATE_STATISTICS bazy danych jest zestaw do OFF, nie ponownych kompilacji wystąpić statystyki na podstawie lub Kardynalność zmian, z wyjątkiem tych inserted i deleted tabele, które są tworzone przez DML, a nie z wyzwalaczy. Ponieważ te tabele są tworzone w tempdb, ponowną kompilację kwerend, które mają do nich dostęp zależy od ustawienia AUTO_UPDATE_STATISTICS w tempdb.Należy zauważyć, że w SQL Server 2000, kwerendy kontynuować ponowną kompilację, na podstawie zmian Kardynalność do wyzwalacz DML inserted i deleted tabel, nawet jeśli to ustawienie jest wyłączona. Aby uzyskać więcej informacji dotyczących wyłączania AUTO_UPDATE_STATISTICS zobacz Using Statistics to Improve Query Performance.

Historia zmian

Microsoft Learning

Zaktualizowano sekcję Informacje o usuwaniu planów wykonywania z pamięci podręcznej procedury.