Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:Azure SQL-Datenbank
SQL-Datenbank in Fabric
In diesem Artikel wird die Konfigurationseinstellung Max. Grad an Parallelität (max degree of parallelism, MAXDOP) in Azure SQL-Datenbank beschrieben.
Hinweis
Der folgende Inhalt konzentriert sich auf Azure SQL-Datenbank. Weil Azure SQL-Datenbank auf der letzten stabilen Version der Microsoft SQL Server-Datenbank-Engine basiert, sind die Inhalte größtenteils ähnlich. Allerdings kann es Unterschiede bei den Problembehandlungs- und Konfigurationsoptionen geben. Weitere Informationen zu MAXDOP in SQL Server finden Sie unter Konfigurieren der Serverkonfigurationsoption „Max. Grad an Parallelität“.
Durch MAXDOP wird die abfrageinterne Parallelität in der Datenbank-Engine gesteuert. Höhere MAXDOP-Werte führen in der Regel zu mehr parallelen Threads pro Abfrage und zu einer schnelleren Abfrageausführung.
In Azure SQL-Datenbank ist die Standardeinstellung „MAXDOP“ für jede neue Einzeldatenbank (Singleton) und jeden neuen Pool für elastische Datenbanken auf „8“ festgelegt. Diese Standardeinstellung verhindert eine unnötige Ressourcenverwendung und ermöglicht gleichzeitig die schnellere Ausführung von Abfragen durch die Datenbank-Engine dank paralleler Threads. Es ist in der Regel nicht erforderlich, MAXDOP in Azure SQL-Datenbankworkloads weiter zu konfigurieren, obwohl es vorteile als erweiterte Leistungsoptimierungsübung bietet.
Hinweis
Im September 2020 wurde nach jahrelanger Telemetrienutzung im Azure SQL-Datenbank-Dienst „MAXDOP 8“ als Standardwert für neue Datenbanken festgelegt, da es sich hierbei um den optimalen Wert für verschiedenste Kundenworkloads handelt. Diese Standardeinstellung hat zur Vermeidung von Leistungsproblemen aufgrund von übermäßiger Parallelität beigetragen. Zuvor war MAXDOP 0
die Standardeinstellung für neue Datenbanken . MAXDOP wurde bei Datenbanken, die vor September 2020 erstellt wurden, nicht automatisch geändert.
Im Allgemeinen ist die Ausführungszeit schneller, wenn die Datenbank-Engine die Ausführung einer Abfrage mit Parallelität auswählt. Allerdings kann übermäßige Parallelität zusätzliche Prozessorressourcen beanspruchen, ohne die Abfrageleistung zu verbessern. Im großen Stil kann sich übermäßige Parallelität negativ auf die Leistung aller Abfragen auswirken, die in der gleichen Datenbank-Engine-Instanz ausgeführt werden. Daher ist das Festlegen einer Obergrenze für die Parallelität eine gängige Leistungsoptimierung in SQL Server-Workloads.
In der folgenden Tabelle wird das Verhalten der Datenbank-Engine bei der Ausführung von Abfragen mit verschiedenen MAXDOP-Werten beschrieben:
MAXDOP | Verhalten |
---|---|
= 1 |
Abfragen werden von der Datenbank-Engine in einem einzelnen seriellen Thread ausgeführt. Es werden keine parallelen Threads verwendet. |
> 1 |
Von der Datenbank-Engine wird die Anzahl zusätzlicher Planer, die von parallelen Threads verwendet werden sollen, auf den MAXDOP-Wert oder auf die Gesamtanzahl logischer Prozessoren festgelegt (je nachdem, welcher Wert kleiner ist). |
= 0 |
Von der Datenbank-Engine wird die Anzahl zusätzlicher Planer, die von parallelen Threads verwendet werden sollen, auf die Gesamtanzahl logischer Prozessoren oder auf „64“ festgelegt (je nachdem, welcher Wert kleiner ist). |
Hinweis
Jede Abfrage wird mit mindestens einem Planer und einem Arbeitsthread für diesen Planer ausgeführt.
Bei einer mit Parallelität ausgeführten Abfrage werden zusätzliche Planer und zusätzliche parallele Threads verwendet. Da mehrere parallele Threads möglicherweise auf demselben Zeitplan ausgeführt werden, kann die Gesamtanzahl der Threads, die zum Ausführen einer Abfrage verwendet werden, höher als der angegebene MAXDOP-Wert oder die Gesamtanzahl der logischen Prozessoren sein. Weitere Informationen finden Sie unter Planen von parallelen Tasks.
Überlegungen
In Azure SQL-Datenbank können Sie den MAXDOP-Standardwert ändern:
Überlegungen und Empfehlungen für einen langfristigen SQL Server-MAXDOP-Wert gelten für Azure SQL-Datenbank.
Indizierungsoperationen, bei denen ein Index erstellt oder neu aufgebaut wird bzw. an deren Ende ein gruppierter Index steht, können ressourcenintensiv sein. Sie können den MAXDOP-Wert der Datenbank für Indexvorgänge außer Kraft setzen, indem Sie die MAXDOP-Indexoption in der Anweisung
CREATE INDEX
oderALTER INDEX
angeben. Der Wert MAXDOP wird zur Ausführungszeit auf die Anweisung angewendet und wird nicht in den Metadaten für den Index gespeichert. Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.Zusätzlich zu Abfragen und Indexvorgängen steuert die Datenbankbereichskonfigurationsoption für MAXDOP auch die Parallelität anderer Anweisungen, die eine parallele Ausführung verwenden können, wie z. B.
DBCC CHECKTABLE
,DBCC CHECKDB
undDBCC CHECKFILEGROUP
.
Empfehlungen
Das Ändern von MAXDOP für die Datenbank kann sich auf die Abfrageleistung und die Ressourcenverwendung erheblich auswirken – sowohl positiv als auch negativ. Es gibt jedoch keinen einzelnen MAXDOP-Wert, der für alle Workloads optimal ist. Die Empfehlungen zum Festlegen von MAXDOP sind differenziert und hängen von zahlreichen Faktoren ab.
Einige parallele Workloads mit Spitzenwerten arbeiten möglicherweise besser mit einem anderen MAXDOP als andere. Ein ordnungsgemäß konfigurierter MAXDOP sollte das Risiko von Leistungs- und Verfügbarkeitsvorfällen verringern, und in einigen Fällen können Kosten reduziert werden, indem unnötige Ressourcenauslastung vermieden werden kann und somit auf ein niedrigeres Dienstziel herabgesetzt wird.
Übermäßige Parallelität
Ein höherer MAXDOP-Wert verkürzt oft die Dauer für CPU-intensive Abfragen. Übermäßige Parallelität kann jedoch die Leistung anderer gleichzeitiger Workloads verschlechtern, indem andere Abfragen der CPU- und Arbeitsthreadressourcen „verhungern“. In Extremfällen kann eine übermäßige Parallelität sämtliche Ressourcen der Datenbank oder des Pools für elastische Datenbanken verbrauchen, wodurch Abfragetimeouts, Fehler und Anwendungsausfälle verursacht werden.
Tipp
Kunden sollten den MAXDOP-Wert „0“ auch dann vermeiden, wenn er aktuell offenbar keine Probleme verursacht.
Übermäßige Parallelität wird äußerst problematisch, wenn mehr gleichzeitige Anforderungen vorhanden sind, als von den durch das Dienstziel bereitgestellten CPU- und Arbeitsthreadressourcen bewältigt werden können. Vermeiden Sie MAXDOP 0
, um das Risiko potenzieller zukünftiger Probleme aufgrund übermäßiger Parallelität zu verringern, wenn eine Datenbank hochskaliert wird oder wenn künftige Hardwarekonfigurationen in der Azure SQL-Datenbank mehr Kerne für dasselbe Dienstziel der Datenbank bereitstellen.
MAXDOP ändern
Falls für Ihre Azure SQL-Datenbank-Workload eine andere MAXDOP-Einstellung als die Standardeinstellung optimal ist, können Sie die T-SQL-Anweisung ALTER DATABASE SCOPED CONFIGURATION
verwenden. Beispiele dazu finden Sie unten im Abschnitt Beispiele zur Verwendung von Transact-SQL. Wenn MAXDOP für jede neu erstellte Datenbank auf einen anderen Wert als den Standardwert festgelegt werden soll, fügen Sie diesen Schritt Ihrem Datenbankbereitstellungsprozess hinzu.
Wenn ein nicht standardmäßiger MAXDOP nur für eine kleine Untermenge von Abfragen im Workload von Vorteil ist, können Sie MAXDOP auf der Abfrageebene überschreiben, indem Sie den OPTION (MAXDOP)
-Hinweis hinzufügen. Beispiele finden Sie unter Beispiele mit Transact-SQL.
Testen Sie Ihre MAXDOP-Konfigurationsänderungen gründlich mit Auslastungstests, die realistische gleichzeitige Abfragelasten umfassen.
Der MAXDOP-Wert für das primäre und das sekundäre Replikat kann unabhängig konfiguriert werden, falls für Ihre Workloads mit Lese-/Schreibzugriff und Ihre schreibgeschützten Workloads jeweils unterschiedliche MAXDOP-Einstellungen optimal sind. Dies gilt für die sekundären Repliken von Azure SQL Database Lesen skalieren, Geo-Replikation und Hyperscale Dienst. Standardmäßig erben alle sekundären Replikate die MAXDOP-Konfiguration des primären Replikats.
Berechtigungen
Die Anweisung ALTER DATABASE SCOPED CONFIGURATION
muss als Serveradministrator, als Mitglied der Datenbankrolle db_owner
oder als Benutzer, dem die Berechtigung ALTER ANY DATABASE SCOPED CONFIGURATION
erteilt wurde, ausgeführt werden.
Beispiele
In diesen Beispielen wird die neueste AdventureWorksLT
Beispieldatenbank verwendet, wenn die Option SAMPLE
für eine neue Einzeldatenbank von Azure SQL-Datenbank ausgewählt wird.
PowerShell
Datenbankbezogene MAXDOP-Konfiguration
In diesem Beispiel wird gezeigt, wie die Anweisung ALTER DATABASE SCOPED CONFIGURATION verwendet wird, um die Konfiguration MAXDOP
auf 2
festzulegen. Die Einstellung wird für neue Abfragen sofort wirksam. Das PowerShell-Cmdlet Invoke-SqlCmd führt die T-SQL-Abfragen aus, um die datenbankbezogene MAXDOP-Konfiguration festzulegen und dann zurückzugeben.
$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
Dieses Beispiel ist zur Verwendung bei Azure SQL-Datenbanken mit aktivierten Replikaten für horizontale Leseskalierung, Georeplikation und sekundären Replikaten für Hyperscale in Azure SQL-Datenbank vorgesehen. Ein Beispiel: Das primäre Replikat ist auf einen anderen Standard-MAXDOP festgelegt als das sekundäre Replikat, da es Unterschiede zwischen einem schreibgeschützten und einem lesenden Workload geben kann.
$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
Sie können den Azure-Portalabfrage-Editor für Azure SQL-Datenbank, SQL Server Management Studio (SSMS) oder Azure Data Studio verwenden, um T-SQL-Abfragen für Ihre Azure SQL-Datenbank auszuführen.
Öffnen Sie ein neues Abfragefenster.
Stellen Sie eine Verbindung mit der Datenbank her, in der Sie MAXDOP ändern möchten. Datenbankbezogene Konfigurationen können nicht in der
master
-Datenbank geändert werden.Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.
Datenbankbezogene MAXDOP-Konfiguration
In diesem Beispiel wird gezeigt, wie die aktuelle datenbankbezogene MAXDOP-Datenbankkonfiguration mithilfe der Systemkatalogsicht sys.database_scoped_configurations ermittelt wird.
SELECT [value] FROM sys.database_scoped_configurations WHERE [name] = 'MAXDOP';
In diesem Beispiel wird gezeigt, wie die Anweisung ALTER DATABASE SCOPED CONFIGURATION verwendet wird, um die Konfiguration MAXDOP
auf 8
festzulegen. Die Einstellung wird sofort wirksam.
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;
Dieses Beispiel ist für die Verwendung mit Azure SQL-Datenbank-Instanzen mit aktivierten Replikaten für horizontale Leseskalierung, Georeplikation und sekundären Replikaten für Hyperscale konzipiert. Das primäre Replikat wird beispielsweise auf einen anderen MAXDOP als das sekundäre Replikat festgelegt, da es Unterschiede zwischen einem schreibgeschützten und einem schreibgeschützten Workload geben kann. Alle Anweisungen werden für das primäre Replikat ausgeführt. Die Spalte value_for_secondary
von sys.database_scoped_configurations
enthält Einstellungen für das sekundäre Replikat.
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';
MAXDOP-Abfragehinweis
In diesem Beispiel wird gezeigt, wie eine Abfrage mithilfe des Abfragehinweises ausgeführt wird, um für max degree of parallelism
den Wert 2
zu erzwingen.
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
MAXDOP-Indexoption
Dieses Beispiel zeigt, wie Sie einen Index mithilfe der Indexoption neu erstellen, um für max degree of parallelism
den Wert 12
zu erzwingen.
ALTER INDEX ALL ON SalesLT.SalesOrderDetail
REBUILD WITH
( MAXDOP = 12
, SORT_IN_TEMPDB = ON
, ONLINE = ON);