De maximale mate van parallellisme (MAXDOP) in Azure SQL Database configureren

Van toepassing op: Azure SQL Database

In dit artikel wordt de configuratie-instelling voor maximale mate van parallelle uitvoering (MAXDOP) in Azure SQL Database beschreven.

Notitie

Deze inhoud is gericht op Azure SQL Database. Azure SQL Database is gebaseerd op de nieuwste stabiele versie van de Microsoft SQL Server-database-engine, dus veel van de inhoud is vergelijkbaar, hoewel probleemoplossing en configuratieopties verschillen. Zie De maximale mate van parallellismeserverconfiguratie configureren voor meer informatie over MAXDOP in SQL Server.

Overzicht

MAXDOP bepaalt parallellisme binnen query's in de database-engine. Hogere MAXDOP-waarden leiden doorgaans tot meer parallelle threads per query en snellere uitvoering van query's.

In Azure SQL Database is de standaard MAXDOP-instelling voor elke nieuwe individuele database en elastische pooldatabase 8. Deze standaardinstelling voorkomt onnodig resourcegebruik, terwijl de database-engine nog steeds query's sneller kan uitvoeren met behulp van parallelle threads. Het is doorgaans niet nodig om MAXDOP verder te configureren in Azure SQL Database-workloads, maar het kan voordelen bieden als een geavanceerde oefening voor het afstemmen van prestaties.

Notitie

In september 2020 werd op basis van jaren telemetrie in de Azure SQL Database-service MAXDOP 8 de standaardwaarde voor nieuwe databases gemaakt, als de optimale waarde voor de breedste verscheidenheid aan klantworkloads. Deze standaardinstelling heeft bijgedragen aan het voorkomen van prestatieproblemen vanwege overmatige parallelle uitvoering. Voorheen was de standaardinstelling voor nieuwe databases MAXDOP 0. MAXDOP is niet automatisch gewijzigd voor bestaande databases die vóór september 2020 zijn gemaakt.

Als de database-engine ervoor kiest om een query uit te voeren met behulp van parallelle uitvoering, is de uitvoeringstijd over het algemeen sneller. Overmatige parallelle uitvoering kan echter extra processorbronnen verbruiken zonder de queryprestaties te verbeteren. Op schaal kan overmatige parallelle uitvoering een negatieve invloed hebben op de queryprestaties voor alle query's die worden uitgevoerd op hetzelfde exemplaar van de database-engine. Normaal gesproken is het instellen van een bovengrens voor parallelle uitvoering een veelvoorkomende oefening voor het afstemmen van prestaties in SQL Server-workloads.

In de volgende tabel wordt het gedrag van de database-engine beschreven bij het uitvoeren van query's met verschillende MAXDOP-waarden:

MAXDOP Gedrag
= 1 De database-engine gebruikt één seriële thread om query's uit te voeren. Parallelle threads worden niet gebruikt.
> 1 De database-engine stelt het aantal extra planners in dat door parallelle threads moet worden gebruikt voor de MAXDOP-waarde of het totale aantal logische processors, afhankelijk van wat kleiner is.
= 0 De database-engine stelt het aantal extra planners in dat door parallelle threads moet worden gebruikt voor het totale aantal logische processors of 64, afhankelijk van wat kleiner is.

Notitie

Elke query wordt uitgevoerd met ten minste één planner en één werkthread op die planner.

Een query die wordt uitgevoerd met parallellisme, maakt gebruik van extra schedulers en aanvullende parallelle threads. Omdat meerdere parallelle threads op dezelfde scheduler kunnen worden uitgevoerd, kan het totale aantal threads dat wordt gebruikt voor het uitvoeren van een query hoger zijn dan de opgegeven MAXDOP-waarde of het totale aantal logische processors. Zie Parallelle taken plannen voor meer informatie.

Overwegingen

  • In Azure SQL Database kunt u de standaardWAARDE MAXDOP wijzigen:

    • Gebruik op queryniveau de hint voor MAXDOP-query's.
    • Gebruik op databaseniveau de configuratie van het bereik van de MAXDOP-database.
  • Langetermijnoverwegingen en aanbevelingen voor SQL Server MAXDOP zijn van toepassing op Azure SQL Database.

  • Indexbewerkingen die een index maken of herbouwen, of die een geclusterde index verwijderen, kunnen resource-intensief zijn. U kunt de maxDOP-databasewaarde voor indexbewerkingen overschrijven door de optie MAXDOP-index in de of-instructie CREATE INDEXALTER INDEX op te geven. De MAXDOP-waarde wordt tijdens de uitvoering toegepast op de instructie en wordt niet opgeslagen in de metagegevens van de index. Zie Parallelle indexbewerkingen configureren voor meer informatie.

  • Naast query's en indexbewerkingen bepaalt de configuratieoptie voor databasebereik voor MAXDOP ook parallelle uitvoering van andere instructies die parallelle uitvoering kunnen gebruiken, zoals DBCC CHECKTABLE, DBCC CHECKDB en DBCC CHECKFILEGROUP.

Aanbevelingen

Het wijzigen van MAXDOP voor de database kan grote gevolgen hebben voor queryprestaties en resourcegebruik, zowel positief als negatief. Er is echter geen enkele MAXDOP-waarde die optimaal is voor alle workloads. De aanbevelingen voor het instellen van MAXDOP zijn genuanceerd en zijn afhankelijk van veel factoren.

Sommige pieken in gelijktijdige workloads werken mogelijk beter met een andere MAXDOP dan andere. Een correct geconfigureerde MAXDOP moet het risico op prestatie- en beschikbaarheidsincidenten verminderen en in sommige gevallen kosten verlagen door onnodig resourcegebruik te voorkomen en zo omlaag te schalen naar een lagere servicedoelstelling.

Overmatige parallelle uitvoering

Een hogere MAXDOP vermindert vaak de duur van CPU-intensieve query's. Overmatige parallelle uitvoering kan echter andere gelijktijdige workloadprestaties verergeren door andere query's van CPU- en werkthreadresources te verhongeren. In extreme gevallen kan overmatig parallellisme alle database- of elastische poolresources verbruiken, waardoor querytime-outs, fouten en toepassingsstoringen optreden.

Fooi

We raden klanten aan om MAXDOP niet in te stellen op 0, zelfs als het momenteel geen problemen lijkt te veroorzaken.

Overmatige parallelle uitvoering wordt het meest problematisch wanneer er meer gelijktijdige aanvragen zijn dan kan worden ondersteund door de CPU- en werkthreadresources die worden geleverd door de servicedoelstelling. Vermijd MAXDOP 0 om het risico op toekomstige problemen te verminderen als gevolg van overmatige parallelle uitvoering als een database omhoog wordt geschaald of als toekomstige hardwareconfiguraties in Azure SQL Database meer kernen bieden voor dezelfde databaseservicedoelstelling.

MAXDOP wijzigen

Als u bepaalt dat een MAXDOP-instelling anders is dan de standaardinstelling optimaal is voor uw Azure SQL Database-workload, kunt u de ALTER DATABASE SCOPED CONFIGURATION T-SQL-instructie gebruiken. Zie de onderstaande sectie Voorbeelden met behulp van Transact-SQL voor voorbeelden. Als u MAXDOP wilt wijzigen in een niet-standaardwaarde voor elke nieuwe database die u maakt, voegt u deze stap toe aan uw database-implementatieproces.

Als niet-standaard MAXDOP slechts een kleine subset van query's in de workload oplevert, kunt u MAXDOP op queryniveau overschrijven door de HINT OPTION (MAXDOP) toe te voegen. Zie de onderstaande sectie Voorbeelden met behulp van Transact-SQL voor voorbeelden.

Test uw MAXDOP-configuratiewijzigingen grondig met belastingstests met realistische gelijktijdige querybelastingen.

MAXDOP voor de primaire en secundaire replica's kan onafhankelijk worden geconfigureerd als verschillende MAXDOP-instellingen optimaal zijn voor uw alleen-lezen-schrijven- en alleen-lezenworkloads. Dit geldt voor azure SQL Database voor uitschalen, geo-replicatie en secundaire replica's van Hyperscale . Standaard nemen alle secundaire replica's de MAXDOP-configuratie van de primaire replica over.

Beveiliging

Bevoegdheden

De ALTER DATABASE SCOPED CONFIGURATION instructie moet worden uitgevoerd als serverbeheerder, als lid van de databaserol db_owner, of als een gebruiker waaraan de ALTER ANY DATABASE SCOPED CONFIGURATION machtiging is verleend.

Voorbeelden

In deze voorbeelden wordt de meest recente AdventureWorksLT voorbeelddatabase gebruikt wanneer de SAMPLE optie wordt gekozen voor een nieuwe individuele database van Azure SQL Database.

PowerShell

Configuratie van MAXDOP-databasebereik

In dit voorbeeld ziet u hoe u de instructie ALTER DATABASE SCOPED CONFIGURATION gebruikt om de MAXDOP configuratie in te stellen op 2. De instelling wordt onmiddellijk van kracht voor nieuwe query's. Met de PowerShell-cmdlet Invoke-SqlCmd worden de T-SQL-query's uitgevoerd die moeten worden ingesteld en de maxDOP-databaseconfiguratie geretourneerd.

$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

Dit voorbeeld is bedoeld voor gebruik met Azure SQL Databases met uitgeschaalde replica's voor lezen, geo-replicatie en secundaire replica's van Azure SQL Database Hyperscale. De primaire replica is bijvoorbeeld ingesteld op een andere standaard MAXDOP als secundaire replica, waarbij wordt verwacht dat er mogelijk verschillen zijn tussen een lees-/schrijfbewerking en een alleen-lezen workload.

$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

U kunt de Azure Portal-queryeditor, SQL Server Management Studio (SSMS) of Azure Data Studio gebruiken om T-SQL-query's uit te voeren op uw Azure SQL Database.

  1. Open een nieuw queryvenster.

  2. Verbinding maken naar de database waar u MAXDOP wilt wijzigen. U kunt geen configuraties met databasebereik in de master database wijzigen.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer Uitvoeren.

Configuratie van MAXDOP-databasebereik

In dit voorbeeld ziet u hoe u de huidige configuratie van de MAXDOP-databasebereik kunt bepalen met behulp van de sys.database_scoped_configurations systeemcatalogusweergave.

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

In dit voorbeeld ziet u hoe u de instructie ALTER DATABASE SCOPED CONFIGURATION gebruikt om de MAXDOP configuratie in te stellen op 8. De instelling wordt onmiddellijk van kracht.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;

Dit voorbeeld is bedoeld voor gebruik met Azure SQL Databases met uitgeschaalde replica's voor lezen, geo-replicatie en secundaire Hyperscale-replica's. De primaire replica is bijvoorbeeld ingesteld op een andere MAXDOP dan de secundaire replica, waarbij wordt verwacht dat er mogelijk verschillen zijn tussen de workloads alleen-lezen en alleen-lezen. Alle instructies worden uitgevoerd op de primaire replica. De value_for_secondary kolom van de sys.database_scoped_configurations lijst bevat instellingen voor de secundaire replica.

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-queryhint

In dit voorbeeld ziet u hoe u een query uitvoert met behulp van de queryhint om de max degree of parallelism opdracht af te 2dwingen.

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-indexoptie

In dit voorbeeld ziet u hoe u een index herbouwt met behulp van de indexoptie om de max degree of parallelism index af te 12dwingen.

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

Zie ook

Volgende stappen