Udostępnij za pośrednictwem


Wykonanie planu buforowania i ponownego użycia

SQL Server ma pulę pamięci używaną do przechowywania wykonanie planów i buforów danych.Procent puli przydzielone na wykonanie planów lub bufory danych skorygować dynamicznie, w zależności od stanu systemu.Część puli pamięci, który jest używany do przechowywania wykonanie planów nazywa się pamięć podręczna procedury.

SQL Serverwykonanie planów mają następujące główne składniki:

  • Plan kwerend

    Luzem plan wykonania jest strukturą wielobieżnej, tylko do odczytu danych używanych przez dowolną liczbę użytkowników.To jest zwany planu kwerend.Kontekstu użytkownika jest przechowywana w planu kwerend.Nigdy nie więcej niż jeden lub dwa egzemplarze kwerendy plan w pamięci: jeden egzemplarz wszystkich szeregowego wykonania i drugą dla wszystkich równoległego wykonania.Kopia równoległych obejmuje wszystkie równoległe uruchomieniach niezależnie od ich stopnia równoległości prostych.

  • Kontekst wykonywania

    Każdy użytkownik, który obecnie jest wykonywana kwerenda ma strukturę danych, który przechowuje dane specyficzne dla ich wykonania, takie jak wartości parametrów.Ta struktura danych jest zwany kontekst wykonania.Struktur danych w kontekście wykonania są używane ponownie.Jeśli użytkownik wykonuje kwerendę i jedną ze struktur nie jest używany, jego ustawienie ponownie jest inicjowane kontekst dla nowego użytkownika.

Kontekst wykonywania, to samo zapytanie, różne literały

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 skuteczny 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ącej, nieużywane wykonanie planów w pamięci podręcznej wymagają wszystkie odwołania do obiektu w pełni kwalifikowana.Na przykład, pierwszy z tych SELECT sprawozdania nie jest dopasowywany istniejącego planu i dopasowywane drugi:

SELECT * FROM Person;

SELECT * FROM Person.Person;

Usuwanie wykonanie planów z pamięci podręcznej procedury

Wykonanie planów pozostają w pamięć podręczna procedury , jak długo ma za mało pamięci do ich przechowywania.Kiedy ciśnienie w pamięci istnieje, Aparat baz danych używa podejścia opartego na koszt do ustalenia, których wykonanie planów usunąć z pamięć podręczna procedury.Podjęcie decyzji na podstawie kosztów, Aparat baz danych zwiększa i zmniejsza bieżącej zmiennej kosztów dla każdego planu realizacji, zgodnie z następujące czynniki.

Gdy proces użytkownika wstawia plan wykonania w pamięci podręcznej, proces użytkownika ustawia bieżący koszt równa pierwotny koszt kompilacji kwerendy; ad-hoc wykonanie planów proces użytkownika ustawia bieżący koszt na zero.W okresie późniejszym, każdy czas proces użytkownika odwołania do planu wykonania, bieżący koszt go przywraca pierwotny koszt kompilacji; ad-hoc wykonanie planów proces użytkownika zwiększa koszt bieżący.Dla wszystkich planów maksymalną wartość bieżący koszt jest pierwotny koszt kompilacji.

Kiedy ciśnienie w pamięci istnieje, Aparat baz danych odpowiada usuwając wykonanie planów z pamięć podręczna procedury.Aby określić, które zamierza usunąć, Aparat baz danych wielokrotnie bada stan każdego planu wykonania i usuwa planów po ich bieżący koszt wynosi zero.Plan wykonania z bieżącego koszcie zero nie jest usuwany automatycznie po presji pamięci istnieje; jest usuwany tylko wtedy, gdy Aparat baz danych bada plan i bieżący koszt wynosi zero.Badając plan wykonania Aparat baz danych umieszcza bieżący koszt w kierunku zera, zmniejszając koszt bieżący, jeśli kwerenda nie jest aktualnie używa planu.

Aparat baz danych Wielokrotnie bada plany wykonanie aż wystarczająco usunięto spełniający wymagania pamięci.Gdy istnieje presji pamięci, plan wykonania może być jego koszt wzrosła i spadły więcej niż raz.Kiedy ciśnienie pamięci już nie istnieje, Aparat baz danych zatrzymuje, zmniejszając koszt bieżący nieużywane wykonanie planów i wszystkie plany wykonanie pozostają w pamięć podręczna procedury, nawet jeśli ich koszt wynosi zero.

Aparat baz danych Używa wątków użytkownika i monitora zasób do pamięci z pamięć podręczna procedury w odpowiedzi na ciśnienie pamięci.Wątki użytkownika i monitora zasób można zbadać uruchomić jednocześnie zmniejszyć bieżący koszt dla każdego planu nieużywane wykonanie planów.Monitor zasób usuwa wykonanie planów z pamięć podręczna procedury , gdy ciśnienie w globalnej pamięci istnieje.Pamięci, aby wymuszać zasady dla pamięci systemowej pamięci procesu, pamięci puli zasób i maksymalny rozmiar pamięci podręcznej wszystkie jego zwolnienia.

Maksymalny rozmiar pamięci podręcznej wszystkie jest funkcja buforu rozmiar puli i nie może przekraczać maksymalną serwera pamięci.Aby uzyskać więcej informacji na temat konfigurowania serwera maksymalnej pamięci, zobacz Maksymalna pamięć w sp_configure (języka Transact-SQL).

Wątki użytkownika Usuń wykonanie planów z pamięć podręczna procedury , gdy ciśnienie pojedynczego pamięci podręcznej istnieje.One wymuszać zasady dla rozmiar maksymalny pamięci podręcznej pojedynczego 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 przechodzi na zero.Plan pozostaje w pamięć podręczna procedury i nie jest usuwany, chyba że istnieje nacisk pamięci, a bieżący koszt wynosi zero.

  • Plan wykonania ad-hoc dodaje się i nie jest wywoływany ponownie, zanim ciśnienie w pamięci istnieje.Ponieważ plany ad hoc są inicjowane z bieżący koszt zero, gdy aparat bazy danych bada plan wykonania, zostaną wyświetlone zero bieżący koszt i usuwanie planu z pamięć podręczna procedury.Plan wykonania ad-hoc pozostaje w pamięć podręczna procedury z zerową bieżącego kosztu, gdy ciśnienie pamięci nie istnieje.

Aby ręcznie usunąć jeden plan lub plany wszystkich z pamięci podręcznej, DBCC FREEPROCCACHE (Transact-SQL).

Ponownej kompilacji wykonanie planów

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.Nowy plan musi następnie ponownie kompilowana na następne połączenie, który wykonuje kwerendę.Następujące warunki, które unieważni plan:

  • Zmiany wprowadzone w tabela lub widoku odwołuje kwerendy (ALTER tabela i ALTER VIEW).

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

  • Aktualizacje statystyki używanego przez plan wykonania wygenerowany albo jawnie z instrukcja, takich jak aktualizacji statystyk lub generowana automatycznie.

  • Upuszczanie indeksu używanego przez plan wykonania.

  • Jawne wywołanie sp_recompile.

  • Dużej liczby zmian do kluczy (generowane przez wstawianie lub usuwanie instrukcji od innych użytkowników, które modyfikowania tabela odwołuje kwerendy).

  • Dla tabel zawierających wyzwalacze, jeśli liczba wierszy w dodaje się lub usunięte znacząco powiększa się tabele.

  • Wykonywanie procedura składowana, za pomocą opcji WITH RECOMPILE.

Ponowne kompilacje większości są wymagane zarówno dla instrukcja poprawności lub uzyskać planów potencjalnie szybsze wykonywanie kwerend.

W SQL Server 2000, ilekroć instrukcji w partii powoduje ponowną kompilację, cała partia czy przesyłane za pomocą procedura składowana, wyzwalacza, ad-hoc partii lub gotowa instrukcja jest ponownie kompilowana.W SQL Server 2005 i nowszych, tylko instrukcja wewnątrz partia przyczyny tej ponownej kompilacji jest ponownie kompilowana.Ta różnica zlicza ponownej kompilacji SQL Server 2000 i nowszych wersjach nie są porównywalne.Istnieje też więcej typów ponowne kompilacje w SQL Server 2005 i później z powodu jego zestaw funkcji rozszerzona.

Poziomie instrukcji ponownej kompilacji korzyści wydajność, ponieważ w większości przypadków niewielką liczbę instrukcji powoduje ponowne kompilacje oraz kar związanych z punktu widzenia Procesora czas i blokad.Kary te są zatem uniknąć innych sprawozdań w partia, które nie mają być ponownie kompilowana.

The SQL Server Profiler SP:Recompile trace event reports statement-level recompilations.To zdarzenie śledzenia raportuje tylko partia Ponowne kompilacje w SQL Server 2000.Dalsze, TextData wypełnione kolumna tego zdarzenie.Dlatego SQL Server 2000 praktyka konieczności śledzenia SP: StmtStarting lub SP: StmtCompleted uzyskać Transact-SQL tekstu, która spowodowała ponowną kompilację nie jest już wymagana.

Zdarzenie śledzenia SQL:StmtRecompile raporty instrukcja -poziom ponowne kompilacje.To zdarzenie śledzenia może służyć do śledzenia i debugowania ponowne kompilacje.Dlatego SP: Recompile generuje tylko dla procedur przechowywanych i wyzwalaczy, SQL:StmtRecompile generuje procedur przechowywanych, wyzwalaczy, instancje ad hoc, partii, które są wykonywane przy użyciu sp_executesql, kwerend i dynamic SQL przygotowane.

EventSubClass kolumna SP: Recompile i SQL:StmtRecompile zawiera kod całkowitą, która wskazuje przyczyny ponownej kompilacji.Następująca tabela zawiera znaczenie każdego numeru kodu.

Wartość EventSubClass

Opis

1

Zmienić schemat.

2

Statystyka zmienione.

3

Odroczone kompilacji.

4

Zmienić zestaw opcji.

5

Zmianie tabela tymczasowej.

6

Zdalny zmieniony zestawu zestaw wierszy.

7

Zmienić uprawnienia PRZEGLĄDANIA.

8

Kwerenda Powiadomienie o zmianie środowiska.

9

Partycje zmienić widok.

10

Zmienić opcje kursora.

11

OPTION (RECOMPILE) zażądał.

Ostrzeżenie

Opcja bazy danych AUTO_UPDATE_STATISTICS jest ustawiona na ON, ponownie kompilowana kwerendy po ich miejsce 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 użytkownika tabele standardowe, tabele tymczasowe i inserted i deleted tabele utworzone przez DML wyzwalaczy.Jeśli wydajność kwerendy dotyczy nadmiarowych ponownych kompilacji, należy rozważyć zmianę to ustawienie na OFF.Gdy opcja AUTO_UPDATE_STATISTICS bazy danych jest USTAWIONY na wyłączone, nie ponowne kompilacje mają miejsce na podstawie statystyki lub Kardynalność zmian, z wyjątkiem inserted i deleted tabele utworzone przez DML zamiast 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łączony.Aby uzyskać więcej informacji dotyczących wyłączania AUTO_UPDATE_STATISTICS, zobacz Aby poprawić wydajność kwerendy przy użyciu statystyk.