Diagnozowanie i rozwiązywanie problemów z wysokim użyciem procesora CPU w usłudze Azure SQL Database i bazie danych SQL Database w usłudze Microsoft Fabric
Dotyczy: Baza danych SQL Usługi Azure SQL Database w sieci szkieletowej
Usługi Azure SQL Database i SQL Database w usłudze Fabric udostępniają 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łącz się z bazą 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.
Badać:
- Czy w obciążeniu pojawiają się nowe zapytania używające znaczącego procesora CPU, czy też występuje wzrost częstotliwości regularnego uruchamiania zapytań? Użyj dowolnej z poniższych metod do zbadania. Poszukaj zapytań z ograniczoną historią (nowe zapytania) i z częstotliwością wykonywania zapytań z dłuższą historią.
- Przeglądanie metryk procesora CPU i powiązanych najważniejszych zapytań w witrynie Azure Portal
- Wykonaj zapytanie dotyczące ostatnich 15 zapytań według użycia procesora CPU za pomocą języka Transact-SQL.
- Używanie interaktywnych narzędzi magazynu zapytań w programie SSMS do identyfikowania najważniejszych zapytań według czasu procesora CPU
- Czy niektóre zapytania w obciążeniu korzystają z większej ilości procesora CPU na wykonanie niż w przeszłości? Jeśli tak, czy plan wykonywania zapytania został zmieniony? Te zapytania mogą mieć problemy z planem poufnym parametrów (PSP). Aby zbadać jedną z poniższych technik, użyj jednej z poniższych technik. Poszukaj zapytań z wieloma planami wykonywania zapytań ze znaczną różnicą użycia procesora CPU:
- Czy istnieją dowody na dużą ilość kompilacji lub ponownej kompilacji? Wykonaj zapytanie dotyczące najczęściej kompilowanych zapytań według skrótu zapytania i sprawdź, jak często są kompilowane.
- Czy zapytania korzystają z nadmiernego równoległości? Wykonaj zapytanie dotyczące konfiguracji o zakresie bazy danych MAXDOP i przejrzyj liczbę rdzeni wirtualnych. Nadmierne równoległość często występuje w bazach danych, w których parametr MAXDOP jest ustawiony na
0
wartość z liczbą rdzeni wirtualnych większą niż osiem.
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.
Przeglądanie metryk użycia procesora CPU i powiązanych najważniejszych zapytań w witrynie Azure Portal
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.
- Przejdź do bazy danych w witrynie Azure Portal.
- 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ń.
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.
- Otwórz program SSMS.
- Nawiąż połączenie z usługą Azure SQL Database w Eksplorator obiektów.
- Rozwiń węzeł bazy danych w Eksplorator obiektów.
- Rozwiń folder Magazyn zapytań.
- Otwórz okienko Śledzone zapytania.
- Wprowadź identyfikator zapytania w polu zapytanie Śledzenie w lewym górnym rogu ekranu i naciśnij Enter.
- 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_hash
elementu . 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.
- Otwórz program SSMS i połącz się z bazą danych w Eksplorator obiektów.
- Rozwijanie węzła bazy danych w Eksplorator obiektów
- Rozwiń folder Magazyn zapytań.
- 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.
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.
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.
- Jeśli w obciążeniu znaleziono nowe zapytania używające znaczącego procesora CPU, sprawdź, czy indeksy zostały zoptymalizowane pod kątem tych zapytań. Indeksy można dostroić ręcznie lub zmniejszyć użycie procesora ZA pomocą automatycznego dostrajania indeksów. Oceń, czy maksymalne ustawienie równoległości jest poprawne dla zwiększonego obciążenia.
- Jeśli okaże się, że ogólna liczba wykonań zapytań jest wyższa niż kiedyś, dostrajaj indeksy dla zapytań zużywających najwyższy procesor CPU i rozważ automatyczne dostrajanie indeksów. Oceń, czy maksymalne ustawienie równoległości jest poprawne dla zwiększonego obciążenia.
- Jeśli w obciążeniu znaleziono zapytania z problemami z planem poufnym parametrów (PSP), rozważ automatyczną korektę planu (plan force). Możesz również ręcznie wymusić plan w magazynie zapytań lub dostroić transact-SQL, aby zapytanie spowodowało spójne planowanie zapytań o wysokiej wydajności.
- Jeśli znaleziono dowody na to, że występuje duża ilość kompilacji lub ponownej kompilacji, dostosuj zapytania tak, aby były one prawidłowo sparametryzowane lub nie wymagają wskazówek ponownego kompilowania.
- Jeśli okaże się, że zapytania korzystają z nadmiernego równoległości, dostosuj maksymalny stopień równoległości.
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łącz się z bazą danych przy użyciu 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.
Powiązana zawartość
Dowiedz się więcej o monitorowaniu i dostrajaniu wydajności usługi Azure SQL Database w następujących artykułach:
- Monitorowanie wydajności usług Azure SQL Database i Azure SQL Managed Instance przy użyciu dynamicznych widoków zarządzania
- Architektura i przewodnik projektowania indeksu programu SQL Server
- Włączanie automatycznego dostrajania w witrynie Azure Portal w celu monitorowania zapytań i zwiększania wydajności obciążeń
- Przewodnik po architekturze przetwarzania zapytań
- Najlepsze rozwiązania dotyczące magazynu zapytań
- Wykrywalne typy wąskich gardeł wydajności zapytań w usłudze Azure SQL Database
- Analizowanie i zapobieganie zakleszczeniom w usłudze Azure SQL Database