Kostki wymagają częstego monitorowania, ponieważ ich wydajność dość często spada (spowolnienia podczas budowania zapytań, przyrost czasu przetwarzania). Aby znaleźć przyczynę spadku, musimy monitorować nasz system. W tym celu używamy SQL Server Profiler. Firma Microsoft planuje jednak wykluczyć to narzędzie do śledzenia SQL w kolejnych wersjach. Główną wadą narzędzia jest intensywność zasobów i należy je uruchamiać ostrożnie na serwerze produkcyjnym, ponieważ może to spowodować krytyczną utratę wydajności systemu.
W ten sposób Extended Events to ogólny system obsługi zdarzeń dla systemów serwerowych. Ten system obsługuje korelację danych z SQL Server, co pozwala na uzyskanie zdarzeń stanu SQL Server.
Architektura systemu jest pokazana poniżej:
W rzeczywistości mamy pakiet zawierający zdarzenia, cele, akcje, typy, predykaty i mapy. Sesje zawierające Zdarzenia, Cele, Akcje są uruchamiane na serwerze. Nie będę szczegółowo opisywać architektury, ponieważ pomoc zawiera dokładny opis.
Wróćmy teraz do naszego SSAS. Aby wszystko było bardziej żywe, rozważmy kilka scenariuszy, których używamy do analizy problemu.
Scenariusz pierwszy:Analiza przetwarzania kostki (kostka wielowymiarowa)
Często dzieje się tak, gdy kostka jest aktualizowana przez bardzo długi czas podczas przetwarzania, chociaż ilość danych jest dość niska. Aby znaleźć przyczynę, musimy zrozumieć, jakie zapytanie lub miejsce przetwarzania powoduje spowolnienie. Oczywiście możemy uruchomić przetwarzanie na Produkcji i zobaczyć, co się dzieje, ale nie jestem pewien, czy Twoi użytkownicy to docenią. Tutaj z pomocą przychodzą wydarzenia rozszerzone. Uruchommy naszą sesję i skonfigurujmy jej zapisywanie do pliku.
Otwórzmy SSMS i połączmy się z SSAS, a następnie przejdźmy do Zarządzania.
Teraz utwórzmy nową sesję:
- Na karcie Ogólne określ nazwę naszej sesji i załaduj szablon.
- Wydarzenia zakładka pokazuje zdarzenia, które pomogą nam przeanalizować problemy. Zakładka zawiera wszystkich naszych starych znajomych z Profilera. Wybierzmy następujące zdarzenia do analizy przetwarzania:CommandBegin , Polecenie, Program essReportBegin i ProgressReportEnd, ResourceUsage.
Rozpocznij polecenie , Polecenie pokaże początek i koniec wykonywania polecenia podczas przetwarzania.
Program essReportBegin i ProgressReportEn dostarczają rozszerzonych informacji o długości każdego zdarzenia i pokazują odczytane dane, wykonanie zapytań SQL, długość itp.
Wykorzystanie zasobów pokazuje liczbę zasobów, które zostały wydane na wykonanie zapytania, działania.
Po wybraniu zdarzeń możemy przejść do konfigurowania każdego zdarzenia i określić, które zdarzenia muszą być pokazane, a które muszą być ukryte (na przykład możemy ukryć identyfikator procesu).
- Przechowywanie danych patka. Tutaj możemy określić, czy chcesz wyświetlać zdarzenia w trybie czasu rzeczywistego, czy zapisywać je do pliku:
- plik_zdarzenia – zapisanie zdarzenia do pliku do dalszej analizy. Określ maksymalny rozmiar pliku i ścieżkę docelową. Jeśli rozmiar pliku przekroczy określony rozmiar, zostanie utworzony nowy plik. Możemy również określić liczbę plików, które muszą zostać utworzone (maksymalna liczba plików).
- strumień_zdarzenia – umożliwia przeglądanie wydarzeń w trybie czasu rzeczywistego.
- bufor_pierścieniowy – określa, że dane sesji muszą być przechowywane w pamięci przez cały czas działania serwera. W przypadku przeładowania dane zostaną usunięte.
- Zaawansowane zakładka umożliwia konfigurację zasobów (pamięci, procesora) dla danej sesji.
Na koniec kliknij OK i zdobądź sesję. Uruchommy przetwarzanie kostki i zobaczmy przetwarzanie według zdarzeń. Przełącz na tryb danych na żywo.
W górnej części poniższego zrzutu ekranu możemy zobaczyć wydarzenia, które mają miejsce w tej chwili z naszą instancją. Szczegóły wydarzeń są pokazane na dole. Dowolną wartość szczegółów wydarzenia można dodać jako osobną kolumnę u góry. Kliknij prawym przyciskiem myszy wybraną wartość szczegółów wydarzenia i wyświetl je w tabeli.
W rezultacie otrzymujemy następujący widok:
Dlatego Extended Events umożliwiają analizę naszego przetwarzania w trybie czasu rzeczywistego. Możemy zrozumieć, ile czasu poświęca się na przetwarzanie każdego obiektu, ile zasobów jest następnie wykorzystywanych. Pomaga to wyciągać wnioski i znajdować słabe punkty. Ponadto nie przeciążamy systemu i nie tracimy wydajności.
Sesję można również utworzyć za pomocą XMLA. Możesz pobrać skrypt na GitHub.
Zatrzymanie i usunięcie sesji jest możliwe zarówno przez SSMS, jak i XMLA.
- Przez SSMS (jednak w 2016 roku wystąpił błąd i nie udało mi się usunąć sesji przez interfejs).
- Skrypt XMLA – można pobrać tutaj.
To jest pierwsza część artykułu o Extended Events for SSAS. W drugiej części rozważymy scenariusz analizy wydajności zapytań w kostce, pracy z plikiem śledzenia i analizy pliku przez Power BI.
Polecam również zajrzeć do następujących postów na blogu:
- Pinal Dave — SQL SERVER — SQL Profiler a rozszerzone zdarzenia
- Chris Web — Profiler, rozszerzone zdarzenia i usługi analityczne. Chociaż autor artykułu stwierdza, że Profiler prawie nie jest używany na serwerach produkcyjnych, ale potwierdza jego problemy z obciążeniem serwera.
- Brent Ozar — rozszerzone zdarzenia SQL Server