Kopie zapasowe baz danych, sprawdzanie integralności i optymalizacja wydajności to podstawowe, regularne zadania administratorów baz danych. Dane klienta są bardzo ważne, aby administrator danych mógł zarządzać kopiami zapasowymi bazy danych i zapewniać integralność kopii zapasowych. Jeśli więc coś pójdzie nie tak z produkcyjną bazą danych, można ją odzyskać przy minimalnym przestoju. Kontrole integralności bazy danych są również ważne, ponieważ w przypadku uszkodzenia bazy danych można je naprawić przy minimalnym przestoju i utracie danych. Ważne jest również zarządzanie wydajnością bazy danych. Zarządzanie wydajnością bazy danych to połączenie wielu zadań.
- Zidentyfikuj listę zapytań wymagających dużej ilości zasobów i pomóż programistom w ich przepisaniu.
- Twórz indeksy w tabeli i zarządzaj nimi. Przeprowadź również defragmentację indeksów, aby upewnić się, że pozostaną w dobrym stanie.
- Na koniec zarządzanie statystykami tabel.
W moim poprzednim artykule omówiłem temat statystyk automatycznego tworzenia i statystyk automatycznej aktualizacji oraz tego, w jaki sposób mogą one pomóc poprawić wydajność. W tym artykule wyjaśnię, jak stworzyć i zaplanować plan konserwacji, aby zaktualizować statystyki.
Najpierw wyjaśnię, czym są statystyki SQL Server i jak mogą one pomóc w zwiększeniu wydajności serwera SQL.
Statystyki serwera SQL i ich znaczenie
Statystyki to metadane używane przez optymalizator zapytań SQL Server, które pomagają określić najlepszy sposób pobierania danych. Optymalizator wykorzystuje statystyki do zrozumienia danych, ich dystrybucji oraz liczby wierszy, które dane zapytanie prawdopodobnie zwróci na podstawie dostępnych statystyk. Na podstawie tych informacji decyduje o optymalnej ścieżce dostępu do danych. Określa również, czy wykonać skanowanie tabeli lub wyszukiwanie indeksu, użyć złączenia zagnieżdżonego lub złączenia mieszającego itp.
Jeśli statystyki są nieaktualne lub niedostępne, optymalizator może wybrać kiepski plan wykonania, co znacznie zmniejsza wydajność zapytania. SQL Server może automatycznie prowadzić statystyki i odświeżać je na podstawie śledzenia zmian danych.
Statystyki można tworzyć i aktualizować automatycznie, włączając „Automatycznie twórz statystyki” i „Automatycznie aktualizuj statystyki”. Jednak w przypadku niektórych tabel, na przykład tych, które podlegają znaczącym zmianom w dystrybucji danych, automatyczna aktualizacja statystyk SQL Server może być niewystarczająca do utrzymania niezmiennie wysokiego poziomu wydajności zapytań.
Zanim wyjaśnię różne podejścia do aktualizacji statystyk, wyjaśnię różne sposoby przeglądania statystyk utworzonych dla dowolnej tabeli.
Jak przeglądać statystyki
Możemy przeglądać statystyki kolumn i statystyki indeksów
- Korzystanie z SQL Server Management Studio.
- Korzystanie z procedur przechowywanych w systemie i katalogów systemowych oraz dynamicznych widoków zarządzania
Wyświetl statystyki za pomocą SQL Server Management Studio
Na przykład chcę zobaczyć statystyki utworzone na [Zasoby ludzkie]. [Pracownik] tabela utworzona w AdventureWorks2017 Baza danych. Aby to zrobić, uruchom SQL Server Management Studio. Następnie rozwiń AdventureWorks2017 bazę danych, rozwiń [Zasoby ludzkie].[Pracownik] stół. Zobacz następujący obraz:
Korzystanie z systemowych procedur składowanych i dynamicznych widoków zarządzania
Jeśli używasz starszej wersji SQL Server, możesz użyć sp_helpstats procedura systemowa do przeglądania statystyk tabel. sp_helpstats pokaże statystyki utworzone przez SQL Server lub przez użytkownika. Nie pokaże statystyk stworzonych przez Index. Aby to zademonstrować, stworzyłem statystykę o nazwie User_Statistics_BirthDate na [Zasoby ludzkie].[Pracownik] tabela.
Oto przykład:
USE ADVENTUREWORKS2017 GO EXEC SP_HELPSTATS 'HUMANRESOURCES.EMPLOYEE'
Poniżej znajduje się wynik.
Możesz przeglądać statystyki, wysyłając zapytanie do sys.stats katalog systemowy. Zawiera informacje o statystykach utworzonych przez SQL Server, utworzonych przez indeksy i utworzonych przez użytkownika.
Wykonaj następujące zapytanie:
SELECT NAME AS 'STATISTICS NAME', AUTO_CREATED AS 'CREATED AUTOMATICALLY', USER_CREATED AS 'CREATED BY USER' FROM SYS.STATS WHERE OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')
Poniżej znajduje się wynik:
Teraz połączmy tę tabelę z innymi katalogami systemowymi, aby uzyskać szczegółowe informacje o statystykach. Aby to zrobić, wykonaj następujące zapytanie:
SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], [INDEXES].[INDEX_ID] AS [INDEX ID], [STATS].[NAME] AS [STATISTIC], STUFF((SELECT ', ' + [COLUMNS].[NAME] FROM [SYS].[STATS_COLUMNS] [STATS_COLUMN] JOIN [SYS].[COLUMNS] [COLUMNS] ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] WHERE [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] ORDER BY [STATS_COLUMN].[STATS_COLUMN_ID] FOR XML PATH('')), 1, 2, '') AS [COLUMNS_IN_STATISTIC] FROM [SYS].[STATS] [STATS] JOIN [SYS].[OBJECTS] AS [OBJECTS] ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] JOIN [SYS].[SCHEMAS] AS [SCHEMAS] ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] AND [STATS].[NAME] = [INDEXES].[NAME] WHERE [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') ORDER BY [STATS].[USER_CREATED] GO
Powyższe zapytanie zawiera następujące szczegóły
- Tabela, na której tworzone są statystyki.
- Identyfikator indeksu.
- Nazwa statystyk.
- Kolumny uwzględnione w statystykach.
Poniżej znajduje się wynik:
W następnej sekcji wyjaśnię różne sposoby aktualizowania statystyk.
Różne podejścia do aktualizacji statystyk
Statystyki możemy aktualizować w następujący sposób:
- Utwórz plan konserwacji SQL Server.
- Utwórz za pomocą niestandardowego skryptu.
- Ręcznie wykonaj polecenie aktualizacji statystyk na pojedynczej tabeli.
Najpierw wyjaśnię, jak możemy stworzyć plan konserwacji, aby zaktualizować statystyki.
Utwórz plan konserwacji serwera SQL, aby zaktualizować statystyki
Teraz, w tym demo, utworzymy plan konserwacji aktualizacji statystyk, aby zaktualizować statystyki. Plan konserwacji wykona następujące zadania:
Najpierw utwórz plan konserwacji. Aby to zrobić, otwórz SQL Server Management Studio. Rozwiń instancję serwera SQL>> Folder zarządzania>> W obszarze Zarządzanie kliknij prawym przyciskiem myszy MaintenancePplans i wybierz Nowy plan konserwacji. Zobacz następujący obraz:
Nowy plan konserwacji otworzy się okno dialogowe. W polu podaj nazwę planu konserwacji i kliknij OK. Zobacz następujący obraz:
Otwiera się projektant planu konserwacji. W przyborniku projektanta planu konserwacji przeciągnij i upuść „Zadanie aktualizacji statystyki” w oknie projektanta. Zobacz następujący obraz:
Teraz kliknij dwukrotnie Zaktualizuj zadanie statystyk . Zadanie aktualizacji statystyk otworzy się okno dialogowe. W oknie dialogowym znajdują się opcje, których można użyć do dostosowania planu konserwacji. Zobacz następujący obraz:
Możemy dostosować następujące opcje korzystania ze statystyk aktualizacji Plan konserwacji.
- Aktualizuj statystyki wszystkich obiektów określonej bazy danych. Zobacz następujący obraz:
- Określone obiekty wybranych baz danych. Możesz aktualizować statystyki wszystkich tabel i widoków / określonych tabel i widoków. Zobacz następujący obraz:
Jeżeli wybierzemy Tabele lub Widoki to SQL wypełni nazwy widoków lub tabel w zaznaczeniu Okno dialogowe. Zobacz następujący obraz:
- Trzecia opcja to Aktualizacja . Możemy aktualizować wszystkie statystyki tabel/widoków lub możemy wybrać aktualizację tylko statystyk kolumn (statystyki tworzone na kolumnach nieindeksowanych) lub możemy wybrać tylko statystyki indeksów (statystyki tworzone przez indeksy). Zobacz następujący obraz:
- Możemy również wybrać typ skanowania dowolnych statystyk. Możemy wybrać Pełne skanowanie lub Próbuj według określony procent lub określone wiersze. Zobacz następujący obraz:
Teraz, jak wspomniałem, stworzymy zadanie konserwacyjne, które zaktualizuje statystyki wszystkich tabel w AdventureWorks2017 baza danych z pełnym skanem. Wybierz więc odpowiednie opcje. Po skonfigurowaniu zadania konserwacyjnego wygląda to następująco:
Po prawidłowym skonfigurowaniu zadania konserwacji zamknij okno dialogowe statystyk aktualizacji. Po skonfigurowaniu plan konserwacji wygląda następująco:
Po utworzeniu planu konserwacji zaplanujmy plan konserwacji. Aby to zrobić, kliknij ikonę kalendarza obok Opisu kolumna. Zobacz następujący obraz:
Po kliknięciu przycisku kalendarza otworzy się okno dialogowe konfiguracji harmonogramu zadań. Zobacz następujący obraz:
Jak wspomniałem, nasz plan konserwacji statystyk aktualizacji będzie realizowany w każdą niedzielę o godzinie 4:00. Dlatego odpowiednio skonfigurujemy harmonogram pracy. Planowanie pracy jest proste. Po skonfigurowaniu harmonogramu okno dialogowe wygląda następująco:
Po skonfigurowaniu harmonogramu wykonania cały plan konserwacji wygląda jak na poniższej ilustracji. Zapisz plan konserwacji i zamknij okno.
Teraz uruchommy ten plan konserwacji, wykonując zadanie SQL utworzone przez plan konserwacji. Aby otworzyć zadania SQL, rozwiń SQL Server Agent i rozwiń Praca . Możesz zobaczyć zadanie SQL utworzone przez plan konserwacji SQL. Teraz, aby wykonać zadanie, kliknij prawym przyciskiem myszy Aktualizuj statystyki tygodniowo.Weekly.Subplan_1 i kliknij Rozpocznij pracę w kroku . Zobacz poniższy obraz.
Po zakończeniu zadania zobaczysz następujące okno dialogowe pomyślnego wykonania zadania.
Podsumowanie
W tym artykule omówiłem:
- Szczegółowe wyjaśnienie statystyk SQL Server i ich znaczenia.
- Różne opcje aktualizacji statystyk.
- Pracujący przykład tworzenia planu konserwacji SQL w celu aktualizacji statystyk.
W następnym artykule wyjaśnię różne polecenia T-SQL służące do aktualizacji statystyk. Ponadto wyjaśnię skrypt T-SQL, który zaktualizuje statystyki na podstawie ilości zmian danych, które nastąpiły po wstawieniu/aktualizacji/usunięciu w tabeli.