You have multiple accounts
Choose the account you want to sign in with.

Podsumowanie

Statystyczne konserwacji, AutoStat, może generować niepotrzebne obciążenie w systemie produkcji, wykonując jedną z następujących czynności:

  • Inicjowanie statystycznych aktualizacje w okresach ciężkich produkcji. -LUB-

  • Inicjowanie zbyt duża liczba procesów aktualizacji statystyk w danym punkcie w czasie.

W tym artykule jest opisuje warunki, na jakich można spodziewać się statystyk automatycznych, wygenerowany i uruchomienie aktualizacji statystyk dla tabel w bazie danych. Aby uzyskać informacje o użyciu statystyk automatycznych programu SQL Server 2000, zobacz "Dane statystyczne użyte przez optymalizator kwerend w Microsoft SQL Server 2000" w następującej witrynie MSDN w sieci Web:

http://msdn2.microsoft.com/en-us/library/aa902688(SQL.80).aspx Uwaga Jeśli używasz programu Microsoft SQL Server 2005, zobacz następujący oficjalny dokument Microsoft uzyskać informacji na temat jak statystyki są używane przez optymalizator kwerend w programie SQL Server 2005:

http://technet.microsoft.com/en-us/library/cc966419.aspx

Więcej informacji

Informacje ogólne

Program SQL Server używa Optymalizator na koszty, które mogą być bardzo czułe na informacje statystyczne, które podano w tabel i indeksów. Bez prawidłowego i aktualnych informacji statystycznych SQL Server go znaleźć, trudno jest określić najlepszy plan wykonania dla określonej kwerendy. Statystyki utrzymywane w każdej tabeli w programie SQL Server do pomocy optymalizator w decyzji w oparciu o koszt dokonywanie obejmują:

  • Liczba wierszy w tabeli.

  • Liczba stron, używane przez tabelę.

  • Liczba zmian wprowadzonych od czasu ostatniej aktualizacji statystyk klucze tabeli.

Dodatkowe informacje są przechowywane dla indeksów, łącznie z (dla każdego indeksu):

  • Histogram jednakowej wysokości w pierwszej kolumnie.

  • Gęstość zapisu na wszystkich prefiksów kolumna.

  • Średnia długość klucza.

Statystyki dotyczące indeksów są tworzone automatycznie, ilekroć jest zbudowany nowy indeks. Ponadto istnieje możliwość tworzenia i obsługiwania statystyk dotyczących innych kolumn, a także. Aby zachować informacje statystyczne jest jak najbardziej aktualny, SQL Server wprowadzone AutoStat, które, poprzez monitorowanie modyfikacje tabeli programu SQL Server są zdolne do automatycznej aktualizacji statystyk dla tabeli, gdy ma pewien próg zmiany została osiągnięta. Ponadto program SQL Server została wprowadzona auto tworzenie statystyk, co powoduje, że serwer automatycznie generować statystyki wszystkich wymaganych dla dokładnego optymalizacji określonej kwerendy.

Określanie, kiedy generacji AutoStat jest bliska

Jak wspomniano powyżej, AutoStat automatycznie aktualizuje statystyki dla danej tabeli, po osiągnięciu progu"zmiana". Kolumna sysindexes.rowmodctr utrzymuje bieżącą łącznych o wszystkich zmianach w tabeli, która może niekorzystnie wpłynąć na proces podejmowania decyzji procesor kwerend w czasie. Ten licznik jest aktualizowana za każdym razem, występuje jedno z następujących zdarzeń:

  • Wstawianie pojedynczego wiersza jest wykonany.

  • Usuwanie pojedynczego wiersza jest wykonany.

  • Następuje aktualizacja do kolumny indeksowanej.

Uwaga Instrukcja TRUNCATE TABLE nie aktualizuje rowmodctr. Po tabeli, które zostały zaktualizowane statystyki rowmodctr wartość jest resetowany do 0, a aktualizacja wersji schematu tabeli statystyk. Ponadto w sytuacjach, w których plan wykonania procedura składowana jest pobierana z pamięci podręcznej, a plan ten jest wrażliwy na statystyki, statystyki wersja schematu jest porównywana do bieżącej wersji. Jeśli dostępne są nowe dane statystyczne, plan procedura przechowywana zostanie ponownie skompilowana. Podstawowe algorytm automatyczna aktualizacja statystyk jest:

  • Jeśli tabela znajduje się w bazie danych tempdb Kardynalność tabeli jest mniejsza niż 6, Autoaktualizacja występuje z co 6 modyfikacje do tabeli.

  • Jeśli kardynalność tabeli jest większa niż 6, lecz nie większa niż lub równa 500 aktualizacji występuje co 500 modyfikacje.

  • Jeśli kardynalność tabeli jest większa niż 500, aktualizacja statystyki po (500 + 20 procent tabeli) zaszły zmiany.

  • Dla zmiennych Tabela Kardynalność zmian nie powoduje wyzwolenia automatyczna aktualizacja statystyk.

Uwaga W tym sensie najsurowsze SQL Server zlicza liczebność niż liczba wierszy w tabeli. Uwaga Oprócz Kardynalność selektywności predykat wpływa również na generowanie statystyk automatycznych. Oznacza to, że statystyki mogą nie być aktualizowane po każdej modyfikacji 500, jeśli Kardynalność wynosi mniej niż 500 lub co 20 procent zmiany Jeśli liczebność jest większa niż 500. Współczynnik skalowania (wartość w zakresie od 1 do 4) jest generowany, w zależności od selektywność, a produkt ten czynnik i liczbę zmian, otrzymane w wyniku algorytmu byłoby rzeczywistą liczbę modyfikacji koniecznych do generowania statystyk automatycznych. Algorytm powyżej można podsumować w formie tabeli: _________________________________________________________________________________ Table Type | Empty Condition | Threshold When Empty |Threshold When Not Empty _________________________________________________________________________________ Permanent | < 500 rows | # of Changes >= 500 | # of Changes >= 500 + (20% of Cardinality) ___________________________________________________________________________ Temporary | < 6 rows | # of Changes >= 6 | # of Changes >= 500 + (20% of Cardinality) ___________________________________________________________________________ Table Variables | Change in cardinality does not affect AutoStats generation. ___________________________________________________________________________ Poniższe dwa przykłady demonstrujących tej koncepcji.

Przykład 1

Należy wziąć pod uwagę authors tabela w bazie danych pubs , który zawiera wiersze 23 a 2 indeksów. Unikatowy indeks klastrowany, UPKCL_auidind, jest indeksowana w jednej kolumnie, au_idi nieklastrowany indeks złożony, aunmind, został utworzony w kolumnach au_lname i au_fname . Ponieważ ta tabela zawiera mniej niż 500 wierszy, AutoStat rozpocznie się po wystąpieniu 500 zmiany danych tabeli. Zmiany mogą być 500 lub więcej wstawia, usuwa, zmiany takie jak au_lname lub dowolną ich kombinacją kolumny indeksowanej. Można w związku z tym przewidzieć, gdy aktualizacja statystyki będą inicjowane przez monitorowanie wartość sysindexes.rowmodctr , która jest zwiększany po każdej aktualizacji. Po osiągnięciu 500, można oczekiwać, że aktualizacja statystyki, aby rozpocząć.

Przykład 2

Należy wziąć pod uwagę drugiej tabeli t2, który jest 1000. Dla tabel z więcej niż 500 wierszy, program SQL Server będzie aktualizacja statystyki po (500 + 20 procent) zostały wprowadzone zmiany. Niepodważalne, 20 procent 1000 jest 200, więc można spodziewać się rozpocząć po około 700 modyfikacje zostały wykonane do tabeli AutoStat.

Automatyzowanie statystyk automatycznych oznaczanie

Aby zautomatyzować oznaczanie uruchomienia AutoStat, można sondować w tabeli sysindexes i zidentyfikować, gdy modyfikacje tabeli zbliżają się punkt początkowy. Poniżej przedstawiono podstawowe algorytmu w ten sposób:

   if (sysindexes.rows > 500)
      if (sysindexes.rows * 0.20 >= sysindexes.rowmodctr && production
      hours) //500 change leeway
         begin
            disable autostats
            log autostats disable
         end
      else
         begin
            stats ok
         end
   else
      if (sysindexes.rowmodctr >= 425) //75 change leeway
         begin
            disable autostats
            log autostats disable
         end

Później można zaplanować zadanie, aby wykonać następujące czynności:

  • Uruchomienie aktualizacji statystyk dla wszystkich tabel, że zostali zmuszeni do wyłączania w ciągu dnia. - I -

  • Ponownie włączyć AutoStat, ponieważ każda tabela modyfikacji licznik będzie zostały zresetowane do 0 podczas uruchomienia aktualizacji statystyk.

Kontrolowanie, czy na tabeli wykonywane są aktualizacji statystyk

Najbardziej oczywistym rozwiązaniem na to pytanie, po AutoStat okazała się być problematyczne, jest wyłączyć automatyczne generowanie statystyki, a tym samym pozostawiając wolny, aby zaplanować aktualizacji statystyk w okresach mniej uciążliwe dla administratorów baz danych. Można to zrobić za pomocą instrukcji UPDATE STATISTICS lub procedury przechowywane sp_autostats . Składnia instrukcji UPDATE STATISTICS jest:

   UPDATE STATISTICS <table>...with NORECOMPUTE

Składnia sp_autostats przechowywana procedura jest następująca:

sp_autostats <table_name>, <stats_flag>, <index_name> gdzie < stats_flag > jest "on" lub "off". Aby wyłączyć automatyczne wystąpienie aktualizacja statystyki lub tworzenia statystyk na poziomie na bazę danych umożliwia także sp_dboption :

sp_dboption < dbname>, "auto update statistics" < na | off >- OR- sp_dboption < dbname >, "automatyczne tworzenie statystyk", < na | off >

Kontrolowanie liczby jednoczesnych procesów aktualizacji statystyk

Obecnie mniejszej niż wyłączenie AutoStat dla określonych tabel, nie jest możliwe, aby skonfigurować liczbę automatycznych instrukcji UPDATE STATISTICS, które są uruchamiane jednocześnie. Serwer jednak ograniczyć liczbę równoczesnych aktualizacji statystyk procesów do czterech przypadających na jeden procesor.

Określanie, kiedy są uruchamiane statystyk automatycznych

Flagi śledzenia 205 służy do raportu, gdy procedura przechowywana statystyki zależne jest jest ponownie kompilowana w wyniku AutoStat. Ta flaga śledzenia zapisze następujące komunikaty dziennika błędów:

1998-10-15 11:10:51.98 spid9 wydanych ponownej kompilacji: Nazwa_procedury: sp_helpindex Odstpu: 75 StmtNo: 29

Po włączeniu flagi śledzenia 205 następujący komunikat zostanie również wspornik wiadomość AutoStat od 8721, gdy statystyki są aktualizowane. Otwierania wiadomości wspornika wyróżnia się wartość RowModCnt, która będzie większa niż 0. Nawias zamykający po aktualizacji statystyk, będzie miała wartość 0RowModCnt:

Zmiana schematu spid8 11:38:43.68 1998-10-15: identyfikator Tbl Dbid: 7 Objid: 133575514 RowModCnt: 60500 RowModLimit: 60499

Dla tej wiadomości "RowModCnt" jest całkowita liczba modyfikacje do tabeli. "RowModLimit" jest progiem, gdy przekroczona, powoduje wykonanie instrukcji UPDATE STATISTICS dla tabeli. Użytkownik może również włączyć flagę śledzenia 8721, która będzie zrzut informacji w dzienniku błędów po uruchomieniu AutoStat. Oto przykład typu komunikatu, który można spodziewać się:

1998-10-14 16:22:13.21 statystyk AUTOMATYCZNYCH spid13: Aktualizacja Tbl: [autorzy] Wiersze: 23 opublikowanych: granica 501: 500 czas trwania: 47ms UpdCount: 2

Dla tej wiadomości "Opublikowanych" jest całkowitą liczbą zmian w tabeli, "Wiązane" jest próg modyfikacji, "Czas trwania" jest czas, instrukcja UPDATE STATISTICS wymagana do ukończenia i "UpdCount" jest licznik zaktualizowaną statystykę. SQL Server Profiler umożliwia także identyfikowanie podczas wykonywania instrukcji UPDATE STATISTICS. Aby to zrobić, wykonaj następujące czynności:

  1. W menu programu Profilerkliknij menu Narzędzia, a następnie kliknij Opcje.

  2. Na karcie Ogólne przejdź do zdarzeń, a następnie zaznacz Wszystkie klasy zdarzeń.

  3. Zdefiniuj nowe śledzenie i w obszarze zdarzenia, zaznacz różne, wybierz zdarzenie podrzędne Automatycznej aktualizacji statystyki .

Uwaga Jeśli wiele statystyki są aktualizowane przez AutoStat, dużą liczbę wiadomości mogą być zapisywane w dzienniku błędów. Dokładnie eksperymentować z te flagi śledzenia przed ich użyciem na dowolnej produkcji lub inny sposób krytyczny serwera.

Blokad schematu

Program SQL Server wykorzystuje dwa typy schematów blokad, które są podejmowane podczas aktualizacji statystyki dla tabeli: Sch-S: Schema Stability Lock ---------------------------- This lock ensures that a schema element, such as a table or index, will not be dropped while any session holds a schema stability lock on the schema element. Sch-M-UPD-STATS: Schema Modification Lock ----------------------------------------- This is a non-blocking lock that is used by the system to ensure that only one automatic UPDATE STATISTICS process is run against a table at any given point in time. The sp_lock stored procedure will report this lock has having a type = TAB, resouce = UPD-STATS and mode = SCH-M. Można wyświetlić te blokady, uruchamiając sp_lock lub wybierając z tabeli syslockinfo .  

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?

Dziękujemy za opinię!

×