Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Azure SQL Database
SQL database in Fabric
W tym artykule opisano ustawienie konfiguracji maksymalnego stopnia 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.
Funkcja MAXDOP kontroluje równoległość wewnątrz zapytań w silniku 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. Ta domyślna wartość pomogła zapobiec problemom z wydajnością z powodu nadmiernego równoległego przetwarzania. Wcześniej ustawieniem domyślnym dla nowych baz danych było 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ść wszystkich zapytań wykonywanych w tej samej instancji silnika 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 |
Silnik bazy danych ustawia liczbę dodatkowych harmonogramów używanych przez wątki równoległe na wartość MAXDOP lub łączną liczbę procesorów logicznych, w zależności od tego, która z wartości 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 się przy użyciu co najmniej jednego harmonogramu i jednego wątku roboczego działającego na 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 MAXDOPwskazówki zapytania.
- 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ć podczas operacji indeksowania, określając opcję indeksu MAXDOP w instrukcji
CREATE INDEX
lubALTER 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
iDBCC 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 program 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 dzięki możliwości uniknięcia niepotrzebnego wykorzystania zasobów, a tym samym skalowania w dół do niższego celu usługi.
Nadmierna 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ń, pozbawiając inne zapytania zasobów CPU i wątków roboczych. 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.
Nadmierna równoległość staje się najbardziej problematyczna, gdy istnieje więcej równoczesnych żądań, niż może obsłużyć procesor CPU i zasoby wątku roboczego określone przez cel usługi. Unikaj MAXDOP 0
w celu zmniejszenia ryzyka potencjalnych przyszłych problemów wynikających z nadmiernego równoległego przetwarzania, jeśli baza danych jest skalowana w górę, lub jeśli przyszłe konfiguracje sprzętowe w usłudze Azure SQL Database zapewnią więcej rdzeni dla tego samego celu działania usługi bazy danych.
Zmodyfikuj 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 różna od domyślnej przynosi korzyści tylko niewielkiemu podzbiorowi zapytań w obciążeniu, można zastąpić ustawienie MAXDOP na poziomie zapytania, dodając podpowiedź OPTION (MAXDOP)
. Przykłady można znaleźć w temacie Przykłady użycia 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ń do odczytu i odczytu-zapisu optymalne są różne ustawienia MAXDOP. Dotyczy to replik pomocniczych w Azure SQL Database skalowanie odczytu, replikacji geograficznej oraz w warstwie usługi Hyperscale. Domyślnie wszystkie repliki pomocnicze dziedziczą konfigurację MAXDOP repliki podstawowej.
Uprawnienia
Instrukcja ALTER DATABASE SCOPED CONFIGURATION
musi być wykonywana jako administrator serwera, jako członek roli db_owner
bazy 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 zostanie wybrana opcja SAMPLE
dla nowej pojedynczej bazy danych Azure SQL Database.
PowerShell
Konfiguracja zakresu 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 do odczytu z funkcją skalowalności poziomej, replikacją geograficzną i replikami drugorzędnymi Azure SQL Database Hyperscale. Na przykład replika podstawowa jest ustawiona na inną domyślną wartość MAXDOP niż replika pomocnicza, przewidując, że mogą istnieć różnice między obciążeniem do odczytu i zapisu oraz obciążeniem tylko do 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
Można użyć edytora zapytań portalu Azure dla bazy danych Azure SQL Database, SQL Server Management Studio (SSMS) lub Azure Data Studio do wykonywania zapytań T-SQL na bazie danych Azure SQL Database.
Otwórz nowe okno zapytania.
Połącz się z bazą danych, w której chcesz zmienić parametr MAXDOP. Nie można zmienić konfiguracji bazy danych o określonym zakresie w bazie danych
master
.Skopiuj i wklej poniższy przykład w oknie zapytania, a następnie wybierz pozycję Wykonaj.
Konfiguracja zakresu 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
w sys.database_scoped_configurations
zawiera 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
Ten przykład pokazuje, jak wykonać zapytanie, używając wskazówki dotyczącej kwerendy, aby wymusić max degree of parallelism
na 2
.
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 przebudować indeks z użyciem opcji indeksu, aby przekształcić max degree of parallelism
na 12
.
ALTER INDEX ALL ON SalesLT.SalesOrderDetail
REBUILD WITH
( MAXDOP = 12
, SORT_IN_TEMPDB = ON
, ONLINE = ON);
Następny krok
Treści powiązane
- ZMIEŃ KONFIGURACJĘ ZAKRESU BAZY DANYCH (Transact-SQL)
- sys.database_scoped_configurations (Transact-SQL)
- Configure Parallel Index Operations (Konfigurowanie równoległych operacji indeksowania)
- Wskazówki dotyczące zapytań (Transact-SQL)
- Ustawianie opcji indeksu
- Zrozumienie i rozwiązywanie problemów z blokowaniem