Diagnozowanie i rozwiązywanie problemów z wysokim wykorzystaniem procesora CPU w usłudze Azure SQL Database

Dotyczy:Azure SQL Database

Usługa Azure SQL Database udostępnia wbudowane narzędzia do identyfikowania przyczyn wysokiego użycia procesora CPU i optymalizacji wydajności obciążenia. Za pomocą tych narzędzi można rozwiązywać problemy z wysokim użyciem procesora CPU podczas jego występowania lub reaktywnie po zakończeniu zdarzenia. Możesz również włączyć automatyczne dostrajanie , aby aktywnie zmniejszyć użycie procesora CPU w czasie dla bazy danych. W tym artykule opisano, jak diagnozować i rozwiązywać problemy z wysokim użyciem procesora CPU za pomocą wbudowanych narzędzi w usłudze Azure SQL Database i wyjaśniono , kiedy dodać zasoby procesora CPU.

Omówienie liczby rdzeni wirtualnych

Warto zrozumieć liczbę rdzeni wirtualnych (rdzeni wirtualnych) dostępnych dla bazy danych podczas diagnozowania wysokiego incydentu procesora CPU. Rdzeń wirtualny jest odpowiednikiem logicznego procesora CPU. Liczba rdzeni wirtualnych pomaga zrozumieć zasoby procesora CPU dostępne dla bazy danych.

Identyfikowanie liczby rdzeni wirtualnych w witrynie Azure Portal

Możesz szybko zidentyfikować liczbę rdzeni wirtualnych dla bazy danych w witrynie Azure Portal, jeśli używasz warstwy usługi opartej na rdzeniach wirtualnych z aprowizowaną warstwą obliczeniową. W takim przypadku warstwa cenowa wymieniona dla bazy danych na stronie Przegląd będzie zawierać liczbę rdzeni wirtualnych. Na przykład warstwa cenowa bazy danych może mieć wartość "Ogólnego przeznaczenia: Standardowa seria (Gen5), 16 rdzeni wirtualnych".

W przypadku baz danych w bezserwerowej warstwie obliczeniowej liczba rdzeni wirtualnych będzie zawsze odpowiadać ustawieniu maksymalnego rdzenia wirtualnego dla bazy danych. Liczba rdzeni wirtualnych będzie wyświetlana w warstwie cenowej wymienionej dla bazy danych na stronie Przegląd. Na przykład warstwa cenowa bazy danych może mieć wartość "Ogólnego przeznaczenia: bezserwerowa, standardowa seria (Gen5), 16 rdzeni wirtualnych".

Jeśli używasz bazy danych w modelu zakupów opartym na jednostkach DTU, musisz użyć języka Transact-SQL, aby wykonać zapytanie dotyczące liczby rdzeni wirtualnych bazy danych.

Identyfikowanie liczby rdzeni wirtualnych za pomocą języka Transact-SQL

Bieżącą liczbę rdzeni wirtualnych dla dowolnej bazy danych można zidentyfikować za pomocą języka Transact-SQL. Język Transact-SQL można uruchamiać w usłudze Azure SQL Database za pomocą programu SQL Server Management Studio (SSMS), narzędzia Azure Data Studio lub edytora zapytań w witrynie Azure Portal.

Połączenie do bazy danych i uruchom następujące zapytanie:

SELECT 
    COUNT(*) as vCores
FROM sys.dm_os_schedulers
WHERE status = N'VISIBLE ONLINE';
GO

Identyfikowanie przyczyn wysokiego użycia procesora CPU

Wykorzystanie procesora CPU można mierzyć i analizować przy użyciu witryny Azure Portal, interaktywnych narzędzi magazynu zapytań w programie SSMS i zapytań języka Transact-SQL w programie SSMS i narzędziu Azure Data Studio.

W witrynie Azure Portal i magazynie zapytań są wyświetlane statystyki wykonywania, takie jak metryki procesora CPU, dla ukończonych zapytań. Jeśli występuje bieżące wysokie zdarzenie procesora CPU, które może być spowodowane przez co najmniej jedno trwające długotrwałe zapytania, zidentyfikuj aktualnie uruchomione zapytania w języku Transact-SQL.

Typowe przyczyny nowego i nietypowego wysokiego wykorzystania procesora CPU to:

  • Nowe zapytania w obciążeniu, które używają dużej ilości procesora CPU.
  • Zwiększenie częstotliwości regularnego uruchamiania zapytań.
  • Regresja planu zapytań, w tym regresja spowodowana problemami z planem poufnym parametrów (PSP), co powoduje, że co najmniej jedno zapytanie zużywa więcej procesora CPU.
  • Znaczny wzrost kompilacji lub ponownej kompilacji planów zapytań.
  • Bazy danych, w których zapytania korzystają z nadmiernego równoległości.

Aby zrozumieć, co powoduje wysokie zdarzenie procesora CPU, zidentyfikuj, kiedy wysokie wykorzystanie procesora CPU występuje w bazie danych i najwięcej zapytań przy użyciu procesora CPU w tym czasie.

Zbadać:

Uwaga

Usługa Azure SQL Database wymaga zasobów obliczeniowych w celu zaimplementowania podstawowych funkcji usługi, takich jak wysoka dostępność i odzyskiwanie po awarii, tworzenie kopii zapasowych i przywracanie bazy danych, monitorowanie, magazyn zapytań, automatyczne dostrajanie itp. Użycie tych zasobów obliczeniowych może być szczególnie zauważalne w bazach danych z małą liczbą rdzeni wirtualnych lub bazami danych w gęstych elastycznych pulach. Dowiedz się więcej w artykule Zarządzanie zasobami w usłudze Azure SQL Database.

Użyj witryny Azure Portal, aby śledzić różne metryki procesora CPU, w tym procent dostępnego procesora CPU używanego przez bazę danych w czasie. Witryna Azure Portal łączy metryki procesora CPU z informacjami z magazynu zapytań bazy danych, co umożliwia określenie, które zapytania zużywały procesor CPU w bazie danych w danym momencie.

Wykonaj następujące kroki, aby znaleźć metryki procentowe procesora CPU.

  1. Przejdź do bazy danych w witrynie Azure Portal.
  2. W obszarze Inteligentna wydajność w menu po lewej stronie wybierz pozycję Szczegółowe informacje o wydajności zapytań.

Widok domyślny szczegółowych informacji o wydajności zapytań przedstawia 24 godziny danych. Użycie procesora CPU jest wyświetlane jako procent całkowitego dostępnego procesora CPU używanego dla bazy danych.

Pięć pierwszych zapytań uruchomionych w tym okresie jest wyświetlanych na pionowych słupkach powyżej wykresu użycia procesora CPU. Wybierz przedział czasu na wykresie lub użyj menu Dostosuj , aby eksplorować określone okresy. Możesz również zwiększyć liczbę wyświetlanych zapytań.

Screenshot shows Query Performance Insight in the Azure portal.

Wybierz każdy identyfikator zapytania z wysokim użyciem procesora CPU, aby otworzyć szczegóły zapytania. Szczegóły obejmują tekst zapytania wraz z historią wydajności zapytania. Sprawdź, czy procesor CPU został ostatnio zwiększony dla zapytania.

Zanotuj identyfikator zapytania, aby dokładniej zbadać plan zapytania przy użyciu magazynu zapytań w poniższej sekcji.

Przeglądanie planów zapytań dotyczących najważniejszych zapytań zidentyfikowanych w witrynie Azure Portal

Wykonaj następujące kroki, aby użyć identyfikatora zapytania w interaktywnych narzędziach magazynu zapytań programu SSMS w celu zbadania planu wykonywania zapytania w czasie.

  1. Otwórz program SSMS.
  2. Połączenie do usługi Azure SQL Database w Eksplorator obiektów.
  3. Rozwiń węzeł bazy danych w Eksplorator obiektów.
  4. Rozwiń folder Magazyn zapytań.
  5. Otwórz okienko Śledzone zapytania.
  6. Wprowadź identyfikator zapytania w polu zapytanie Śledzenie w lewym górnym rogu ekranu i naciśnij klawisz Enter.
  7. W razie potrzeby wybierz pozycję Konfiguruj , aby dostosować interwał czasu, aby dopasować go do czasu wystąpienia wysokiego użycia procesora CPU.

Na stronie zostaną wyświetlone plany wykonania i powiązane metryki dla zapytania w ciągu ostatnich 24 godzin.

Identyfikowanie aktualnie uruchomionych zapytań za pomocą języka Transact-SQL

Język Transact-SQL umożliwia identyfikowanie aktualnie uruchomionych zapytań z czasem użycia procesora CPU do tej pory. Możesz również użyć języka Transact-SQL do wykonywania zapytań dotyczących ostatniego użycia procesora CPU w bazie danych, najważniejszych zapytań według procesora CPU i zapytań, które zostały skompilowane najczęściej.

Metryki procesora CPU można wykonywać za pomocą programu SQL Server Management Studio (SSMS), narzędzia Azure Data Studio lub edytora zapytań witryny Azure Portal. W przypadku korzystania z programu SSMS lub narzędzia Azure Data Studio otwórz nowe okno zapytania i połącz je z bazą danych (a nie z bazą master danych).

Znajdź obecnie uruchomione zapytania z użyciem procesora CPU i planami wykonywania, wykonując następujące zapytanie. Czas procesora CPU jest zwracany w milisekundach.

SELECT
    req.session_id,
    req.status,
    req.start_time,
    req.cpu_time AS 'cpu_time_ms',
    req.logical_reads,
    req.dop,
    s.login_name,
    s.host_name,
    s.program_name,
    object_name(st.objectid,st.dbid) 'ObjectName',
    REPLACE (REPLACE (SUBSTRING (st.text,(req.statement_start_offset/2) + 1,
        ((CASE req.statement_end_offset    WHEN -1    THEN DATALENGTH(st.text) 
        ELSE req.statement_end_offset END - req.statement_start_offset)/2) + 1),
        CHAR(10), ' '), CHAR(13), ' ') AS statement_text,
    qp.query_plan,
    qsx.query_plan as query_plan_with_in_flight_statistics
FROM sys.dm_exec_requests as req  
JOIN sys.dm_exec_sessions as s on req.session_id=s.session_id
CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) as st
OUTER APPLY sys.dm_exec_query_plan(req.plan_handle) as qp
OUTER APPLY sys.dm_exec_query_statistics_xml(req.session_id) as qsx
ORDER BY req.cpu_time desc;
GO

To zapytanie zwraca dwie kopie planu wykonywania. Kolumna query_plan zawiera plan wykonania z sys.dm_exec_query_plan. Ta wersja planu zapytania zawiera tylko oszacowania liczby wierszy i nie zawiera żadnych statystyk wykonywania.

Jeśli kolumna query_plan_with_in_flight_statistics zwraca plan wykonania, ten plan zawiera więcej informacji. Kolumna query_plan_with_in_flight_statistics zwraca dane z sys.dm_exec_query_statistics_xml, która zawiera statystyki wykonywania "w locie", takie jak rzeczywista liczba wierszy zwracanych do tej pory przez aktualnie uruchomione zapytanie.

Przejrzyj metryki użycia procesora CPU dla ostatniej godziny

Następujące zapytanie względem sys.dm_db_resource_stats zwraca średnie użycie procesora PRZEZ 15 sekund w około ostatniej godzinie.

SELECT
    end_time,
    avg_cpu_percent,
    avg_instance_cpu_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC; 
GO

Ważne jest, aby nie skupiać się tylko na kolumnie avg_cpu_percent . Kolumna avg_instance_cpu_percent zawiera procesor CPU używany zarówno przez obciążenia użytkownika, jak i wewnętrzne. Jeśli avg_instance_cpu_percent jest blisko 100%, zasoby procesora CPU są nasycone. W takim przypadku należy rozwiązać problemy z wysokim użyciem procesora CPU, jeśli przepływność aplikacji jest niewystarczająca lub opóźnienie zapytań jest wysokie.

Dowiedz się więcej w artykule Zarządzanie zasobami w usłudze Azure SQL Database.

Przejrzyj przykłady w sys.dm_db_resource_stats , aby uzyskać więcej zapytań.

Wykonywanie zapytań dotyczących ostatnich 15 zapytań według użycia procesora CPU

Magazyn zapytań śledzi statystyki wykonywania, w tym użycie procesora CPU, dla zapytań. Poniższe zapytanie zwraca 15 pierwszych zapytań, które zostały uruchomione w ciągu ostatnich 2 godzin, posortowane według użycia procesora CPU. Czas procesora CPU jest zwracany w milisekundach.

WITH AggregatedCPU AS 
    (SELECT
        q.query_hash, 
        SUM(count_executions * avg_cpu_time / 1000.0) AS total_cpu_ms, 
        SUM(count_executions * avg_cpu_time / 1000.0)/ SUM(count_executions) AS avg_cpu_ms, 
        MAX(rs.max_cpu_time / 1000.00) AS max_cpu_ms, 
        MAX(max_logical_io_reads) max_logical_reads, 
        COUNT(DISTINCT p.plan_id) AS number_of_distinct_plans, 
        COUNT(DISTINCT p.query_id) AS number_of_distinct_query_ids, 
        SUM(CASE WHEN rs.execution_type_desc='Aborted' THEN count_executions ELSE 0 END) AS aborted_execution_count, 
        SUM(CASE WHEN rs.execution_type_desc='Regular' THEN count_executions ELSE 0 END) AS regular_execution_count, 
        SUM(CASE WHEN rs.execution_type_desc='Exception' THEN count_executions ELSE 0 END) AS exception_execution_count, 
        SUM(count_executions) AS total_executions, 
        MIN(qt.query_sql_text) AS sampled_query_text
    FROM sys.query_store_query_text AS qt
    JOIN sys.query_store_query AS q ON qt.query_text_id=q.query_text_id
    JOIN sys.query_store_plan AS p ON q.query_id=p.query_id
    JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id=p.plan_id
    JOIN sys.query_store_runtime_stats_interval AS rsi ON rsi.runtime_stats_interval_id=rs.runtime_stats_interval_id
    WHERE 
            rs.execution_type_desc IN ('Regular', 'Aborted', 'Exception') AND 
        rsi.start_time>=DATEADD(HOUR, -2, GETUTCDATE())
     GROUP BY q.query_hash), 
OrderedCPU AS 
    (SELECT *, 
    ROW_NUMBER() OVER (ORDER BY total_cpu_ms DESC, query_hash ASC) AS RN
    FROM AggregatedCPU)
SELECT *
FROM OrderedCPU AS OD
WHERE OD.RN<=15
ORDER BY total_cpu_ms DESC;
GO

To zapytanie grupuje według skrótu wartości zapytania. Jeśli znajdziesz wysoką wartość w kolumnie number_of_distinct_query_ids , sprawdź, czy często uruchamiane zapytanie nie jest prawidłowo sparametryzowane. Zapytania niesparametryzowane mogą być kompilowane w każdym wykonaniu, co zużywa znaczne użycie procesora CPU i wpływa na wydajność magazynu zapytań.

Aby dowiedzieć się więcej na temat pojedynczego zapytania, zanotuj skrót zapytania i użyj go do identyfikowania użycia procesora CPU i planu zapytania dla danego skrótu zapytania.

Wykonywanie zapytań dotyczących najczęściej kompilowanych zapytań według skrótu zapytania

Kompilowanie planu zapytania jest procesem intensywnie korzystającym z procesora CPU. Plany pamięci podręcznej usługi Azure SQL Database w pamięci na potrzeby ponownego użycia. Niektóre zapytania mogą być często kompilowane, jeśli nie są sparametryzowane lub jeśli wskazówki RECOMPILE wymuszają ponowne kompilowanie.

Magazyn zapytań śledzi liczbę skompilowanych zapytań. Uruchom następujące zapytanie, aby zidentyfikować 20 pierwszych zapytań w magazynie zapytań według liczby kompilacji wraz ze średnią liczbą kompilacji na minutę:

SELECT TOP (20)
    query_hash,
    MIN(initial_compile_start_time) as initial_compile_start_time,
    MAX(last_compile_start_time) as last_compile_start_time,
    CASE WHEN DATEDIFF(mi,MIN(initial_compile_start_time), MAX(last_compile_start_time)) > 0
        THEN 1.* SUM(count_compiles) / DATEDIFF(mi,MIN(initial_compile_start_time), 
            MAX(last_compile_start_time)) 
        ELSE 0 
        END as avg_compiles_minute,
    SUM(count_compiles) as count_compiles
FROM sys.query_store_query AS q
GROUP BY query_hash
ORDER BY count_compiles DESC;
GO

Aby dowiedzieć się więcej na temat pojedynczego zapytania, zanotuj skrót zapytania i użyj go do identyfikowania użycia procesora CPU i planu zapytania dla danego skrótu zapytania.

Identyfikowanie użycia procesora CPU i planu zapytania dla danego skrótu zapytania

Uruchom następujące zapytanie, aby znaleźć pojedynczy identyfikator zapytania, tekst zapytania i plany wykonywania zapytań dla danego query_hashelementu . Czas procesora CPU jest zwracany w milisekundach.

Zastąp wartość zmiennej @query_hash prawidłową query_hash wartością dla obciążenia.

declare @query_hash binary(8);

SET @query_hash = 0x6557BE7936AA2E91;

with query_ids as (
    SELECT
        q.query_hash,
        q.query_id,
        p.query_plan_hash,
        SUM(qrs.count_executions) * AVG(qrs.avg_cpu_time)/1000. as total_cpu_time_ms,
        SUM(qrs.count_executions) AS sum_executions,
        AVG(qrs.avg_cpu_time)/1000. AS avg_cpu_time_ms
    FROM sys.query_store_query q
    JOIN sys.query_store_plan p on q.query_id=p.query_id
    JOIN sys.query_store_runtime_stats qrs on p.plan_id = qrs.plan_id
    WHERE q.query_hash = @query_hash
    GROUP BY q.query_id, q.query_hash, p.query_plan_hash)
SELECT qid.*,
    qt.query_sql_text,
    p.count_compiles,
    TRY_CAST(p.query_plan as XML) as query_plan
FROM query_ids as qid
JOIN sys.query_store_query AS q ON qid.query_id=q.query_id
JOIN sys.query_store_query_text AS qt on q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan AS p ON qid.query_id=p.query_id and qid.query_plan_hash=p.query_plan_hash
ORDER BY total_cpu_time_ms DESC;
GO

To zapytanie zwraca jeden wiersz dla każdej odmiany planu wykonywania dla query_hash całej historii magazynu zapytań. Wyniki są sortowane według łącznego czasu procesora CPU.

Używanie interaktywnych narzędzi magazynu zapytań do śledzenia historycznego wykorzystania procesora CPU

Jeśli wolisz używać narzędzi graficznych, wykonaj następujące kroki, aby użyć interaktywnych narzędzi magazynu zapytań w programie SSMS.

  1. Otwórz program SSMS i połącz się z bazą danych w Eksplorator obiektów.
  2. Rozwijanie węzła bazy danych w Eksplorator obiektów
  3. Rozwiń folder Magazyn zapytań.
  4. Otwórz okienko Ogólne zużycie zasobów.

Łączny czas procesora CPU dla bazy danych w ciągu ostatniego miesiąca w milisekundach jest wyświetlany w lewej dolnej części okienka. W widoku domyślnym czas procesora CPU jest agregowany według dnia.

Screenshot shows the Overall Resource Consumption view of Query Store in SSMS.

Wybierz pozycję Konfiguruj w prawym górnym rogu okienka, aby wybrać inny okres. Możesz również zmienić jednostkę agregacji. Możesz na przykład wyświetlić dane dla określonego zakresu dat i zagregować dane według godziny.

Używanie interaktywnych narzędzi magazynu zapytań do identyfikowania najważniejszych zapytań według czasu procesora CPU

Wybierz słupek na wykresie, aby przejść do szczegółów i wyświetlić zapytania uruchomione w określonym przedziale czasu. Zostanie otwarte okienko Zapytania zużywające najwięcej zasobów. Alternatywnie możesz otworzyć zapytania zużywające najwięcej zasobów w węźle Magazyn zapytań w bazie danych w Eksplorator obiektów bezpośrednio.

Screenshot shows the Top Resource Consuming Queries pane for Query Store in S S M S.

W widoku domyślnym okienko Zapytania zużywające najwięcej zasobów zawiera zapytania według czasu trwania (ms). Czas trwania może czasami być krótszy niż czas procesora CPU: zapytania korzystające z równoległości mogą używać znacznie więcej czasu procesora CPU niż ich całkowity czas trwania. Czas trwania może być również wyższy niż czas oczekiwania, jeśli czas oczekiwania jest znaczący. Aby wyświetlić zapytania według czasu procesora CPU, wybierz listę rozwijaną Metryka w lewym górnym rogu okienka i wybierz pozycję Czas procesora CPU (ms).

Każdy pasek w lewym górnym ćwiartce reprezentuje zapytanie. Wybierz pasek, aby wyświetlić szczegóły dla tego zapytania. Prawa górna ćwiartka ekranu pokazuje, ile planów wykonywania znajduje się w magazynie zapytań dla tego zapytania i mapuje je zgodnie z ich wykonaniem i ile zostało użyte wybranej metryki. Wybierz każdy identyfikator planu, aby kontrolować, który plan wykonywania zapytania jest wyświetlany w dolnej połowie ekranu.

Uwaga

Aby zapoznać się z przewodnikiem interpretowania widoków magazynu zapytań i kształtów wyświetlanych w widoku Wierzchołki odbiorcy zasobów, zobacz Najlepsze rozwiązania dotyczące magazynu zapytań

Zmniejszanie użycia procesora CPU

Część rozwiązywania problemów powinna zawierać więcej informacji na temat zapytań zidentyfikowanych w poprzedniej sekcji. Użycie procesora CPU można zmniejszyć, dostrajając indeksy, modyfikując wzorce aplikacji, dostrajając zapytania i dostosowując ustawienia związane z procesorem CPU dla bazy danych.

Rozważ następujące strategie w tej sekcji.

Zmniejszanie użycia procesora CPU za pomocą automatycznego dostrajania indeksu

Efektywne dostrajanie indeksu zmniejsza użycie procesora CPU dla wielu zapytań. Zoptymalizowane indeksy zmniejszają liczbę odczytów logicznych i fizycznych dla zapytania, co często powoduje, że zapytanie musi wykonać mniej pracy.

Usługa Azure SQL Database oferuje automatyczne zarządzanie indeksami dla obciążeń w replikach podstawowych. Automatyczne zarządzanie indeksami używa uczenia maszynowego do monitorowania obciążenia i optymalizowania indeksów nieklastrowanych na dyskach magazynu wierszy dla bazy danych.

Przejrzyj zalecenia dotyczące wydajności, w tym zalecenia dotyczące indeksu, w witrynie Azure Portal. Te zalecenia można zastosować ręcznie lub włączyć opcję automatycznego dostrajania CREATE INDEX, aby utworzyć i zweryfikować wydajność nowych indeksów w bazie danych.

Zmniejszanie użycia procesora CPU przy użyciu automatycznej korekty planu (wymuszanie planu)

Inną częstą przyczyną dużych zdarzeń procesora CPU jest regresja wyboru planu wykonywania. Usługa Azure SQL Database oferuje opcję automatycznego dostrajania planu wymuszania w celu identyfikowania regresji w planach wykonywania zapytań w obciążeniach w replikach podstawowych. Po włączeniu tej funkcji automatycznego dostrajania usługa Azure SQL Database będzie testowana, jeśli wymuszanie planu wykonywania zapytań spowoduje uzyskanie niezawodnej lepszej wydajności zapytań w przypadku regresji planu wykonywania.

Jeśli baza danych została utworzona po marcu 2020 r., opcja automatycznego dostrajania planu wymuszania została automatycznie włączona. Jeśli baza danych została utworzona przed tym czasem, możesz włączyć opcję automatycznego dostrajania planu siły.

Ręczne dostrajanie indeksów

Użyj metod opisanych w artykule Identyfikowanie przyczyn wysokiego użycia procesora CPU w celu identyfikowania planów zapytań dotyczących najważniejszych zapytań zużywających procesor CPU. Te plany wykonywania ułatwią identyfikowanie i dodawanie indeksów nieklastrowanych w celu przyspieszenia zapytań.

Każdy indeks nieklastrowany na dysku w bazie danych wymaga miejsca do magazynowania i musi być utrzymywany przez aparat SQL. Zmodyfikuj istniejące indeksy zamiast dodawać nowe indeksy, jeśli to możliwe, i upewnij się, że nowe indeksy pomyślnie zmniejszają użycie procesora CPU. Aby zapoznać się z omówieniem indeksów nieklastrowanych, zobacz Nonclustered Index Design Guidelines (Wytyczne dotyczące projektowania indeksów nieklastrowanych).

W przypadku niektórych obciążeń indeksy magazynu kolumn mogą być najlepszym wyborem, aby zmniejszyć użycie procesora CPU częstych zapytań odczytu. Zobacz Indeksy magazynu kolumn — wskazówki dotyczące projektowania, aby uzyskać ogólne zalecenia dotyczące scenariuszy, w których indeksy magazynu kolumn mogą być odpowiednie.

Dostrajanie ustawień aplikacji, zapytań i bazy danych

Podczas badania najważniejszych zapytań można znaleźć antywzorzec aplikacji, takie jak zachowanie "czatty", obciążenia, które mogą korzystać z fragmentowania i nieoptymalnego projektu dostępu do bazy danych. W przypadku obciążeń z dużym obciążeniem odczytu rozważ użycie replik tylko do odczytu w celu odciążenia obciążeń zapytań tylko do odczytu i buforowania warstwy aplikacji jako długoterminowych strategii skalowania często odczytywanych danych.

Możesz również ręcznie dostosować górny procesor przy użyciu zapytań zidentyfikowanych w obciążeniu. Opcje dostrajania ręcznego obejmują ponowne zapisywanie instrukcji Języka Transact-SQL, wymuszanie planów w magazynie zapytań i stosowanie wskazówek dotyczących zapytań.

Jeśli zidentyfikujesz przypadki, w których zapytania czasami używają planu wykonania, który nie jest optymalny dla wydajności, zapoznaj się z rozwiązaniami w zapytaniach z problemami z planem poufnym parametru (PSP)

Jeśli zidentyfikujesz zapytania niesparametryzowane z dużą liczbą planów, rozważ sparametryzowanie tych zapytań, upewniając się, że w pełni zadeklarować typy danych parametrów, w tym długość i precyzja. Może to być wykonywane przez zmodyfikowanie zapytań, utworzenie przewodnika planu w celu wymuszenia parametryzacji określonego zapytania lub włączenie wymuszonej parametryzacji na poziomie bazy danych.

Jeśli zidentyfikujesz zapytania o wysokich współczynnikach kompilacji, zidentyfikuj, co powoduje częstą kompilację. Najczęstszą przyczyną częstej kompilacji są wskazówki RECOMPILE. Jeśli to możliwe, zidentyfikuj RECOMPILE , kiedy dodano wskazówkę i jaki problem miał rozwiązać. Sprawdź, czy można zaimplementować alternatywne rozwiązanie dostrajania wydajności w celu zapewnienia spójnej wydajności dla często uruchomionych zapytań bez RECOMPILE wskazówki.

Zmniejszanie użycia procesora CPU przez dostrajanie maksymalnego stopnia równoległości

Ustawienie maksymalnego stopnia równoległości (MAXDOP) steruje równoległością wewnątrz zapytania w aucie bazy danych. Wyższe wartości MAXDOP zazwyczaj powodują więcej równoległych wątków na zapytanie i szybsze wykonywanie zapytań.

W niektórych przypadkach duża liczba równoległych zapytań uruchomionych współbieżnie może spowolnić obciążenie i spowodować wysokie użycie procesora CPU. Nadmierne równoległość najprawdopodobniej występuje w bazach danych z dużą liczbą rdzeni wirtualnych, w których parametr MAXDOP jest ustawiony na dużą liczbę lub zero. Gdy parametr MAXDOP jest ustawiony na zero, aparat bazy danych ustawia liczbę harmonogramów używanych przez wątki równoległe do łącznej liczby rdzeni logicznych lub 64, w zależności od tego, która z nich jest mniejsza.

Możesz zidentyfikować maksymalny stopień równoległości dla bazy danych za pomocą języka Transact-SQL. Połączenie do bazy danych za pomocą programu SSMS lub narzędzia Azure Data Studio i uruchom następujące zapytanie:

SELECT 
    name, 
    value, 
    value_for_secondary, 
    is_value_default 
FROM sys.database_scoped_configurations
WHERE name=N'MAXDOP';
GO

Rozważ eksperymentowanie z małymi zmianami w konfiguracji MAXDOP na poziomie bazy danych lub zmodyfikowanie pojedynczych problematycznych zapytań w celu użycia niezdefiniowanego elementu MAXDOP przy użyciu wskazówki zapytania. Aby uzyskać więcej informacji, zobacz przykłady dotyczące konfigurowania maksymalnego stopnia równoległości.

Kiedy dodać zasoby procesora CPU

Może się okazać, że zapytania i indeksy obciążenia są prawidłowo dostrojone lub że dostrajanie wydajności wymaga zmian, których nie można wprowadzić w krótkim okresie z powodu procesów wewnętrznych lub innych powodów. Dodanie większej liczby zasobów procesora CPU może być korzystne dla tych baz danych. Zasoby bazy danych można skalować z minimalnym przestojem.

Więcej zasobów procesora CPU można dodać do usługi Azure SQL Database, konfigurując liczbę rdzeni wirtualnych lub konfigurację sprzętu dla baz danych przy użyciu modelu zakupów rdzeni wirtualnych.

W modelu zakupów opartym na jednostkach DTU możesz podnieść warstwę usługi i zwiększyć liczbę jednostek transakcji bazy danych (DTU). Jednostka DTU reprezentuje mieszaną miarę procesora CPU, pamięci, odczytów i zapisów. Jedną z zalet modelu zakupów rdzeni wirtualnych jest to, że umożliwia bardziej szczegółową kontrolę nad używanym sprzętem i liczbą rdzeni wirtualnych. Usługę Azure SQL Database można migrować z modelu opartego na jednostkach DTU do modelu opartego na rdzeniach wirtualnych, aby przejść między modelami zakupów.

Dowiedz się więcej o monitorowaniu i dostrajaniu wydajności usługi Azure SQL Database w następujących artykułach: