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:
- På frågenivå använder du MAXDOP-frågetipset.
- På databasnivå använder du konfigurationen för MAXDOP-databasomfattning.
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
ellerALTER 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_owner
eller 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.
Öppna ett nytt frågefönster.
Anslut till databasen där du vill ändra MAXDOP. Du kan inte ändra databasomfattande konfigurationer i
master
databasen.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
- ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)
- sys.database_scoped_configurations (Transact-SQL)
- Konfigurera parallella indexåtgärder
- Frågetips (Transact-SQL)
- Ange indexalternativ
- Förstå och lösa blockeringsproblem i Azure SQL Database