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?

Jon Seigel
źródło
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.

Thomas Stringer
źródło
+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ć.

David Brabant
źródło
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.

Christopher W. Szabo
źródło
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.

Jon Seigel
źródło
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ń.

egrunin
źródło
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?