Dela via


Konfigurera den maximala graden av parallellitet (MAXDOP) i Azure SQL Database

Gäller för:Azure SQL Database

Den här artikeln beskriver konfigurationsinställningen max grad av parallellitet (MAXDOP) i Azure SQL Database.

Kommentar

Det här innehållet fokuserar på Azure SQL Database. Azure SQL Database baseras på den senaste stabila versionen av Microsoft SQL Server-databasmotorn, så mycket av innehållet liknar det även om felsöknings- och konfigurationsalternativen skiljer sig åt. Mer information om MAXDOP i SQL Server finns i Konfigurera den maximala graden av parallellitet serverkonfigurationsalternativ.

Översikt

MAXDOP styr parallellitet mellan frågor i databasmotorn. Högre MAXDOP-värden resulterar vanligtvis i fler parallella trådar per fråga och snabbare frågekörning.

I Azure SQL Database är MAXDOP-standardinställningen för varje ny enskild databas och elastisk pooldatabas 8. Det här standardvärdet förhindrar onödig resursanvändning, samtidigt som databasmotorn kan köra frågor snabbare med hjälp av parallella trådar. Det är vanligtvis inte nödvändigt att ytterligare konfigurera MAXDOP i Azure SQL Database-arbetsbelastningar, även om det kan ge fördelar som en avancerad prestandajusteringsövning.

Kommentar

I september 2020, baserat på år av telemetri i Azure SQL Database-tjänsten MAXDOP 8, blev standard för nya databaser, som det optimala värdet för den bredaste variationen av kundarbetsbelastningar. Den här standardinställningen hjälpte till att förhindra prestandaproblem på grund av överdriven parallellitet. Dessförinnan var standardinställningen för nya databaser MAXDOP 0. MAXDOP ändrades inte automatiskt för befintliga databaser som skapades före september 2020.

Om databasmotorn väljer att köra en fråga med parallellism går körningen normalt snabbare. Överflödig parallellism kan dock förbruka ytterligare processorresurser utan att ge bättre frågeprestanda. I stor skala kan överflödig parallellism påverka frågeprestanda negativt för alla frågor som körs i samma instans av databasmotorn. Traditionellt har inställningen av en övre gräns för parallellitet varit en vanlig prestandajusteringsövning i SQL Server-arbetsbelastningar.

I följande tabell beskrivs hur databasmotorn fungerar när du kör frågor med olika MAXDOP-värden:

MAXDOP Funktionssätt
= 1 Databasmotorn använder en enda serietråd för att köra frågor. Parallella trådar används inte.
> 1 Databasmotorn anger antalet ytterligare schemaläggare som ska användas av parallella trådar till MAXDOP-värdet, eller det totala antalet logiska processorer, beroende på vilket som är mindre.
= 0 Databasmotorn anger antalet ytterligare schemaläggare som ska användas av parallella trådar till det totala antalet logiska processorer eller 64, beroende på vilket som är mindre.

Kommentar

Varje fråga körs med minst en schemaläggare och en arbetstråd i schemaläggaren.

En fråga som körs med parallellitet använder ytterligare schemaläggare och ytterligare parallella trådar. Eftersom flera parallella trådar kan köras på samma schemaläggare kan det totala antalet trådar som används för att köra en fråga vara högre än det angivna MAXDOP-värdet eller det totala antalet logiska processorer. Mer information finns i Schemalägga parallella aktiviteter.

Överväganden

  • I Azure SQL Database kan du ändra standardvärdet för MAXDOP:

  • Långvariga överväganden och rekommendationer för SQL Server MAXDOP gäller för Azure SQL Database.

  • Indexåtgärder som skapar eller återskapar ett index, eller som släpper ett klustrat index, kan vara resursintensiva. Du kan åsidosätta databasens MAXDOP-värde för indexåtgärder genom att ange alternativet MAXDOP-index i -instruktionen CREATE INDEX eller ALTER INDEX . MAXDOP-värdet tillämpas på -instruktionen vid körningstillfället och lagras inte i indexmetadata. Mer information finns i Konfigurera parallella indexåtgärder.

  • Förutom frågor och indexåtgärder styr konfigurationsalternativet för databasomfattning för MAXDOP även parallellitet för andra instruktioner som kan använda parallell körning, till exempel DBCC CHECKTABLE, DBCC CHECKDB och DBCC CHECKFILEGROUP.

Rekommendationer

Att ändra MAXDOP för databasen kan ha stor inverkan på frågeprestanda och resursanvändning, både positiva och negativa. Det finns dock inget enskilt MAXDOP-värde som är optimalt för alla arbetsbelastningar. Rekommendationerna för att ange MAXDOP är nyanserade och beror på många faktorer.

Vissa högsta samtidiga arbetsbelastningar kan fungera bättre med en annan MAXDOP än andra. En korrekt konfigurerad MAXDOP bör minska risken för prestanda- och tillgänglighetsincidenter och i vissa fall minska kostnaderna genom att kunna undvika onödig resursanvändning och därmed skala ned till ett lägre tjänstmål.

Överdriven parallellitet

En högre MAXDOP minskar ofta varaktigheten för CPU-intensiva frågor. Överdriven parallellitet kan dock försämra andra samtidiga arbetsbelastningsprestanda genom att svälta andra frågor om PROCESSOR- och arbetstrådsresurser. I extrema fall kan överdriven parallellitet förbruka alla databasresurser eller elastiska poolresurser, vilket orsakar tidsgränser för frågor, fel och programfel.

Dricks

Vi rekommenderar att kunderna undviker att ange MAXDOP till 0 även om det inte verkar orsaka problem för närvarande.

Överdriven parallellitet blir mest problematisk när det finns fler samtidiga begäranden än vad som kan stödjas av processor- och arbetstrådsresurserna som tillhandahålls av tjänstmålet. Undvik MAXDOP 0 för att minska risken för potentiella framtida problem på grund av överdriven parallellitet om en databas skalas upp, eller om framtida maskinvarukonfigurationer i Azure SQL Database ger fler kärnor för samma databastjänstmål.

Ändra MAXDOP

Om du bedömer att en MAXDOP-inställning som skiljer sig från standardinställningen är optimal för din Azure SQL Database-arbetsbelastning kan du använda T-SQL-instruktionen ALTER DATABASE SCOPED CONFIGURATION . Exempel finns i avsnittet Exempel med Transact-SQL nedan. Om du vill ändra MAXDOP till ett icke-standardvärde för varje ny databas som du skapar lägger du till det här steget i databasdistributionsprocessen.

Om MAXDOP som inte är standard endast gynnar en liten delmängd frågor i arbetsbelastningen kan du åsidosätta MAXDOP på frågenivå genom att lägga till tipset ALTERNATIV (MAXDOP). Exempel finns i avsnittet Exempel med Transact-SQL nedan.

Testa dina MAXDOP-konfigurationsändringar noggrant med belastningstestning med realistiska samtidiga frågebelastningar.

MAXDOP för de primära och sekundära replikerna kan konfigureras separat om olika MAXDOP-inställningar är optimala för skrivskyddade och skrivskyddade arbetsbelastningar. Detta gäller för azure SQL Database-utskalning, geo-replikering och sekundära hyperskalarepliker. Som standard ärver alla sekundära repliker MAXDOP-konfigurationen för den primära repliken.

Säkerhet

Behörigheter

-instruktionen ALTER DATABASE SCOPED CONFIGURATION måste köras som serveradministratör, som medlem i databasrollen db_ownereller som en användare som har beviljats behörigheten ALTER ANY DATABASE SCOPED CONFIGURATION .

Exempel

I de här exemplen används den senaste AdventureWorksLT exempeldatabasen SAMPLE när alternativet väljs för en ny enkel databas med Azure SQL Database.

PowerShell

KONFIGURATION AV MAXDOP-databasomfattning

Det här exemplet visar hur du använder ALTER DATABASE SCOPED CONFIGURATION-instruktionen för att ange konfigurationen MAXDOP till 2. Inställningen börjar gälla omedelbart för nya frågor. PowerShell-cmdleten Invoke-SqlCmd kör de T-SQL-frågor som ska anges och returnerar konfigurationen för MAXDOP-databasens omfattning.

$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

Det här exemplet är till för användning med Azure SQL Databases med skrivskyddade skalbara repliker aktiverade, geo-replikering och sekundära Azure SQL Database Hyperscale-repliker. Till exempel är den primära repliken inställd på ett annat MAXDOP-standardvärde som den sekundära repliken, vilket förväntar sig att det kan finnas skillnader mellan en skrivskyddad och skrivskyddad arbetsbelastning.

$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

Du kan använda Azure-portalens frågeredigerare, SQL Server Management Studio (SSMS) eller Azure Data Studio för att köra T-SQL-frågor mot din Azure SQL Database.

  1. Öppna ett nytt frågefönster.

  2. Anslut till databasen där du vill ändra MAXDOP. Du kan inte ändra databasomfattande konfigurationer i master databasen.

  3. Kopiera och klistra in följande exempel i frågefönstret och välj Kör.

KONFIGURATION AV MAXDOP-databasomfattning

Det här exemplet visar hur du fastställer den aktuella databasens MAXDOP-databasomfattning med hjälp av sys.database_scoped_configurations systemkatalogvyn.

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

Det här exemplet visar hur du använder ALTER DATABASE SCOPED CONFIGURATION-instruktionen för att ange konfigurationen MAXDOP till 8. Inställningen utförs direkt.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;

Det här exemplet är till för användning med Azure SQL Databases med läsbara skalbara repliker aktiverade, geo-replikering och sekundära hyperskalarepliker . Som ett exempel är den primära repliken inställd på en annan MAXDOP än den sekundära repliken, vilket förväntar sig att det kan finnas skillnader mellan skrivskyddade och skrivskyddade arbetsbelastningar. Alla instruktioner körs på den primära repliken. Kolumnen value_for_secondary innehåller sys.database_scoped_configurations inställningar för den sekundära repliken.

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-frågetips

Det här exemplet visar hur du kör en fråga med hjälp av frågetipset max degree of parallelism för att tvinga till 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

MAXDOP-indexalternativ

Det här exemplet visar hur du återskapar ett index med hjälp av indexalternativet för att tvinga max degree of parallelism till 12.

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

Se även

Nästa steg