Dostrajanie zalecenia kwerendy

Niektóre kwerendy zużywa więcej zasobów niż inne.Na przykład kwerend zwracających duże spowodować zestawów i tymi, które zawierają klauzule, które nie są unikatowe których zawsze znacznych zasób.No degree of query optimizer intelligence can eliminate the resource cost of these constructs when compared to a less complex query.SQL Server uses the optimal access plan, but query optimization is limited by what is possible.

Niemniej jednak aby poprawić wydajność kwerendy, można:

  • Dodać więcej pamięci.To rozwiązanie może być szczególnie przydatne, jeśli serwer działa wiele złożonych kwerend i kilka kwerend wykonać powoli.

  • Użyć więcej niż jeden procesor.Zezwalaj na wiele procesorów Aparat baz danych Aby użyć kwerendy równoległych.Aby uzyskać więcej informacji, zobacz Równoległe przetwarzanie zapytania.

  • Nowa napisać kwerendę.Należy rozważyć następujące zagadnienia:

    • Jeśli kwerenda używa kursory, ustalić, jeśli kwerenda kursor może być zapisany przy użyciu bardziej efektywne typ kursora (takie jak tylko fast forward) lub pojedynczej kwerendy.Pojedynczy kwerend przewyższyć zwykle operacje kursor.Ponieważ zestaw instrukcja kursor jest zazwyczaj operacji pętli zewnętrzne, w którym każdy wiersz w pętli zewnętrznego jest przetwarzany po użyciu instrukcja wewnętrzne warstwowy instrukcja GROUP BY albo sprawy lub podzapytanie.Aby uzyskać więcej informacji, zobacz Typy kursor (aparat bazy danych) i Podstawy kwerendy.

    • Jeśli aplikacja używa pętli, należy rozważyć umieszczenie pętli wewnątrz kwerendy.Często aplikacja zawiera pętlę, która zawiera kwerendę parametryczną, która jest wykonywane wielokrotnie i wymaga sieci procesu między komputer z uruchomioną aplikacją i SQL Server.Zamiast tego utworzyć pojedynczy, bardziej złożonych kwerend za pomocą tabela tymczasowa.Tylko jednej sieci procesu jest konieczne i optymalizator kwerendy można zoptymalizować lepiej jedną kwerendę.Aby uzyskać więcej informacji, zobacz Procedurach języka Transact-SQL i Zmienne języka Transact-SQL.

    • Nie należy używać wiele aliasów dla pojedynczej tabela w tej samej kwerendzie symulować przecięcia indeksu.Jest nie konieczności dłużej, ponieważ SQL Server automatycznie uzna przecięcia indeksu i można używać wielu indeksów dla tej samej tabela w tej samej kwerendy.Należy rozważyć kwerendy przykładowe:

      SELECT * FROM lineitem 
      WHERE partkey BETWEEN 17000 AND 17100 AND
          shipdate BETWEEN '1/1/1994' AND '1/31/1994'
      

      SQL Servermożna wykorzystać indeksy w obu partkey i DataWysyłki kolumny, a następnie przeprowadzić dopasowania Mieszanie między dwa podzestawy uzyskania indeksu przecięcia.

    • Umożliwia parametryzacji kwerendy na ponowne użycie kwerendy buforowana wykonanie planów.Jeśli zestaw kwerend ma taką samą wartość mieszania kwerendy i mieszania planu kwerend, tworząc jeden sparametryzowanych kwerend może zwiększyć wydajność.Wywołanie jednej kwerendy z parametrami zamiast wielu kwerend za pomocą literałów umożliwia ponowne użycie plan wykonania kwerend buforowaną.Aby uzyskać więcej informacji, zobacz Znajdowanie i dostrajania podobnych kwerend za pomocą kwerendy i kwerendy Plan mieszania i Wykonanie planu buforowania i ponownego użycia.

      Jeśli nie można zmodyfikować aplikację, umożliwia szablon plan guides z wymuszoną parametryzacja osiągnąć podobny wynik.Aby uzyskać więcej informacji, zobacz Określanie zachowania parametryzacji kwerendy przy użyciu prowadnic Plan.

    • Należy używać wskazówek kwerendy tylko wtedy, gdy jest to konieczne.Kwerendy przy użyciu wskazówek wykonywane we wcześniejszych wersjach SQL Server powinny być badane bez wskazówki określona.Wskazówki można zapobiec Wybieranie lepszego planu wykonywania optymalizator kwerendy.Aby uzyskać więcej informacji, zobacz SELECT (Transact-SQL).

  • Służy do przechwytywania, przechowywania i porównywanie planów wykonanie kwerendy dla kwerend query_plan_hash czas.Na przykład po zmianie konfiguracja systemu, można porównać wartości mieszania plan kwerend dla kwerend krytycznych misji pierwotne wartości mieszania planu kwerend.Różnice w wartości mieszania planu kwerendy można stwierdzić, możesz zmiany konfiguracja systemu spowodowało zaktualizowane kwerendy wykonanie planów kwerend ważne.Można również zdecydować zatrzymać wykonywanie dla bieżącego długo działającą kwerendę, jeśli jego wartość mieszania planu kwerendy w sys.dm_exec_requests różni się od wartość mieszania planu kwerendy według planu bazowego, który ma dobrą wydajność.Aby uzyskać więcej informacji, zobacz Znajdowanie i dostrajania podobnych kwerend za pomocą kwerendy i kwerendy Plan mieszania.

  • Należy korzystać z zarządca zapytań opcji konfiguracja.zarządca zapytań Opcja konfiguracja można zapobiec zużywanych przez kwerendach o długim zasobów systemowych.Domyślnie opcja ta zestaw Aby zezwolić na wszystkie kwerendy do wykonać, niezależnie od tego, jak długo one podjąć.Można jednak zestaw Gubernator kwerendy, aby ograniczyć maksymalną liczbę sekund, które mogą wykonać dla wszystkich połączeń lub tylko kwerendy dla określonego połączenia wszystkich kwerend.Ponieważ zarządca zapytań jest oparty na kwerendzie szacowany koszt zamiast rzeczywisty czas nie ma żadnych wykonywania napowietrznej.Zatrzymuje również kwerendach o długim przed uruchomieniem zamiast uruchamiać je, aż trafień niektórych wstępnie zdefiniowany limit.Aby uzyskać więcej informacji, zobacz zarządca zapytańlimit kosztu, opcja i ZESTAW QUERY_GOVERNOR_COST_LIMIT (Transact-SQL).

  • Optymalizacja ponownego użycia planów kwerend z pamięci podręcznej planu. Aparat baz danych Buforuje planów kwerend dla możliwości ponownego użycia.Jeżeli plan kwerend nie są buforowane, nigdy nie można go ponownie.Zamiast tego kwerendy bez buforowania plany muszą być kompilowane każdego czas są wykonywane, które powoduje wydajność.Następujące Transact-SQL Ustaw opcje instrukcja zapobiec ponownego użycia planów kwerend buforowaną.A Transact-SQL wsadowy, zawierający te włączone na ustawianie opcji nie można udostępniać swoje plany kwerend z tej samej partia, który został skompilowany z tych ustaw opcje wyłączone:

    ZESTAW ANSI_NULL_DFLT_OFF

    ZESTAW ANSI_NULL_DFLT_ON

    ZESTAW ANSI_NULLS

    ZESTAW SPOWODOWAŁYBY

    ZESTAW ANSI_WARNINGS

    ZESTAW ARITHABORT

    SET CONCAT_NULL_YIELDS_NULL

    SET DATEFIRST

    USTAW FORMAT DATY.

    ZESTAW FORCEPLAN

    USTAWIANIE JĘZYKA

    ZESTAW NO_BROWSETABLE

    ZESTAW NUMERIC_ROUNDABORT

    ZESTAW QUOTED_IDENTIFIER

    ZESTAW TEXTSIZE

     

    Ponadto opcja Ustaw ANSI_DEFAULTS dotyczy ponownego użycia planów kwerend buforowaną, ponieważ można zmienić ANSI_NULLS, ANSI_NULL_DFLT_ON, spowodowałyby, ANSI_WARNINGS, CURSOR_CLOSE_ON_COMMIT, IMPLICIT_TRANSACTIONS i QUOTED_IDENTIFIER Ustaw opcje.Należy zauważyć, że większość opcji zestawu zmienionych z zestawu ANSI_DEFAULTS są wyświetlane jako Ustaw opcje, które mogą wpłynąć na ich ponownego użycia planów kwerend.

    Można zmienić niektóre z tych opcji zestaw z następujących metod:

Ostrzeżenie

Aby uniknąć ponowne kompilacje spowodowane przez ustawianie opcji planów kwerend, należy ustanowić Ustawianie opcji połączenia czasi upewnij się, że nie należy zmieniać w czasie trwania połączenia.Niektóre opcje zestaw należy ustawić konkretnych wartości używać Widoki indeksowane lub indeksów na kolumny obliczane.Aby uzyskać więcej informacji, zobacz Ustaw opcje, które wpływają na wyniki.

Zobacz także

Odwołanie

Koncepcje