Articles

SQLShack

Wprowadzenie

W tym artykule omówimy wiele narzędzi, które możemy wykorzystać do monitorowania wydajności SQL Server. SQL Server jest pełen wielu dobrych raportów, które pozwalają DBA szybko zauważyć, czy istnieje jakieś wąskie gardło wydajności serwera SQL. Wiele z nich opiera się na DMV, ale dają nam wizualnie interaktywny sposób patrzenia i pracy z danymi. Zaczniemy od raportów SQL Server Performance Dashboard Reports.

Raporty Dashboard Reports

Skoczmy do SQL Server Management Studio (SSMS) i pierwszą rzeczą, jaką zamierzamy zrobić jest zapoznanie się z dostępnymi raportami dashboardowymi wszystkich poziomów. Znajdziemy je klikając prawym przyciskiem myszy na instancję SQL Servera w Object Explorerze, a z menu kontekstowego wybierzemy Raporty > Raporty standardowe:

Lista wbudowanych raportów wydajnościowych w SSMS do śledzenia wydajności SQL Servera

Lista wbudowanych raportów wydajnościowych w SSMS do śledzenia wydajności SQL Servera

Wszystkie raporty pulpitowe są przydatne, Nie będziemy ich wszystkich omawiać, gdyż wymagałoby to dużo czasu i słów, ale nie krępuj się sprawdzić ich wszystkich, kiedy tylko będziesz miał okazję. Aby pokazać przykład, wybierz Server Dashboard z menu kontekstowego. Raport ten dostarcza nam wielu informacji na temat aktualnego stanu instancji SQL Server, w tym jej konfiguracji, wersji, usług i aktywności na niej:

Raport Server Dashboard pokazujący dane o instancji SQL Server, jej konfiguracji i aktywności na niej

Raport Server Dashboard pokazujący dane o instancji SQL Server, jej konfiguracji i aktywności na niej

Tutaj mamy również nie domyślne opcje konfiguracyjne. Są to te, które zostały zmienione w stosunku do instalacji waniliowej:

Lista niedefaultowych opcji konfiguracyjnych na instancji SQL Server

Lista niedefaultowych opcji konfiguracyjnych na instancji SQL Server

Również, na poziomie bazy danych, jeśli klikniemy prawym przyciskiem myszy na bazę danych, i przejdziemy do raportów, mamy wszelkiego rodzaju raporty użycia dysku, zdarzenia backupu i przywracania, top transakcje, statystyki indeksów, itp.

Lista wbudowanych raportów wydajnościowych na poziomie bazy danych w SSMS do śledzenia wydajności SQL Server

Lista wbudowanych raportów wydajnościowych na poziomie bazy danych w SSMS do śledzenia wydajności SQL Server

Więc wszystkie te raporty dashboardowe są świetne, są łatwe do konsumpcji i pracy z nimi.

Monitor aktywności

Następnie przyjrzymy się Monitorowi aktywności, który jest monitorem czasu rzeczywistego w SQL Server, którego możemy użyć do monitorowania wszystkiego, od wydajności, przez koszty wejścia/wyjścia, po kosztowne zapytania, itp. Aby uruchomić Monitor aktywności, kliknij prawym przyciskiem myszy na instancję SQL Server w Object Explorer i z menu kontekstowego wybierz Monitor aktywności. Możesz również uruchomić go z paska narzędzi Standard, klikając na ikonę Monitor aktywności:

Opcja Activity Monitor z menu kontekstowego SSMS prawym przyciskiem myszy w Object Explorerze do monitorowania wydajności SQL Servera's right-click context menu in Object Explorer for monitoring SQL Server performance

Opcja Activity Monitor z menu kontekstowego SSMS prawym-Monitor aktywności zawsze był jednym z najlepszych narzędzi do monitorowania wydajności SQL Servera, jeśli coś nagle pójdzie nie tak z wydajnością SQL Servera. Pierwszą rzeczą, jaką widzimy po uruchomieniu Monitora Aktywności jest panel Overview. Co więcej, narzędzie to posiada następujące rozwijalne i zwijane panele: Resource Waits, Data File I/O, Recent Expensive Queries oraz Active Expensive Queries:'s right-click context menu in Object Explorer for monitoring SQL Server performance

Opanel Activity Monitor w SSMS

Processes – daje nam możliwość przyjrzenia się aktualnie uruchomionym procesom, dzięki czemu możemy nimi zarządzać. Kliknięcie prawym przyciskiem myszy powoduje wyświetlenie menu kontekstowego, z którego możemy je zakończyć, prześledzić w SQL Server Profiler (więcej o nim później), obejrzeć jako plan wykonania, a także wyświetlić szczegóły sesji, co spowoduje wyświetlenie okna pokazującego ostatnią partię poleceń T-SQL:

Okno szczegółów sesji pokazujące ostatnią partię poleceń T-SQL

Okno szczegółów sesji pokazujące ostatnią partię poleceń T-SQL

Resources Waits – pokazuje informacje o oczekiwaniach na zasoby:

Opanel Resource Waits monitora aktywności

Data File I/O – pokazuje bieżące informacje o I/O pliku danych, które dzieją się na poziomie pliku:

Opanel Data File I/O monitora aktywności

Recent/Active Expensive Queries – pokazuje ostatnie/aktywne drogie zapytania, które zużywają wiele zasobów (pamięć, aktywność dyskowa, sieć):

Opanel Rececent Expensive Queries monitora aktywności

Jest to świetny punkt wyjścia do znalezienia, jakie zapytania powodują problemy, zabierają zbyt wiele zasobów itp. ponieważ raz znalezione, mogą być przeglądane jako plan wykonania, dzięki czemu można łatwo znaleźć gorące punkty:

Active Expensive Queries panel of the Activity monitor showing an execution plan

Active Expensive Queries panel of the Activity monitor showing an execution plan

Top DBA DMVs

Przechodząc dalej, sprawdźmy top DMVs, które każdy DBA powinien znać. Są to DMV, które zawsze powinieneś mieć w kieszeni. Aby uzyskać szybką listę wszystkich DMO (DMVs i DMFs) po prostu spytaj o nie w poniższej partii:

1
2
3
4
5
6
7

-.- Lista wszystkich DMO (DMVs & DMFs)
SELECT nazwa,
typ,
typ_desc
FROM sys.system_objects so
WHERE so.name LIKE 'dm_%'
ORDER BY so.name;

To zwróci wszystkie DMVs & DMFs w SQL Server. Spójrz na kolumnę type i zauważ, że „V” oznacza widok, a „IF” funkcję:

Skrypt do zwrócenia listy wszystkich DMO w SQL Server

Skrypt do zwrócenia listy wszystkich DMO w SQL Server

Powyższe zapytanie zwróciło 243 DMO w systemie. Oto lista najbardziej przydatnych z nich:

Wykonanie

sys.dm_exec_connections = Nawiązane połączenie
sys.dm_exec_sessions = Uwierzytelnione sesje
sys.dm_exec_requests = Bieżące żądania

Wykonanie (związane z zapytaniami)

sys.dm_exec_cached_plans = Plany wykonania w pamięci podręcznej
sys.dm_exec_query_plan = Pokaż plan dla danego zbuforowanego planu_handle
sys.dm_exec_query_stats = Statystyki wydajności zapytania
sys.dm_exec_sql_text = Tekst SQL dla danego sql_handle

Indeks

ys.dm_db_index_physical_stats = Rozmiar indeksu i fragmentacja
sys.dm_db_index_usage_stats = Wykorzystanie indeksu przez optymalizator zapytań
sys.dm_db_missing_index_details = Odkryj brakujące indeksy

OS

sys.dm_os_performance_counters = Lista wszystkich liczników wydajności SQL Server i ich wartości
sys.dm_os_schedulers = Wykryj presję CPU
sys.dm_os_waiting_tasks = Zadania oczekujące na zasoby
sys.dm_os_wait_stats = Wszystkie typy i statystyki oczekiwania

I/O

sys.dm_io_virtual_file_stats = Statystyki I/O dla danych i plików dziennika
sys.dm_io_pending_io_requests = Oczekujące żądania I/O

CLR

sys.dm_clr_loaded_assemblies = Załadowane asemblies
sys.dm_clr_tasks = Zadania związane z CLR

Książki online (docs.microsoft.com) mają świetne strony przeglądowe dla wszystkich DMO. Zachęcamy do skopiowania dowolnej nazwy z siatki wyników, wklejenia jej do przeglądarki i wyszukania. Najprawdopodobniej pierwszy artykuł na samej górze będzie pochodził z MS docs i będzie przedstawiał przegląd i zastosowanie T-SQL.

Na sam koniec zerknijmy na SQL Server Profiler, aby stworzyć i odtworzyć ślad. Jest to niezwykle przydatne podczas rozwiązywania problemów, niezależnie od tego, czy pochodzą one z aplikacji, czy z wnętrza bazy danych. Tworzenie śladu pozwala nam na uchwycenie obciążenia roboczego. A jeśli to obciążenie jest tym, które powoduje problemy, to mając możliwość odtworzenia tego problemu, znacznie łatwiej będzie zweryfikować, czy rzeczywiście go naprawiliśmy podczas rozwiązywania problemu.

Niestety Microsoft ogłosił deprecjację SQL Server Profiler, ale funkcja ta jest nadal dostępna w SQL Server 2016 i zostanie usunięta w przyszłych wersjach.

Przejdźmy więc do SQL Server Profiler i zobaczmy, jak działa. Aby uruchomić SQL Server Profiler, uderz w ikonę Windows Start lub naciśnij klawisz Windows i wpisz „SQL Server Profiler 17”:

ikona SQL Server Profiler z Windows Start

ikona SQL Server Profiler z Windows Start

Pamiętaj, SQL Server Profiler można uruchomić również z poziomu Monitora Aktywności, wystarczy kliknąć na panel Processes, prawym przyciskiem myszy na proces, który chcemy profilować, a następnie z menu kontekstowego prawego przycisku myszy wybrać opcję Trace Process in SQL Server Profiler.

Po uruchomieniu okna należy kliknąć pierwszy przycisk z napisem „New Trace”. Spowoduje to wyświetlenie okna dialogowego połączenia z instancją:

Okno połączenia z serwerem z SQL Server Profiler

Okno połączenia z serwerem z SQL Server Profiler

Po nawiązaniu połączenia z instancją, którą chcemy profilować i tworzyć na niej ślady, pojawi się okno Trace Properties. Nadaj ścieżce nazwę w polu Trace name. A ponieważ chcemy odtworzyć ten ślad, wybierz wbudowany szablon śladu, ponieważ istnieje kilka wymagań dotyczących odtworzeń, pewne zdarzenia i pola muszą być przechwytywane, a prostym sposobem na to jest wybranie szablonu TSQL_Replay z listy Użyj szablonu:

Zakładka Ogólne okna Trace Properties

Zakładka Ogólne okna Trace Properties

Na razie zapisz to jako plik zaznaczając opcję Zapisz do pliku, a następnie zmień zakładkę na Wybór zdarzeń. Ponieważ wybraliśmy szablon, będzie on wstępnie wybierał wiele zdarzeń. Z tego miejsca można bawić się opcjami, pokazywać wszystkie zdarzenia/kolumny, dodawać/usuwać określone zdarzenia, itd.:

Zakładka Wybór zdarzeń okna Właściwości śledzenia

W tym przypadku kliknijmy przycisk Filtry kolumn, aby ustawić filtr na nazwę bazy danych. Chcemy wyłapać tylko te zdarzenia, które trafiają do bazy AdventureWorks2014. Jest to świetny sposób na usunięcie wszystkich dodatkowych szumów, które pojawią się w prawdziwym scenariuszu:

Okno Edytuj filtr

Okno Edytuj filtr

Po ustawieniu wszystkiego, kliknij OK w oknie Edycja filtra, aby zapisać ustawienia i zamknąć je. Z powrotem w początkowych oknach, naciśnij przycisk Uruchom, aby rozpocząć śledzenie. Tak więc, ten ślad jest teraz uruchomiony, monitorując wszystko, co dzieje się w bazie danych AdventureWorks2014:

Running trace within SQL Server Profiler windows capturing information on SQL Server performance

Running trace within SQL Server Profiler windows capturing information on SQL Server performance

Przełącz SSMS i wykonaj kilka zapytań lub po prostu pozwól mu działać w tle przez chwilę. Różne zdarzenia zostaną przechwycone, nawet jeśli żadne zapytanie użytkownika nie trafi do bazy danych:

Śledzenie w oknie SQL Server Profiler pokazujące różne zdarzenia przechwycone na serwerze SQL

Po dłuższym czasie, zatrzymaj śledzenie klikając czerwony przycisk stop, jak pokazano poniżej:

Przycisk do zatrzymywania śladu w oknie SQL Server Profiler

Przycisk do zatrzymywania śladu w oknie SQL Server Profiler

Teraz, gdy mamy już wszystko przechwycone w tym wcześniej zapisanym pliku, możemy na przykład uruchomić tą powtórkę na innej instancji. Dlaczego? Ponieważ może to być niezwykle przydatne, gdy mamy problem na produkcji. Jest bardzo mało prawdopodobne, że jakiekolwiek duże problemy mogą być naprawione bezpośrednio na serwerze produkcyjnym. W tym przypadku, najlepszym podejściem byłoby skopiowanie produkcji do testu, pobranie śladu, który został przechwycony na produkcji, a następnie możemy zrobić wszystko, co chcemy na testowej bazie danych w zakresie rozwiązywania i usuwania problemu.

Aby to zrobić, należy otworzyć ślad w SQL Server Profiler:

Opcja otwierania śladu w SQL Server Profiler

Opcja otwierania śladu w SQL Server Profiler

Teraz przechodzimy do Replay i wybieramy Start:

Opcja uruchomienia powtórki śladu w SQL Server Profiler

Opcja uruchomienia powtórki śladu w SQL Server Profiler

To, po raz kolejny, spowoduje wyświetlenie okna dialogowego połączenia SQL Server z instancją:

Connect to Server box

Connect to Server box

Które następnie przeniesie nas do okna Replay Configuration, w którym możemy zmienić serwer replay, jeśli potrzebujemy w celu wspomnianym wcześniej. Od tego momentu wszystko jest już całkiem proste. Wystarczy nacisnąć OK, aby odtworzyć ślad:

Zakładka Podstawowe Opcje Odpowiedzi w oknie Konfiguracji Odpowiedzi

Zakładka Podstawowe Opcje Odpowiedzi w oknie Konfiguracji Odpowiedzi

Pierwszy wiersz zawsze będzie zawierał wszystkie zdarzenia Ustawień Odtwarzania. Następnie w każdej chwili, gdy pojawi się jakieś zdarzenie, będzie ono odpalać to zdarzenie. W zestawie wyników będzie tylko informacja, że zostało wykonane:

Replay Setting Event

Jeśli przewiniemy w prawo, w każdym zestawie wyników będzie znajdował się zmierzony przez profilera czas trwania – ile trwało uruchomienie zdarzenia:

Kolumna Profiler-measured duration w oknie SQL Server Profiler

Kolumna Profiler-measured duration w oknie SQL Server Profiler

Na samym końcu, znajdują się statystyki odtwarzania, które pokazują całkowitą liczbę zdarzeń, błędy dostawcy/wewnętrzne, które wystąpiły, statystyki współczynnika trafień oraz całkowity czas odtwarzania:

Statystyki Replay Statistics Event

Statystyki Replay Statistics Event

Ponownie, jest to dobre dla scenariuszy, w których występuje problem z wydajnością SQL Server i chcesz odtworzyć problem. W pierwszej kolejności należy uchwycić problem, co da nam możliwość wykonania wszelkich czynności na serwerze SQL w celu rozwiązania problemu i naprawienia go, a następnie odtworzenia problemu i sprawdzenia, czy udało nam się go rozwiązać.

Podsumowanie

W tym artykule omówiliśmy cztery narzędzia do monitorowania wydajności serwera SQL. Mamy nadzieję, że teraz będziesz w stanie zbierać informacje o wydajności i systemie używając Database Reports do interaktywnego, wizualnego wglądu w to, co robi SQL Server. Następnie przyjrzeliśmy się narzędziu do monitorowania wydajności SQL Server w czasie rzeczywistym o nazwie Activity Monitor. Przyjrzeliśmy się również jak używać DMVs, a na sam koniec dowiedzieliśmy się jak używać SQL Server Profiler.

  • Autor
  • Recent Posts
Bojan Petrovic

Bojan aka „Boksi”, absolwent AP w IT Technology koncentruje się na sieci i technologii elektronicznej z Copenhagen School of Design and Technology, jest analitykiem oprogramowania z doświadczeniem w zapewnieniu jakości, wsparcia oprogramowania, ewangelizacji produktu i zaangażowania użytkowników.
Bojan pracuje w ApexSQL w Nis, w Serbii, jako integralna część zespołu zajmującego się projektowaniem, rozwojem i testowaniem następnej generacji narzędzi bazodanowych, w tym MySQL i SQL Server, zarówno samodzielnych narzędzi, jak i integracji z Visual Studio, SSMS i VSCode.
See more about Bojan at LinkedIn
View all posts by Bojan Petrovic

Bojan Petrovic
Latest posts by Bojan Petrovic (see all)
  • Visual Studio Code for MySQL and MariaDB development – 13 sierpnia, 2020
  • Wyjaśnienie składni SQL UPDATE – 10 lipca 2020
  • CREATE VIEW SQL: Praca z widokami indeksowanymi w SQL Server – 24 marca 2020

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *