Konfigurowanie maksymalnego stopnia równoległości (MAXDOP) w usłudze Azure SQL Database

Dotyczy:Azure SQL Database

W tym artykule opisano maksymalne ustawienie konfiguracji równoległości (MAXDOP) w usłudze Azure SQL Database.

Uwaga

Ta zawartość koncentruje się na usłudze Azure SQL Database. Usługa Azure SQL Database jest oparta na najnowszej stabilnej wersji aparatu bazy danych programu Microsoft SQL Server, więc większość zawartości jest podobna, chociaż opcje rozwiązywania problemów i konfiguracji różnią się. Aby uzyskać więcej informacji na temat opcji MAXDOP w programie SQL Server, zobacz Konfigurowanie maksymalnego stopnia równoległości Opcji konfiguracji serwera.

Omówienie

Funkcja MAXDOP kontroluje równoległość wewnątrz zapytań 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 usłudze Azure SQL Database domyślne ustawienie MAXDOP dla każdej nowej pojedynczej bazy danych i bazy danych z pulą elastyczną wynosi 8. Ta wartość domyślna uniemożliwia niepotrzebne wykorzystanie zasobów, jednocześnie umożliwiając aparatowi bazy danych szybsze wykonywanie zapytań przy użyciu wątków równoległych. Zwykle nie jest konieczne dalsze konfigurowanie opcji MAXDOP w obciążeniach usługi Azure SQL Database, chociaż może to zapewnić korzyści jako zaawansowane ćwiczenie dostrajania wydajności.

Uwaga

We wrześniu 2020 r. w oparciu o lata telemetrii w usłudze Azure SQL Database MAXDOP 8 wprowadzono wartość domyślną dla nowych baz danych jako optymalną wartość dla najszerszej gamy obciążeń klientów. To ustawienie domyślne pomogło zapobiec problemom z wydajnością z powodu nadmiernego równoległości. Wcześniej domyślne ustawienie dla nowych baz danych to MAXDOP 0. Ustawienie MAXDOP nie zostało automatycznie zmienione dla istniejących baz danych utworzonych przed wrześniem 2020 r.

Ogólnie rzecz biorąc, jeśli aparat bazy danych decyduje się wykonać zapytanie przy użyciu równoległości, czas wykonywania jest krótszy. Jednak nadmierna równoległość może zużywać dodatkowe zasoby procesora bez zwiększania wydajności zapytań. Na dużą skalę nadmierna równoległość może negatywnie wpłynąć na wydajność zapytań dla wszystkich zapytań wykonywanych w tym samym wystąpieniu aparatu bazy danych. Tradycyjnie ustawienie górnej granicy równoległości było typowym ćwiczeniem dostrajania wydajności w obciążeniach programu SQL Server.

W poniższej tabeli opisano zachowanie aparatu bazy danych podczas wykonywania zapytań z różnymi wartościami MAXDOP:

MAXDOP Zachowanie
= 1 Aparat bazy danych używa pojedynczego wątku szeregowego do wykonywania zapytań. Wątki równoległe nie są używane.
> 1 Aparat bazy danych ustawia liczbę dodatkowych harmonogramów używanych przez wątki równoległe do wartości MAXDOP lub łączną liczbę procesorów logicznych, w zależności od tego, która z nich jest mniejsza.
= 0 Aparat bazy danych ustawia liczbę dodatkowych harmonogramów używanych przez wątki równoległe do całkowitej liczby procesorów logicznych lub 64, w zależności od tego, która z nich jest mniejsza.

Uwaga

Każde zapytanie wykonuje co najmniej jeden harmonogram i jeden wątek procesu roboczego w tym harmonogramie.

Zapytanie wykonywane z równoległością używa dodatkowych harmonogramów i dodatkowych wątków równoległych. Ponieważ wiele równoległych wątków może być wykonywanych w tym samym harmonogramie, łączna liczba wątków używanych do wykonywania zapytania może być wyższa niż określona wartość MAXDOP lub całkowita liczba procesorów logicznych. Aby uzyskać więcej informacji, zobacz Planowanie zadań równoległych.

Kwestie wymagające rozważenia

  • W usłudze Azure SQL Database możesz zmienić domyślną wartość MAXDOP:

    • Na poziomie zapytania przy użyciu wskazówki zapytania MAXDOP.
    • Na poziomie bazy danych przy użyciu konfiguracji o zakresie bazy danych MAXDOP.
  • Długotrwałe zagadnienia i zalecenia dotyczące funkcji MAXDOP programu SQL Server mają zastosowanie do usługi Azure SQL Database.

  • Operacje indeksowania, które tworzą lub ponownie kompilują indeks lub które upuszczają indeks klastrowany, mogą intensywnie obciążać zasoby. Wartość MAXDOP bazy danych można zastąpić dla operacji indeksowania, określając opcję indeksu MAXDOP w instrukcji CREATE INDEX or ALTER INDEX . Wartość MAXDOP jest stosowana do instrukcji w czasie wykonywania i nie jest przechowywana w metadanych indeksu. Aby uzyskać więcej informacji, zobacz Konfigurowanie operacji indeksu równoległego.

  • Oprócz zapytań i operacji indeksowania opcja konfiguracji w zakresie bazy danych DLA MAXDOP kontroluje również równoległość innych instrukcji, które mogą używać wykonywania równoległego, takich jak DBCC CHECKTABLE, DBCC CHECKDB i DBCC CHECKFILEGROUP.

Zalecenia

Zmiana parametru MAXDOP dla bazy danych może mieć duży wpływ na wydajność zapytań i wykorzystanie zasobów, zarówno dodatnie, jak i negatywne. Nie ma jednak żadnej pojedynczej wartości MAXDOP, która jest optymalna dla wszystkich obciążeń. Zalecenia dotyczące ustawiania opcji MAXDOP są zniuansowane i zależą od wielu czynników.

Niektóre szczytowe obciążenia współbieżne mogą działać lepiej z innym parametrem MAXDOP niż inne. Prawidłowo skonfigurowany parametr MAXDOP powinien zmniejszyć ryzyko wystąpienia zdarzeń związanych z wydajnością i dostępnością, a w niektórych przypadkach może zmniejszyć koszty, umożliwiając uniknięcie niepotrzebnego wykorzystania zasobów, a tym samym skalowanie w dół do niższego celu usługi.

Nadmierny równoległość

Wyższy parametr MAXDOP często skraca czas trwania zapytań intensywnie korzystających z procesora CPU. Jednak nadmierna równoległość może pogorszyć wydajność innych współbieżnych obciążeń, głodując inne zapytania dotyczące zasobów procesora CPU i wątku roboczego. W skrajnych przypadkach nadmierna równoległość może zużywać wszystkie zasoby bazy danych lub elastycznej puli, powodując przekroczenia limitu czasu zapytania, błędów i awarii aplikacji.

Napiwek

Zalecamy, aby klienci unikali ustawiania wartości MAXDOP na 0, nawet jeśli obecnie nie powoduje to problemów.

Nadmierne równoległość staje się najbardziej problematyczne, gdy istnieje więcej współbieżnych żądań, niż mogą być obsługiwane przez zasoby procesora CPU i wątku roboczego udostępniane przez cel usługi. Unikaj opcji MAXDOP 0, aby zmniejszyć ryzyko potencjalnych przyszłych problemów z powodu nadmiernego równoległości, jeśli baza danych jest skalowana w górę, lub jeśli przyszłe konfiguracje sprzętowe w usłudze Azure SQL Database zapewniają więcej rdzeni dla tego samego celu usługi bazy danych.

Modyfikowanie opcji MAXDOP

Jeśli ustalisz, że ustawienie MAXDOP inne niż domyślne jest optymalne dla obciążenia usługi Azure SQL Database, możesz użyć ALTER DATABASE SCOPED CONFIGURATION instrukcji T-SQL. Przykłady można znaleźć w poniższej sekcji Przykłady przy użyciu języka Transact-SQL . Aby zmienić parametr MAXDOP na wartość inną niż domyślna dla każdej utworzonej nowej bazy danych, dodaj ten krok do procesu wdrażania bazy danych.

Jeśli wartość MAXDOP nie jest domyślna, tylko niewielki podzbiór zapytań w obciążeniu, można zastąpić parametr MAXDOP na poziomie zapytania, dodając wskazówkę OPTION (MAXDOP). Przykłady można znaleźć w poniższej sekcji Przykłady przy użyciu języka Transact-SQL .

Dokładnie przetestuj zmiany konfiguracji MAXDOP przy użyciu testowania obciążenia obejmującego realistyczne współbieżne obciążenia zapytań.

Ustawienie MAXDOP dla replik podstawowych i pomocniczych można skonfigurować niezależnie, jeśli dla obciążeń tylko do odczytu i odczytu optymalne są różne ustawienia MAXDOP. Dotyczy to replik pomocniczych skalowanych w poziomie, replikacji geograficznej i replik pomocniczych w warstwie Hiperskala . Domyślnie wszystkie repliki pomocnicze dziedziczą konfigurację MAXDOP repliki podstawowej.

Zabezpieczenia

Uprawnienia

Instrukcja ALTER DATABASE SCOPED CONFIGURATION musi być wykonywana jako administrator serwera, jako członek roli db_ownerbazy danych lub użytkownik, któremu udzielono ALTER ANY DATABASE SCOPED CONFIGURATION uprawnień.

Przykłady

W tych przykładach użyto najnowszej AdventureWorksLT przykładowej bazy danych, gdy SAMPLE opcja zostanie wybrana dla nowej pojedynczej bazy danych usługi Azure SQL Database.

PowerShell

Konfiguracja o zakresie bazy danych MAXDOP

W tym przykładzie pokazano, jak użyć instrukcji ALTER DATABASE SCOPED CONFIGURATION , aby ustawić konfigurację MAXDOP na 2. Ustawienie zostanie zastosowane natychmiast dla nowych zapytań. Polecenie cmdlet programu PowerShell Invoke-SqlCmd wykonuje zapytania T-SQL, aby ustawić i zwrócić konfigurację w zakresie bazy danych MAXDOP.

$dbName = "sample" 
$serverName = <server name here>
$serveradminLogin = <login here>
$serveradminPassword = <password here>
$desiredMAXDOP = 8

$params = @{
    'database' = $dbName
    'serverInstance' =  $serverName
    'username' = $serveradminLogin
    'password' = $serveradminPassword
    'outputSqlErrors' = $true
    'query' = 'ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = ' + $desiredMAXDOP + ';
     SELECT [value] FROM sys.database_scoped_configurations WHERE [name] = ''MAXDOP'';'
  }
  Invoke-SqlCmd @params

Ten przykład jest używany z bazami danych Azure SQL Database z replikami skalowalnymi w poziomie do odczytu, replikacją geograficzną i replikami pomocniczymi hiperskala usługi Azure SQL Database. Na przykład replika podstawowa jest ustawiona na inną domyślną wartość MAXDOP jako replikę pomocniczą, przewidując, że mogą istnieć różnice między obciążeniem tylko do odczytu i odczytu.

$dbName = "sample" 
$serverName = <server name here>
$serveradminLogin = <login here>
$serveradminPassword = <password here>
$desiredMAXDOP_primary = 8
$desiredMAXDOP_secondary_readonly = 1
 
$params = @{
    'database' = $dbName
    'serverInstance' =  $serverName
    'username' = $serveradminLogin
    'password' = $serveradminPassword
    'outputSqlErrors' = $true
    'query' = 'ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = ' + $desiredMAXDOP_primary + ';
    ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = ' + $desiredMAXDOP_secondary_readonly + ';
    SELECT [value], value_for_secondary FROM sys.database_scoped_configurations WHERE [name] = ''MAXDOP'';'
  }
  Invoke-SqlCmd @params

Transact-SQL

Edytor zapytań w witrynie Azure Portal, program SQL Server Management Studio (SSMS) lub program Azure Data Studio umożliwia wykonywanie zapytań T-SQL względem usługi Azure SQL Database.

  1. Otwórz nowe okno zapytania.

  2. Połączenie do bazy danych, w której chcesz zmienić parametr MAXDOP. Nie można zmienić konfiguracji o określonym zakresie bazy danych w master bazie danych.

  3. Skopiuj i wklej poniższy przykład w oknie zapytania, a następnie wybierz pozycję Wykonaj.

Konfiguracja o zakresie bazy danych MAXDOP

W tym przykładzie pokazano, jak określić bieżącą konfigurację bazy danych MAXDOP w zakresie bazy danych przy użyciu widoku wykazu systemu sys.database_scoped_configurations .

SELECT [value] FROM sys.database_scoped_configurations WHERE [name] = 'MAXDOP';

W tym przykładzie pokazano, jak użyć instrukcji ALTER DATABASE SCOPED CONFIGURATION , aby ustawić konfigurację MAXDOP na 8. To ustawienie jest stosowane od razu.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;

W tym przykładzie do użycia z bazami danych Azure SQL Database z włączonymi replikami skalowalnymi do odczytu, replikacją geograficzną i replikami pomocniczymi w warstwie Hiperskala . Na przykład replika podstawowa jest ustawiona na inną wartość MAXDOP niż replika pomocnicza, przewidując, że mogą istnieć różnice między obciążeniami tylko do odczytu i zapisu. Wszystkie instrukcje są wykonywane w repliki podstawowej. Kolumna value_for_secondary zawiera sys.database_scoped_configurations ustawienia repliki pomocniczej.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = 1;
SELECT [value], value_for_secondary FROM sys.database_scoped_configurations WHERE [name] = 'MAXDOP';

Wskazówka zapytania MAXDOP

W tym przykładzie pokazano, jak wykonać zapytanie przy użyciu wskazówki dotyczącej zapytania, aby wymusić max degree of parallelism2na .

SELECT ProductID, OrderQty, SUM(LineTotal) AS Total  
FROM SalesLT.SalesOrderDetail  
WHERE UnitPrice < 5  
GROUP BY ProductID, OrderQty  
ORDER BY ProductID, OrderQty  
OPTION (MAXDOP 2);    
GO

Opcja indeksu MAXDOP

W tym przykładzie pokazano, jak ponownie skompilować indeks przy użyciu opcji indeksu, aby wymusić na max degree of parallelism12.

ALTER INDEX ALL ON SalesLT.SalesOrderDetail 
REBUILD WITH 
   (     MAXDOP = 12
       , SORT_IN_TEMPDB = ON
       , ONLINE = ON);

Zobacz też

Następne kroki