Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rozwiązywanie problemów z wydajnością procesora SQL Server

W tym poście omówię ogólną metodologię rozwiązywania problemów z wydajnością procesora. Lubię domyślnie stosować metodologie, a także lubię zwiększać efektywność rozwiązywania problemów w oparciu o doświadczenia z przeszłości. Bez ogólnych ram zbyt łatwo jest przeoczyć prawdziwą przyczynę w środku kryzysu.

Kroki, które opiszę w tym poście, są następujące:

  1. Zdefiniuj problem
  2. Zweryfikuj aktualne warunki
  3. Odpowiedz „Czy to SQL Server”?
  4. Zidentyfikuj użytkowników procesora
  5. Dopasuj wzorzec i rozwiąż

W tym artykule omówimy każdy z tych kroków. Przyjmę założenie, że być może nie korzystasz z narzędzia monitorującego innej firmy. Jeśli jednak tak jest, ramy tutaj nadal obowiązują, ale źródła danych i narzędzia do Twojej dyspozycji będą się różnić od tego, co opisałem.

Zdefiniuj problem

Najpierw musimy zbadać problem. Kiedy ktoś podchodzi do ciebie i mówi, że widzi problem z wydajnością procesora, może to oznaczać wiele różnych rzeczy. Więc pierwszym zadaniem jest zrozumienie, jaki jest obecnie problem z wydajnością procesora.

Niektóre popularne kategorie to:

  • Dostępność jest ograniczona ze względu na „pegged CPUs”. Na przykład – wszystkie programy planujące pracujące w 100% na całej planszy, a przepustowość jest zablokowana lub znacznie zmniejszona.
  • Spadek wydajności z powodu „wyższego niż normalnie” wykorzystania procesora. Więc nie jesteśmy związani, ale twoje procesory działają z wyższym procentem niż zwykle i prawdopodobnie ma to wpływ na wydajność.
  • Inną częstą kategorią problemów z wydajnością procesora jest scenariusz „zwycięzcy i przegrani”, w którym obciążenia konkurują ze sobą. Być może masz obciążenie OLTP, które napotyka zmniejszoną przepustowość z powodu równoległego wykonywania zapytania raportu.
  • Innym problemem może być napotkanie punktu krytycznego – w którym w pewnym momencie dochodzi do ograniczenia ogólnej pojemności i skalowalności systemu.

Wspominam te nadrzędne kategorie jako punkt wyjścia, ale wiem, że często mogą istnieć silne zależności między tymi problemami i jedna kategoryzacja może łączyć się z drugą. Mając to na uwadze, pierwszym krokiem jest jak najjaśniejsze zdefiniowanie objawów i problemów.

Zweryfikuj aktualne warunki

Niezależnie od tego, czy problem miał miejsce w przeszłości, czy ma miejsce teraz, ważne jest, aby uzyskać jak najwięcej podstawowych informacji o systemie, obciążeniu pracą i konfiguracjach. Jeśli korzystasz z linii bazowych i run-booków, najlepiej, jeśli już śledzisz większość tych informacji. Jeśli nie, zadaj sobie pytanie, jak szybko możesz uzyskać odpowiedzi na te pytania o 2 w nocy w środku kryzysu.

Poniższe podsekcje obejmują ważne punkty danych, które zwykle mnie interesują w przypadku problemów z wydajnością procesora.

    Fizyczne dane serwera
    • Ile gniazd i rdzeni?
    • Czy funkcja hyper-threading jest włączona?
    • Jaki jest model i architektura procesora (32-bit/64-bit)?
    Szczegóły serwera wirtualnego
    • Czy to jest wirtualny gość?
    • Jeśli tak, teraz zainteresują Cię również szczegóły dotyczące gospodarza i innych wirtualnych gości, z którymi udostępniasz zasoby.
    • Czy obowiązują jakieś ustawienia związane z procesorem?
    • Na przykład procesor Hyper-V
    Rezerwa, rezerwacja procesora VMware, względna waga procesora Hyper-V i udziały procesora VMware.
    • Ile procesorów wirtualnych jest przydzielonych gościom?
    • Ile procesorów wirtualnych ma ten gość?
    • Czy gość został niedawno przeniesiony do nowego hosta przed problemem?
    Ustawienia konfiguracji instancji SQL Server
    • Maksymalny stopień ustawienia równoległości
    • Próg kosztów dla opcji równoległości
    • Ustawienie powinowactwa procesora
    • Ustawienie zwiększania priorytetu
    • Ustawienie maksymalnej liczby wątków roboczych
    • Ustawienie lekkiego łączenia


    Pierwsze trzy konfiguracje mogą wymagać dalszej dyskusji. Rzadko zdarzają się absoluty dotyczące tych ustawień.

    Jeśli chodzi o ostatnie trzy ustawienia, takie jak „zwiększenie priorytetu”, jeśli widzę, że mają one wartości inne niż domyślne, zdecydowanie będę naciskać na więcej informacji ogólnych i historii.

    Ustawienia opcji zasilania procesora
    • Jakie jest ustawienie opcji zasilania? (poziom systemu operacyjnego, host maszyny wirtualnej lub kontrola systemu BIOS)
      • Wysoka wydajność, zrównoważony, energooszczędny?

    Ustawienia opcji zasilania poniżej „Wysoka wydajność” są nadal bardzo powszechne i nie należy ich ignorować w przypadku serwerów hostujących instancje SQL Server.

    Konfiguracja Resource Governor
    • Czy jest skonfigurowany poza ustawieniami domyślnymi?


    Nadal uważam, że rzadko spotyka się klientów korzystających z tej funkcji, ale łatwo jest sprawdzić, czy jest ona używana i czy będzie tego warta w czasach, gdy jest faktycznie skonfigurowana poza domyślną.

    Dziennik błędów SQL Server i dzienniki zdarzeń Windows
    • Czy widzisz jakieś nietypowe ostrzeżenia lub błędy?


    Po co szukać w dziennikach błędów i zdarzeń problemów z procesorem? Czasami problemy nadrzędne mogą powodować problemy z wydajnością w programie SQL Server. Nie chcesz tracić czasu na dostrajanie zapytania lub dodawanie nowego indeksu, gdy jesteś nadrzędny, ponieważ główną przyczyną problemu jest degradacja komponentów sprzętowych.

Odpowiedz „Czy to SQL Server?”

Brzmi to oczywiste, kiedy o to pytam, ale naprawdę nie chcesz spędzać znacznej ilości czasu na rozwiązywaniu problemów z wysokim procesorem w SQL Server, jeśli winowajcą nie jest w rzeczywistości SQL Server.

Zamiast tego poświęć chwilę, aby sprawdzić, który proces zużywa najwięcej procesora. Do wyboru jest kilka opcji, w tym:

  • Proces:% czasu użytkownika (tryb użytkownika)
  • Proces:% czasu uprzywilejowanego (tryb jądra)
  • Menedżer zadań
  • Eksplorator procesów
  • Ostatnie informacje o procesorze za pośrednictwem sys.dm_os_ring_buffers lub sesji dotyczącej kondycji systemu dla określonych instancji SQL Server działających w systemie

Jeśli jest to SQL Server i masz do wyboru wiele instancji SQL Server, upewnij się, że rozwiązujesz problem z właściwą instancją SQL Server na hoście. Jest na to kilka sposobów, w tym użycie SELECT SERVERPROPERTY('processid') aby uzyskać identyfikator PID, a następnie powiązać go z Menedżerem zadań lub Eksploratorem procesów.
Po potwierdzeniu, że jest to SQL Server, czy widzisz długi czas użytkownika lub czas uprzywilejowany (jądra)? Ponownie można to potwierdzić za pomocą procesu:% czasu uprzywilejowanego (obiekt sqlservr), a także Menedżera zadań Windows lub Eksploratora procesów.

Chociaż problemy z wysokim czasem jądra powinny być rzadkie, nadal wymagają innych ścieżek rozwiązywania problemów niż problemy ze standardowym czasem użytkowania procesora. Niektóre potencjalne przyczyny długiego czasu jądra to wadliwe sterowniki filtrów (antywirusy, usługi szyfrowania), nieaktualne lub brakujące aktualizacje oprogramowania układowego i sterowników lub wadliwe składniki we/wy.

Zidentyfikuj użytkowników procesora

Po sprawdzeniu, która instancja programu SQL Server wpływa na wykorzystanie procesora przez użytkownika w systemie, w Internecie dostępnych jest wiele gotowych przykładów zapytań, z których można skorzystać.

Poniżej znajduje się lista DMV, których ludzie często używają w różnych formach podczas problemów z wydajnością. Uporządkowałem to w formacie pytań i odpowiedzi, aby pomóc określić, dlaczego chcesz uzyskać do nich dostęp.

    Jakie żądania są obecnie wykonywane i jaki jest ich status?
    • sys.dm_exec_requests
    Co to jest wykonywanie?
    • sys.dm_exec_sql_text
    Skąd to jest?
    • sys.dm_exec_sessions
    • sys.dm_exec_connections
    Jaki jest jego szacunkowy plan? (ale uważaj na niszczenie xml w systemie z już ograniczonym procesorem)
    • sys.dm_exec_query_plan
    Kto czeka na zasób i na co czekają?
    • sys.dm_os_waiting_tasks
    Które zapytania zajęły najwięcej czasu procesora od ostatniego restartu?
    • sys.dm_exec_query_stats
      • Agregacja według total_worker_time
      • Zdefiniuj średnie za pomocą liczby_wykonań
      • Jeśli obciążenia ad hoc, możesz pogrupować według query_hash
      • Użyj plan_handle z sys.dm_exec_query_plan, aby pobrać plan
    Czy to zapytanie korzysta z równoległości?
    • sys.dm_os_tasks
      • Uporządkowane według session_id, request_id
    • sys.dm_exec_query_plan
      • Spójrz na operatorów planu – ale pamiętaj, że to tylko szacunkowy plan
    • sys.dm_exec_query_stats
      • Filtruj total_elapsed_time mniej niż total_worker_time
      • Pamiętaj jednak, że może to być fałszywie negatywny wynik w przypadku scenariuszy blokujących – w których czas trwania jest zawyżony z powodu oczekiwania na zasób

Dopasuj wzorzec i rozwiąż

Prawdopodobnie śmiejesz się z tego konkretnego kroku – ponieważ ten może być najbardziej zaangażowany (i jest to kolejny powód, dla którego profesjonaliści SQL Server są zatrudniani zarobkowo). Istnieje kilka różnych wzorców i związanych z nimi rozdzielczości – więc zakończę ten post listą najczęściej występujących sterowników problemów z wydajnością procesora, które widziałem w ciągu ostatnich kilku lat:

  • Wysokie operacje we/wy (i z mojego doświadczenia wynika, że ​​jest to najpopularniejszy sterownik procesora)
  • Problemy z oszacowaniem kardynalności (i związana z nimi niska jakość planu zapytań)
  • Nieoczekiwany równoległość
  • Nadmierna kompilacja / rekompilacja
  • Intensywne obliczenia wywołania UDF, operacje niszczenia
  • Operacje rzędy po rzędach
  • Równoczesne działania konserwacyjne (np. UPDATE statystyk za pomocą FULLSCAN)

Z każdym zidentyfikowanym przeze mnie obszarem wiąże się duża ilość pracy do zbadania. Jeśli chodzi o skonsolidowane zasoby, nadal uważam, że jednym z lepszych jest artykuł techniczny „Rozwiązywanie problemów z wydajnością w SQL Server 2008” napisany przez Sunila Agarwala, Borisa Baryshnikova, Keitha Elmore'a, Juergena Thomasa, Kun Cheng i Burzina Patel.

Podsumowanie

Jak w przypadku każdej metodologii, istnieją granice jej wykorzystania i obszary, w których można improwizować. Pamiętaj, że nie sugeruję, aby kroki opisane w tym poście były używane jako sztywne ramy, ale zamiast tego uważam je za punkt wyjścia do rozwiązywania problemów. Nawet bardzo doświadczeni profesjonaliści SQL Server mogą popełniać błędy początkujących lub być stronniczym przez ich nowsze doświadczenia związane z rozwiązywaniem problemów, więc posiadanie minimalnej metodologii może pomóc w uniknięciu rozwiązania niewłaściwego problemu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyłączyć ograniczenie wyboru w programie SQL Server (przykłady T-SQL)

  2. Jak usunąć część czasu z wartości daty i godziny (SQL Server)?

  3. Pobierz listę wszystkich pustych i nie zerowych kolumn w bazie danych SQL Server — samouczek SQL Server / T-SQL, część 53

  4. Czy możesz wywołać usługę internetową z kodu TSQL?

  5. Jak uzyskać pierwszy i ostatni dzień poprzedniego miesiąca (ze znacznikiem czasu) w SQL Server