Monitorowanie wydajności i rozwiązywanie problemów z nią

Ukończone

Monitorowanie i rozwiązywanie problemów to kluczowe elementy służące do zapewnienia spójnej wydajności. Usługa Azure SQL ma te same narzędzia i funkcje co program SQL Server do monitorowania i rozwiązywania problemów dotyczących wydajności, a także zapewnia dodatkowe możliwości. Są to takie funkcje, jak dynamiczne widoki zarządzania (widoki DMV), zdarzenia rozszerzone oraz usługa Azure Monitor. Ważne jest również, aby dowiedzieć się, jak korzystać z tych narzędzi i funkcji w różnych scenariuszach wydajności dla usługi Azure SQL. Te scenariusze obejmują wysokie wykorzystanie procesora CPU lub oczekiwanie na zasób.

Narzędzia i funkcje do monitorowania wydajności

Usługa Azure SQL udostępnia funkcje do monitorowania i rozwiązywania problemów w ekosystemie platformy Azure, a także znane narzędzia, które są dostarczane wraz z programem SQL Server. Zostało to pokrótce opisane w kolejnych sekcjach.

Azure Monitor

Usługa Azure Monitor jest częścią ekosystemu platformy Azure, a usługa Azure SQL jest zintegrowana w celu obsługi metryk, alertów i dzienników platformy Azure. Dane usługi Azure Monitor można wizualizować w witrynie Azure Portal, a aplikacje mogą uzyskiwać dostęp do tych danych za pośrednictwem usługi Azure Event Hubs lub interfejsów API. Podobnie jak w przypadku systemu Windows monitor wydajności usługa Azure Monitor ułatwia uzyskiwanie dostępu do metryk użycia zasobów dla usługi Azure SQL bez korzystania z narzędzi programu SQL Server.

Dynamiczne widoki zarządzania (DMV)

Usługa Azure SQL udostępnia niemal tę samą infrastrukturę dmv co program SQL Server, z kilkoma różnicami. Dynamiczne widoki zarządzania są kluczowe dla monitorowania wydajności, ponieważ kluczowe dane wydajności programu SQL Server można wyświetlać przy użyciu standardowych zapytań języka T-SQL. Na przykład można wyświetlać informacje, takie jak aktywne zapytania, użycie zasobów, plany zapytań i typy oczekiwania na zasoby. Więcej informacji na temat widoków DMV z usługą Azure SQL znajdziesz w dalszej części tej lekcji.

Zdarzenia rozszerzone

Usługa Azure SQL udostępnia niemal tę samą infrastrukturę zdarzeń rozszerzonych co program SQL Server, z kilkoma różnicami. Zdarzenia rozszerzone umożliwiają śledzenie kluczowych zdarzeń wykonywania w programie SQL Server, który obsługuje usługę Azure SQL. Na potrzeby badania wydajności zdarzenia rozszerzone umożliwiają śledzenie wykonania poszczególnych zapytań. W dalszej części tej lekcji dowiesz się więcej o zdarzeniach rozszerzonych w usłudze Azure SQL.

Uproszczone profilowanie zapytań

Uproszczone profilowanie to zaawansowana metoda rozwiązywania problemów ze scenariuszami wymagającymi pobierania rzeczywistego planu wykonania dla żądań w locie i zapytań o wysokiej wartości. Ze względu na niskie obciążenie, każdy serwer, który nie jest jeszcze powiązany z procesorem, może stale uruchamiać uproszczone profilowanie i umożliwiać specjalistom ds. baz danych korzystanie z jakiegokolwiek uruchomionego wykonywania w dowolnym momencie; na przykład przy użyciu monitora aktywności w programie SQL Server Management Studio (SSMS) lub zapytaniu sys.dm_exec_query_profiles bezpośrednio lub sys.dm_exec_query_statistics_xml.

Możesz użyć uproszczonego profilowania zapytań, aby zbadać plan zapytania i uruchomić stan aktywnego zapytania. Jest to kluczowa funkcja umożliwiająca debugowanie wydajności zapytań dla instrukcji podczas ich uruchomienia. Ta funkcja skraca czas rozwiązywania problemów z wydajnością w porównaniu z używaniem narzędzi, takich jak zdarzenia rozszerzone, do śledzenia wydajności zapytań. Dostęp do uproszczonego profilowania zapytań można uzyskać za pośrednictwem widoków DMV i jest on domyślnie włączony dla usługi Azure SQL, podobnie jak w przypadku programu SQL Server 2019 i nowszych wersji.

Możliwości debugowania planu zapytania

W niektórych sytuacjach mogą być potrzebne dodatkowe szczegóły dotyczące wydajności zapytań dla poszczególnych instrukcji języka T-SQL. Instrukcje SET języka T-SQL, takie jak SHOWPLAN i STATISTICS, mogą udostępniać te szczegóły i są w pełni obsługiwane w przypadku usługi Azure SQL, tak jak w przypadku programu SQL Server.

Magazyn zapytań

Magazyn zapytań to historyczny rekord danych wykonywania wydajności zapytań przechowywany w bazie danych użytkownika. Magazyn zapytań jest domyślnie włączony dla usługi Azure SQL i służy do udostępniania takich funkcji, jak automatyczna korekta planu i automatyczne dostrajanie. Raporty programu SQL Server Management Studio (SSMS) dotyczące magazynu są dostępne dla usługi Azure SQL. Użyj tych raportów do znajdowania najważniejszych zapytań zużywających zasoby, w tym różnic w planach zapytań, oraz najczęstszych typów oczekiwania, aby przyjrzeć się scenariuszom oczekiwania na zasoby.

Wizualizacje wydajności

W przypadku usługi Azure SQL Database można wyświetlić zintegrowane informacje o wydajności magazynu zapytań w witrynie Azure Portal za pośrednictwem wizualizacji. W ten sposób można zobaczyć niektóre z tych samych informacji dla magazynu zapytań, jak w przypadku narzędzia klienckiego, takiego jak program SSMS. Użyj opcji Przegląd wydajności i Szczegółowe informacje o wydajności zapytań w witrynie Azure Portal.

Szczegóły dynamicznego widoku zarządzania

Dynamiczne widoki zarządzania od wielu lat są siłą napędową do monitorowania wydajności i rozwiązywania problemów z wydajnością przy użyciu programu SQL Server. Typowe dynamiczne widoki zarządzania programu SQL Server są dostępne w usłudze Azure SQL, a kilka dodatkowych jest specyficznych dla platformy Azure.

Wystąpienie zarządzane Azure SQL

Wszystkie dynamiczne widoki zarządzania programu SQL Server są dostępne w przypadku usługi SQL Managed Instance. Kluczowe dynamiczne widoki zarządzania, takie jak sys.dm_exec_requests i sys.dm_os_wait_stats są często używane do badania wydajności zapytań.

sys.server_resource_stats Widok systemu jest specyficzny dla usługi Azure SQL Managed Instance i pokazuje historyczne użycie zasobów. Jest to cenne narzędzie do wyświetlenia użycia zasobów, ponieważ nie masz bezpośredniego dostępu do narzędzi systemu operacyjnego, takich jak monitor wydajności.

Azure SQL Database

Większość typowych widoków DMV, których potrzebujesz do wydajności, w tym sys.dm_exec_requests i sys.dm_os_wait_stats, jest dostępna. Należy pamiętać, że te dynamiczne widoki zarządzania zapewniają tylko informacje specyficzne dla bazy danych, a nie informacje dla wszystkich baz danych dla serwera logicznego.

Dynamiczny sys.dm_db_resource_stats widok zarządzania jest specyficzny dla usługi Azure SQL Database i umożliwia wyświetlenie historii użycia zasobów dla bazy danych. Sposób korzystania z tego dynamicznego widoku zarządzania przypomina sposób korzystania z widoku sys.server_resource_stats w przypadku wystąpienia zarządzanego.

Widok sys.elastic_pool_resource_stats DMV jest podobny do sys.dm_db_resource_stats, ale można go użyć do wyświetlania użycia zasobów dla baz danych elastycznej puli.

Potrzebne dynamiczne widoki zarządzania

Aby rozwiązać pewne scenariusze wydajności dla usługi Azure SQL, potrzebne są następujące dynamiczne widoki zarządzania:

  • sys.dm_io_virtual_file_stats — jest ważny, ponieważ nie masz bezpośredniego dostępu do metryk systemu operacyjnego dla wydajności operacji we/wy dla każdego pliku.
  • sys.dm_os_performance_counters — jest dostępny w przypadku usług Azure SQL Database i SQL Managed Instance w celu wyświetlania typowych metryk wydajności programu SQL Server. Użyj tego dynamicznego widoku zarządzania, aby wyświetlić informacje licznika wydajności programu SQL Server, które są zwykle dostępne w monitor wydajności.
  • sys.dm_instance_resource_governance — umożliwia wyświetlanie limitów zasobów dla wystąpienia zarządzanego. Możesz wyświetlić te informacje, aby zobaczyć, jakie powinny być oczekiwane limity zasobów, bez korzystania z witryny Azure Portal.
  • sys.dm_user_db_resource_governance — umożliwia wyświetlanie typowych limitów zasobów dla opcji wdrożenia, warstwy usług i rozmiaru wdrożenia usługi Azure SQL Database. Możesz wyświetlić te informacje, aby zobaczyć, jakie powinny być oczekiwane limity zasobów, bez korzystania z witryny Azure Portal.

Dynamiczne widoki zarządzania na potrzeby bardziej szczegółowych informacji

Te dynamiczne widoki zarządzania zapewniają dokładniejszy wgląd w limity zasobów i nadzór nad zasobami dla usługi Azure SQL. Nie są one przeznaczone do użytku w typowych scenariuszach, ale mogą być pomocne podczas wgłębiania się w złożone problemy z wydajnością. Zapoznaj się z dokumentacją, aby poznać wszystkie szczegóły tych dynamicznych widoków zarządzania:

  • sys.dm_user_db_resource_governance_internal (tylko usługa SQL Managed Instance)
  • sys.dm_resource_governor_resource_pools_history_ex
  • sys.dm_resource_governor_workload_groups_history_ex

Szczegóły zdarzeń rozszerzonych

Funkcja zdarzeń rozszerzonych to mechanizm śledzenia dla programu SQL Server. Zdarzenia rozszerzone dla usługi Azure SQL są oparte na a aparatu programu SQL Server i dlatego są prawie takie same w przypadku usługi Azure SQL, z kilkoma różnicami, które można zauważyć. W następnych sekcjach opisano te różnice.

Zdarzenia rozszerzone dla usługi Azure SQL Database

Zdarzenia rozszerzone można używać dla usługi Azure SQL Database, podobnie jak program SQL Server, tworząc sesje i używając zdarzeń, akcji i obiektów docelowych. Podczas tworzenia sesji zdarzeń rozszerzonych należy pamiętać o następujących kwestiach:

  • Obsługiwane są najczęściej używane zdarzenia i akcje.
  • Obsługiwane są elementy docelowe plików, ring_buffer i liczników.
  • Elementy docelowe plików są obsługiwane w usłudze Azure Blob Storage, ponieważ nie masz dostępu do podstawowych dysków systemu operacyjnego.

Do tworzenia i uruchamiania sesji można użyć programu SSMS lub języka T-SQL. Za pomocą programu SSMS można wyświetlić dane docelowe rozszerzonej sesji zdarzeń lub funkcję sys.fn_xe_file_target_read_filesystemową .

Uwaga

Nie można użyć programu SSMS do wyświetlania aktywnych danych dla usługi Azure SQL Database.

Ważne jest, aby wiedzieć, że wszelkie zdarzenia rozszerzone wyzwalane dla sesji są specyficzne dla Twojej bazy danych, a nie mają zastosowania dla serwera logicznego.

Zdarzenia rozszerzone dla usługi Azure SQL Managed Instance

Zdarzenia rozszerzone mogą być używane dla usługi SQL Managed Instance tak jak program SQL Server, tworząc sesje i używając zdarzeń, akcji oraz elementów docelowych. Podczas tworzenia sesji zdarzeń rozszerzonych należy pamiętać o następujących kwestiach:

  • Obsługiwane są wszystkie zdarzenia, elementy docelowe i akcje.
  • Elementy docelowe plików są obsługiwane w usłudze Azure Blob Storage, ponieważ nie masz dostępu do podstawowych dysków systemu operacyjnego.
  • W przypadku usługi SQL Managed Instance dodawane są pewne określone zdarzenia, które mogą śledzić zdarzenia specyficzne dla zarządzania i wykonywania wystąpienia.

Do tworzenia i uruchamiania sesji można użyć programu SSMS lub języka T-SQL. Za pomocą programu SSMS można wyświetlić dane docelowe rozszerzonej sesji zdarzeń lub funkcję sys.fn_xe_file_target_read_filesystemową . Możliwość wyświetlania danych na żywo przez program SSMS jest obsługiwana w przypadku programu SQL Server i usługi Azure SQL Managed Instance.

Scenariusze wydajności dla usługi Azure SQL

Aby zdecydować, jak zastosować narzędzia oraz możliwości monitorowania i rozwiązywania problemów z wydajnością, należy przyjrzeć się wydajności usługi Azure SQL za pomocą scenariuszy.

Typowe scenariusze wydajności

Typową techniką rozwiązywania problemów z wydajnością programu SQL Server jest sprawdzenie, czy problem z wydajnością to Uruchomiono (wysokie użycie procesora CPU) lub Oczekiwanie (oczekiwanie na zasób). Na poniższym diagramie przedstawiono drzewo decyzyjne służące do określenia, czy problem z wydajnością programu SQL Server dotyczy uruchomienia, czy oczekiwania, oraz jak używać narzędzi wydajności do określenia przyczyny i rozwiązania.

Diagram porównania Uruchamianie a oczekiwanie.

Przyjrzyjmy się bliżej szczegółom każdego aspektu diagramu.

Uruchamianie a oczekiwanie

Najpierw zapoznaj się z ogólnym użyciem zasobów. W przypadku standardowego wdrożenia programu SQL Server można użyć narzędzi, takich jak monitor wydajności w systemie Windows lub w systemie Linux. W przypadku usługi Azure SQL można użyć następujących metod:

  • Witryna Azure Portal/program PowerShell/alerty

    Usługa Azure Monitor ma zintegrowane metryki umożliwiające wyświetlanie użycia zasobów dla usługi Azure SQL. Możesz także skonfigurować alerty do wyszukiwania warunków użycia zasobów.

  • sys.dm_db_resource_stats

    W przypadku usługi Azure SQL Database możesz za pomocą tego dynamicznego widoku zarządzania wyświetlić użycie zasobów procesora CPU, pamięci i operacji we/wy dla wdrożenia bazy danych. Ten dynamiczny widok zarządzania wykonuje migawkę tych danych co 15 sekund.

  • sys.server_resource_stats

    Ten dynamiczny widok zarządzania zachowuje się jak element sys.dm_db_resource_stats, ale służy do wyświetlania użycia zasobów w usłudze SQL Managed Instance dla procesora CPU, pamięci i operacji We/Wy. Ten dynamiczny widok zarządzania wykonuje również migawkę co 15 sekund.

  • sys.dm_user_db_resource_governance

    W przypadku usługi Azure SQL Database ten dynamiczny widok zarządzania zwraca rzeczywiste ustawienia konfiguracji i pojemności używane przez mechanizmy nadzoru zasobów w bieżącej bazie danych lub elastycznej puli.

  • sys.dm_instance_resource_governance

    W przypadku usługi Azure SQL Managed Instance ten dynamiczny widok zarządzania zwraca podobne informacje jak sys.dm_user_db_resource_governance, ale dla bieżącego wystąpienia zarządzanego SQL.

Uruchomiono

Jeśli ustalono, że problem polega na wysokim wykorzystaniu procesora CPU, jest to scenariusz uruchomienia. Scenariusz uruchomienia może dotyczyć zapytań, które używają zasobów w ramach kompilacji lub wykonania. Dalszą analizę można przeprowadzić za pomocą następujących narzędzi:

  • Magazyn zapytań

    Używaj raportów dotyczących elementów używających największej liczby zasobów w programie SSMS, widokach wykazu magazynu zapytań lub szczegółowych informacjach o wydajności zapytań w witrynie Azure Portal (tylko usługa Azure SQL Database), aby sprawdzić, które zapytania zużywają najwięcej zasobów procesora CPU.

  • sys.dm_exec_requests

    Użyj tego dynamicznego widoku zarządzania w usłudze Azure SQL, aby uzyskać migawkę stanu aktywnych zapytań. Poszukaj zapytań ze stanem RUNNABLE i typem SOS_SCHEDULER_YIELD oczekiwania, aby sprawdzić, czy masz wystarczającą pojemność procesora CPU.

  • sys.dm_exec_query_stats

    Ten dynamiczny widok zarządzania może być używany podobnie do magazynu zapytań w celu znajdowania zapytań zużywających najwięcej zasobów. Należy jednak pamiętać, że jest on dostępny tylko dla planów zapytań, które są buforowane, a magazyn zapytań zawiera trwały historyczny rekord wydajności. Ten dynamiczny widok zarządzania umożliwia również znalezienie planu dla buforowanego zapytania.

  • sys.dm_exec_procedure_stats

    Ten dynamiczny widok zarządzania zawiera informacje podobne jak w przypadku elementu sys.dm_exec_query_stats, z wyjątkiem tego, że informacje o wydajności mogą być wyświetlane na poziomie procedury składowanej.

    Po ustaleniu, które zapytania zużywają najwięcej zasobów, może być konieczne sprawdzenie, czy zasoby procesora CPU są wystarczające dla obciążenia. Można też debugować plany zapytań za pomocą narzędzi, takich jak uproszczone profilowanie zapytań, instrukcje SET, magazyn zapytań lub rozszerzone śledzenie zdarzeń.

Oczekuje

Jeśli wydaje się, że problemem nie jest wysokie użycie zasobów procesora CPU, może to oznaczać, że problem z wydajnością dotyczy oczekiwania na zasób. Scenariusze dotyczące oczekiwania na zasoby obejmują:

  • Oczekiwanie na operacje We/Wy
  • Oczekiwanie na blokadę
  • Oczekiwanie na zatrzask
  • Limity puli buforów
  • Przydziały pamięci
  • Wykluczanie pamięci podręcznej planów

Aby przeprowadzić analizę scenariuszy oczekiwania, zazwyczaj przyjrzyj się następującym narzędziom:

  • sys.dm_os_wait_stats

    Użyj tego dynamicznego widoku zarządzania, aby wyświetlić najczęstsze typy oczekiwania dla bazy danych lub wystąpienia. Może to pomóc w wyborze następnej czynności do wykonania w zależności od typu oczekiwania.

  • sys.dm_exec_requests

    Użyj tego dynamicznego widoku zarządzania, aby znaleźć określone typy oczekiwania dla aktywnych zapytań, aby zobaczyć, na jaki zasób czeka. Może to być standardowy scenariusz blokowania czekający na blokady od innych użytkowników.

  • sys.dm_os_waiting_tasks

    Możesz użyć tego dynamicznego widoku zarządzania, aby znaleźć typy oczekiwania dla określonego zadania dla określonego zapytania, które jest obecnie wykonywane, być może, aby zobaczyć, dlaczego trwa dłużej niż normalnie. sys.dm_os_waiting_tasks zawiera statystyki oczekiwania na żywo, które sys.dm_os_wait_stats agregacji w czasie.

  • Magazyn zapytań

    Magazyn zapytań udostępnia raporty i widoki wykazu, które pokazują agregację najczęstszych typów oczekiwania w przypadku wykonania planu zapytania. Ważne jest, aby wiedzieć, że oczekiwanie procesora CPU jest równoważne problemowi dotyczącemu uruchomienia.

Napiwek

Zdarzenia rozszerzone mogą być używane w dowolnym scenariuszu uruchomienia lub oczekiwania. Aby skorzystać z tych możliwości, należy skonfigurować sesję zdarzeń rozszerzonych w celu śledzenia zapytań. Ta metoda debugowania problemu z wydajnością jest bardziej zaawansowana i może zwrócić wiele informacji w zamian za większą wydajność niż dynamiczne widoki zarządzania.

Scenariusze dotyczące usługi Azure SQL

Istnieją pewne scenariusze wydajności — zarówno uruchomienia, jak i oczekiwania — które są specyficzne dla usługi Azure SQL. Są to m.in. zarządzanie dziennikami, limity procesów roboczych, oczekiwanie podczas używania warstw krytycznych dla działania firmy i oczekiwanie na wdrożenie w ramach hiperskali.

Zarządzanie dziennikami

Usługa Azure SQL może skorzystać z funkcji zarządzania szybkością rejestrowania, aby wymusić limity zasobów w przypadku użycia dziennika transakcji. To wymuszenie może być wymagane, aby zapewnić limity zasobów i spełnić warunki umowy SLA. Zarządzanie dziennikami może być stosowane przy następujących typach oczekiwania:

  • LOG_RATE_GOVERNOR: czeka na usługę Azure SQL Database
  • POOL_LOG_RATE_GOVERNOR: czeka na pule elastyczne
  • INSTANCE_LOG_GOVERNOR: czeka na usługę Azure SQL Managed Instance
  • HADR_THROTTLE_LOG_RATE*: czeka na opóźnienie Krytyczne dla działania firmy i replikacji geograficznej

Limity procesów roboczych

Program SQL Server używa puli procesów roboczych wątków, ale ma ograniczenia dotyczące maksymalnej liczby procesów roboczych. Aplikacje z dużą liczbą współbieżnych użytkowników mogą zbliżać się do limitów procesów roboczych wymuszanych dla usług Azure SQL Database i SQL Managed Instance:

  • Usługa Azure SQL Database ma limity na podstawie rozmiaru i warstwy usługi. W przypadku przekroczenia tego limitu nowe zapytanie spowoduje wystąpienie błędu.
  • Obecnie usługa SQL Managed Instance używa metody max worker threads, więc procesy robocze, które przeszły ten limit, mogą zobaczyć THREADPOOL oczekiwania.

Oczekiwanie HADR w warstwie Krytyczne dla działania firmy

Jeśli używasz warstwy usługi Krytyczne dla działania firmy, możesz nieoczekiwanie zobaczyć następujące typy oczekiwania:

  • HADR_SYNC_COMMIT
  • HADR_DATABASE_FLOW_CONTROL
  • HADR_THROTTLE_LOG_RATE_SEND_RECV

Mimo że te typy oczekiwania mogą nie spowalniać aplikacji, są one nieoczekiwane. Zwykle są one specyficzne dla zawsze włączonej grupy dostępności. Warstwy Krytyczne dla działania firmy korzystają z technologii grupy dostępności do implementowania funkcji umowy SLA i dostępności warstwy Krytyczne dla działania firmy, więc te typy oczekiwań mogą się pojawić. Należy pamiętać, że długie czasy oczekiwania mogą oznaczać istnienie wąskiego gardła, takiego jak opóźnienie operacji We/Wy lub zaległa replika.

Hiperskala

Architektura hiperskalowania może spowodować użycie unikatowych typów oczekiwania, które są poprzedzone prefiksem RBIO (możliwe wskazanie zarządzania dziennikami). Ponadto dynamiczne widoki zarządzania, widoki wykazu i zdarzenia rozszerzone zostały ulepszone, aby wyświetlić metryki dla operacji odczytu serwera strony.

W następnym ćwiczeniu dowiesz się, jak monitorować i rozwiązywać problemy z wydajnością usługi Azure SQL przy użyciu narzędzi i wiedzy zdobytej w tej lekcji.