Czy profiler SQL wpływa na wydajność serwera?


11

Stoję w obliczu problemu polegającego na tym, że serwer SQL 2008 nie działa z powodu dużego obciążenia. Muszę znaleźć ten przypadek obciążenia i muszę zoptymalizować kod, aby mógł obsłużyć obciążenie. W Internecie znalazłem, że profilera SQL można użyć do śledzenia interakcji z bazą danych, które można później przeanalizować, aby znaleźć dokładny punkt, w którym pojawia się problem. Dowiedziałem się również, jak uruchomić profiler SQL. Ale teraz moje pytanie brzmi: uruchamiając profil sql mam zamiar wpłynąć na wydajność serwera?


5
tak. Zależy jak i gdzie go uruchomisz. Wykonanie we właściwy sposób może być zaledwie kilkukrotnym dodatkowym obciążeniem.
— Mitch Wheat

3
Wydłużone wydarzenia mogą być bardziej lekką opcją.
— Martin Smith

Odpowiedzi:


10

SQL Server Profiler to graficzny interfejs użytkownika, który wykorzystuje śledzenie SQL Server po stronie klienta. Ze względu na tę naturę, tak, potencjalnie możesz zobaczyć łagodny lub poważny wpływ na wydajność w zależności od środowiska.

SQL Server Profiler nadaje się głównie do szybkiego wglądu w to, co dzieje się na serwerze (pod warunkiem, że serwer bazy danych poradzi sobie z dodatkowymi opóźnieniami). Nie jest przeznaczony do działania przez długi czas. Aby uzyskać dłuższe ślady, użyj śledzenia po stronie serwera lub zdarzeń rozszerzonych.


+1, nawet bardzo krótki ślad profilera, w zależności od wielu czynników, może uszkodzić serwer.
— Aaron Bertrand

3

Jeśli używasz śledzenia po stronie serwera , wpływ na wydajność można zminimalizować.


Mój serwer i baza danych są zainstalowane na tym samym komputerze. Teraz, jeśli uruchomię narzędzie do profilowania SQL za pomocą „Microsoft SQL Management Studio -> Narzędzia-> SQL profiler”, to jakiego spadku wydajności mogę się spodziewać i na podstawie jakich czynników?

Opiera się na tym, jak zajęty jest Twój serwer, ile zdarzeń i ile kolumn składa się Twój ślad, a także filtrowanie. Filtrowanie może wpływać w obu kierunkach - w jeden sposób może zmniejszyć liczbę wierszy zwracanych do interfejsu użytkownika (część, która naprawdę powoduje, że profiler boli bardziej niż śledzenie po stronie serwera), ale z drugiej strony, jeśli masz źle wybrany filtr (np. textdata LIKE '%foo%') może mieć odwrotny skutek. Jest o wiele za dużo zmiennych, aby zapewnić magiczne oczekiwania, po prostu będziesz musiał spróbować. Jednak naprawdę powinieneś używać śledzenia po stronie serwera.
— Aaron Bertrand

Wypróbuj ten link, jeśli nie masz dostępu do oryginału.
— Marc Lopez

3

Wszystko, co powiedzieli poprzedni plakaty, jest poprawne. Profiler to aplikacja, która w pewnym momencie używała DMO, a teraz używa SMO do przechwytywania zdarzeń śledzenia. Daje to ogromną ilość kosztów ogólnych w porównaniu do zwykłego użycia śledzenia po stronie serwera.

SMO to interfejs API, który dodaje dodatkową „warstwę” do procesu śledzenia wraz z aplikacją kliencką Profiler. Śledzenie po stronie serwera odczytuje zdarzenia śledzenia bezpośrednio z kolejki transakcji, których wynikowy narzut jest znikomy.

Udało mi się uruchomić śledzenie po stronie serwera w środowiskach SQL Server, które przetwarzają ponad 10 000 transakcji na sekundę. Użycie Profiler w tych samych środowiskach przyniesie instancję bazy danych na kolana. W dowolnym środowisku produkcyjnym, jeśli chcesz śledzić aktywność bazy danych, zawsze używaj śledzenia po stronie serwera. Profiler zabije instancję bazy danych.


2

Tak, SQL Server Profiler wpływa na wydajność.

Kiedy śledzisz za pomocą GUI, wszystkie zdarzenia są synchronicznie przetwarzane i filtrowane, więc czynniki takie jak obciążenie serwera, opóźnienie sieci, które zdarzenia zbierasz, a nawet gdzie przechowywane są zebrane zdarzenia, przyczyniają się do narzutu.

Jak sugerują inne odpowiedzi, preferowane jest użycie śledzenia po stronie serwera zamiast GUI. Jednak ta metoda jest przestarzała i zamiast niej należy użyć zdarzeń rozszerzonych . (Uwaga: nawet przy użyciu Rozszerzonych zdarzeń, które są lżejsze niż ślad, nadal możliwe jest dodanie niepożądanego obciążenia do serwera - zobacz listę w drugim akapicie, aby wymyślić, jak zminimalizować koszty ogólne podczas konfigurowania zdarzenia sesja.)

W przypadku mocno obciążonego serwera należy bardzo uważać na gromadzone informacje, ponieważ sam proces pomiaru może mieć wpływ na badany problem.


0

Program SQL Server Profiler działa w dwóch krokach: najpierw powiedz mu, aby rejestrował wszystkie zapytania. Następnie wykonujesz typowe transakcje (lub po prostu pozwalasz logować się w stosunku do produkcji). To tworzy „obciążenie testowe”. Następnie wykonujesz rzeczywiste profilowanie (analizę) przy użyciu obciążenia testowego.

Rejestrowanie nie jest bardzo drogie, zwłaszcza w porównaniu z kosztami samych zapytań.


Mój serwer i baza danych są zainstalowane na tym samym komputerze. Teraz, jeśli uruchomię narzędzie do profilowania SQL za pomocą „Microsoft SQL Management Studio -> Narzędzia-> SQL profiler”, to jakiego spadku wydajności mogę się spodziewać i na podstawie jakich czynników?
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.