Udostępnij za pomocą


Jak wygenerować skrypt statystyk w celu utworzenia bazy danych tylko do statystyk w programie SQL Server

W tym artykule dowiesz się, jak wygenerować skrypt statystyk przy użyciu metadanych bazy danych na potrzeby tworzenia bazy danych tylko statystyki w programie SQL Server.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 914288

Wprowadzenie

Baza danych DBCC CLONEDATABASE jest preferowaną metodą generowania klonu bazy danych tylko do schematu w celu zbadania problemów z wydajnością. Użyj procedury opisanej w tym artykule tylko wtedy, gdy nie możesz użyć polecenia DBCC CLONEDATABASE.

Optymalizator zapytań w programie Microsoft SQL Server używa następujących typów informacji w celu określenia optymalnego planu zapytania:

  • metadane bazy danych
  • środowisko sprzętowe
  • stan sesji bazy danych

Zazwyczaj należy symulować wszystkie te same typy informacji, aby odtworzyć zachowanie optymalizatora zapytań w systemie testowym.

Dział pomocy technicznej firmy Microsoft może poprosić o wygenerowanie skryptu metadanych bazy danych w celu zbadania problemu optymalizatora zapytań. W tym artykule opisano kroki generowania skryptu statystyk, a także opisano sposób korzystania z informacji przez optymalizator zapytań.

Uwaga 16.

Klucze zapisane w tych danych mogą zawierać informacje o danych osobowych. Jeśli na przykład tabela zawiera kolumnę Numer telefonu ze statystyką, wartość klucza każdego kroku będzie znajdować się w wygenerowanym skryscie statystyk.

Tworzenie skryptu całej bazy danych

Podczas generowania bazy danych klonowania tylko statystyka może być łatwiejsza i bardziej niezawodna, aby utworzyć skrypt całej bazy danych zamiast skryptów poszczególnych obiektów. Podczas tworzenia skryptu całej bazy danych otrzymujesz następujące korzyści:

  • Należy unikać problemów z brakującymi obiektami zależnymi, które są wymagane do odtworzenia problemu.
  • Potrzebujesz mniejszej liczby kroków, aby wybrać niezbędne obiekty.

Należy pamiętać, że jeśli wygenerujesz skrypt dla bazy danych, a metadane bazy danych zawierają tysiące obiektów, proces skryptowy zużywa znaczne zasoby procesora CPU. Zaleca się wygenerowanie skryptu poza godzinami szczytu lub użycie drugiej opcji Script Individual Objects w celu wygenerowania skryptu dla poszczególnych obiektów.

Aby wykonać skrypt dla każdej bazy danych, do której odwołuje się zapytanie, wykonaj następujące kroki:

  1. Otwórz program SQL Server Management Studio.

  2. W Eksplorator obiektów rozwiń węzeł Bazy danych, a następnie znajdź bazę danych, którą chcesz utworzyć.

  3. Kliknij prawym przyciskiem myszy bazę danych, wskaż pozycję Zadania, a następnie wybierz pozycję Generuj skrypty.

  4. W kreatorze skryptu sprawdź, czy wybrano poprawną bazę danych. Kliknij, aby wybrać skrypt całej bazy danych i wszystkich obiektów bazy danych, a następnie wybierz przycisk Dalej.

  5. W oknie dialogowym Wybieranie opcji skryptu wybierz przycisk Zaawansowane, aby zmienić następujące ustawienia z wartości domyślnej na wartość wymienioną w poniższej tabeli.

    Opcja skryptów Wartość do wybrania
    Dopełnienie ansi Prawda
    Kontynuuj wykonywanie skryptów przy błędzie Prawda
    Generowanie skryptu dla obiektów zależnych Prawda
    Uwzględnij nazwy ograniczeń systemowych Prawda
    Sortowanie skryptów Prawda
    Identyfikatory logowania skryptów Prawda
    Uprawnienia na poziomie obiektu skryptu Prawda
    Statystyka skryptu Statystyki skryptu i histogramy
    Indeksy skryptów Prawda
    Wyzwalacze skryptów Prawda

    Uwaga 16.

    Należy pamiętać, że opcja Identyfikatory logowania skryptu i opcja Uprawnienia na poziomie obiektu skryptu może nie być wymagana, chyba że schemat zawiera obiekty, które są własnością identyfikatorów logowania innych niż dbo.

  6. Wybierz przycisk OK , aby zapisać zmiany, a następnie zamknij stronę Zaawansowane opcje skryptów.

  7. Wybierz pozycję Zapisz w pliku i wybierz opcję Pojedynczy plik .

  8. Przejrzyj wybrane opcje i wybierz pozycję Dalej.

  9. Wybierz Zakończ.

Skrypt pojedynczych obiektów

Można skryptować tylko poszczególne obiekty, do których odwołuje się określone zapytanie, zamiast wykonywać skrypty pełnej bazy danych. Jeśli jednak wszystkie obiekty bazy danych zostały utworzone przy użyciu WITH SCHEMABINDING klauzuli , informacje o zależnościach w sys.depends tabeli systemowej mogą nie zawsze być dokładne. Ta niedokładność może spowodować jedno z następujących problemów:

  • Proces wykonywania skryptów nie powoduje utworzenia skryptu obiektu zależnego.

  • Proces wykonywania skryptów może spowodować wykonywanie skryptów obiektów w nieprawidłowej kolejności. Aby pomyślnie uruchomić skrypt, należy ręcznie edytować wygenerowany skrypt.

W związku z tym nie zaleca się tworzenia skryptów pojedynczych obiektów, chyba że baza danych ma wiele obiektów i wykonywanie skryptów w przeciwnym razie trwa zbyt długo. Jeśli musisz użyć skryptu poszczególnych obiektów, wykonaj następujące kroki:

  1. W programie SQL Server Management Studio rozwiń węzeł Bazy danych, a następnie znajdź bazę danych, którą chcesz utworzyć.

  2. Kliknij prawym przyciskiem myszy bazę danych, wskaż polecenie Script Database As (Baza danych skryptów jako), a następnie wskaż polecenie CREATE To (UTWÓRZ do), a następnie wybierz pozycję File ( Plik).

  3. Wprowadź nazwę pliku, a następnie wybierz pozycję Zapisz.

    Podstawowy kontener bazy danych zostanie skryptowy. Ten kontener zawiera pliki, grupy plików, bazę danych i właściwości.

  4. Kliknij prawym przyciskiem myszy bazę danych, wskaż pozycję Zadania, a następnie wybierz pozycję Generuj skrypty.

  5. Upewnij się, że wybrano poprawną bazę danych, a następnie wybierz przycisk Dalej.

  6. W oknie dialogowym Wybieranie typów obiektów wybierz pozycję Wybierz określone obiekty bazy danych, a następnie wybierz wszystkie typy obiektów bazy danych, do których odwołuje się problematyczne zapytanie.

    Jeśli na przykład zapytanie odwołuje się tylko do tabel, wybierz pozycję Tabele. Jeśli zapytanie odwołuje się do widoku, wybierz pozycję Widoki i tabele. Jeśli problematyczne zapytanie używa funkcji zdefiniowanej przez użytkownika, wybierz pozycję Funkcje.

  7. Po wybraniu wszystkich typów obiektów, do których odwołuje się zapytanie, wybierz przycisk Dalej.

  8. W oknie dialogowym Ustawianie opcji skryptów wybierz przycisk Zaawansowane i zmień następujące ustawienia z wartości domyślnej na wartość wymienioną w poniższej tabeli na stronie Zaawansowane opcje skryptów.

    Opcja skryptów Wartość do wybrania
    Dopełnienie ansi Prawda
    Kontynuuj wykonywanie skryptów przy błędzie Prawda
    Uwzględnij nazwy ograniczeń systemowych Prawda
    Generowanie skryptu dla obiektów zależnych Prawda
    Sortowanie skryptów Prawda
    Identyfikatory logowania skryptów Prawda
    Uprawnienia na poziomie obiektu skryptu Prawda
    Statystyka skryptu Statystyki skryptu i histogramy
    SKRYPT USE DATABASE Prawda
    Indeksy skryptów Prawda
    Wyzwalacze skryptów Prawda

    Uwaga 16.

    Pamiętaj, że opcje Identyfikatory logowania skryptu i Uprawnienia na poziomie obiektu skryptu mogą nie być wymagane, chyba że schemat zawiera obiekty, które są własnością identyfikatorów logowania innych niż dbo.

  9. Wybierz przycisk OK , aby zapisać i zamknąć stronę Zaawansowane opcje skryptów.

    Zostanie wyświetlone okno dialogowe dla każdego typu obiektu bazy danych wybranego w kroku 7.

  10. W każdym oknie dialogowym wybierz określone tabele, widoki, funkcje lub inne obiekty bazy danych, a następnie wybierz przycisk Dalej.

  11. Wybierz opcję Skrypt do pliku, a następnie określ tę samą nazwę pliku, która została wprowadzona w kroku 3.

  12. Wybierz przycisk Zakończ , aby rozpocząć wykonywanie skryptów.

    Po zakończeniu wykonywania skryptów wyślij plik skryptu do inżyniera pomoc techniczna firmy Microsoft. Inżynier pomoc techniczna firmy Microsoft może również zażądać następujących informacji:

    • Konfiguracja sprzętu, w tym liczba procesorów i ilość pamięci fizycznej.

    • USTAW opcje, które były aktywne podczas uruchamiania zapytania.

    Pamiętaj, że te informacje mogły już zostać podane, wysyłając raport SQLDiag lub ślad programu SQL Profiler. Być może użyto również innej metody, aby podać te informacje.

Jak są używane informacje

W poniższych tabelach wyjaśniono, jak optymalizator zapytań używa tych informacji do wybierania planu zapytania.

Metadane

Opcja Wyjaśnienie
Ograniczenia Optymalizator zapytań często używa ograniczeń do wykrywania sprzeczności między zapytaniem a bazowym schematem. Jeśli na przykład zapytanie zawiera klauzulę WHERE col = 5 i CHECK (col < 5) ograniczenie istnieje w tabeli bazowej, optymalizator zapytań wie, że wiersze nie będą zgodne. Optymalizator zapytań wykonuje podobne typy odliczeń dotyczących wartości null. Na przykład klauzula WHERE col IS NULL jest znana jako prawda lub fałsz w zależności od wartości null kolumny i tego, czy kolumna pochodzi z zewnętrznej tabeli sprzężenia zewnętrznego. Obecność ograniczeń KLUCZA OBCEgo jest przydatna do określenia kardynalności i odpowiedniej kolejności sprzężenia. Optymalizator zapytań może używać informacji ograniczeń, aby wyeliminować sprzężenia lub uprościć predykaty. Te zmiany mogą usunąć wymaganie dostępu do tabel podstawowych.
Statystyki Informacje statystyczne zawierają gęstość i histogram pokazujący rozkład wiodącej kolumny indeksu i klucza statystyk. W zależności od charakteru predykatu optymalizator zapytań może używać gęstości, histogramu lub obu tych metod w celu oszacowania kardynalności predykatu. Aktualne statystyki są wymagane do dokładnego oszacowania kardynalności. Oszacowania kardynalności są używane jako dane wejściowe w szacowaniu kosztów operatora. Dlatego aby uzyskać optymalne plany zapytań, musisz mieć dobre szacunki kardynalności.
Rozmiar tabeli (liczba wierszy i stron) Optymalizator zapytań używa histogramów i gęstości, aby obliczyć prawdopodobieństwo, że dany predykat ma wartość true lub false. Ostateczne oszacowanie kardynalności jest obliczane przez pomnożenie prawdopodobieństwa przez liczbę wierszy zwracanych przez operator podrzędny. Liczba stron w tabeli lub indeksie jest czynnikiem do szacowania kosztów operacji we/wy. Rozmiar tabeli służy do obliczania kosztów skanowania i jest przydatny podczas szacowania liczby stron, do których będzie uzyskiwany dostęp podczas wyszukiwania indeksu.
Opcje bazy danych Kilka opcji bazy danych może mieć wpływ na optymalizację. Opcje AUTO_CREATE_STATISTICS i AUTO_UPDATE_STATISTICS mają wpływ na to, czy optymalizator zapytań utworzy nowe statystyki, czy statystyki aktualizacji, które są nieaktualne. Poziom parametryzacji wpływa na sposób sparametryzowania zapytania wejściowego przed przekazaniem zapytania wejściowego do optymalizatora zapytań. Parametryzacja może mieć wpływ na szacowanie kardynalności i może również zapobiegać dopasowywaniu do indeksowanych widoków i innych typów optymalizacji. Ustawienie DATE_CORRELATION_OPTIMIZATION powoduje, że optymalizator wyszukuje korelacje między kolumnami. To ustawienie wpływa na kardynalność i szacowanie kosztów.

Środowisko

Opcja Wyjaśnienie
Opcje ZESTAWU sesji To ANSI_NULLS ustawienie ma wpływ na to, czy NULL = NULL wyrażenie ma wartość true. Szacowanie kardynalności sprzężeń zewnętrznych może ulec zmianie w zależności od bieżącego ustawienia. Ponadto niejednoznaczne wyrażenia mogą również ulec zmianie. Na przykład col = NULL wyrażenie oblicza inaczej na podstawie ustawienia. col IS NULL Jednak wyrażenie zawsze oblicza to samo.
Zasoby sprzętowe Koszt dla operatorów sortowania i skrótu zależy od względnej ilości pamięci dostępnej dla programu SQL Server. Jeśli na przykład rozmiar danych jest większy niż pamięć podręczna, optymalizator zapytań wie, że dane muszą być zawsze buforowane na dysk. Jeśli jednak rozmiar danych jest znacznie mniejszy niż pamięć podręczna, operacja prawdopodobnie zostanie wykonana w pamięci. Program SQL Server uwzględnia również różne optymalizacje, jeśli serwer ma więcej niż jeden procesor i jeśli równoległość nie została wyłączona przy użyciu MAXDOP wskazówki lub maksymalnego stopnia konfiguracji równoległości.

Zobacz też