Sdílet prostřednictvím


Konfigurace maximálního stupně paralelismu (MAXDOP) v Azure SQL Database a SQL databázi ve Fabricu

Platí pro: Azure SQL DatabaseSQL databáze v Fabric

Tento článek popisuje nastavení konfigurace maximálního stupně paralelismu (MAXDOP) ve službě Azure SQL Database a databázi SQL ve Fabric.

Note

Tento obsah se zaměřuje na službu Azure SQL Database a SQL databázi v Fabric. Azure SQL Database je založená na nejnovější stabilní verzi databázového stroje Microsoft SQL Serveru, takže většina obsahu je podobná, i když se možnosti řešení potíží a konfigurace liší. Další informace o maxDOP v SQL Serveru a Azure SQL Managed Instance najdete v tématu Konfigurace maximálního stupně paralelismu Možnosti konfigurace serveru.

MAXDOP řídí paralelismus uvnitř dotazu v databázovém stroji. Vyšší hodnoty MAXDOP obvykle vedou k většímu počtu paralelních vláken na dotaz a rychlejšímu provádění dotazů.

V Azure SQL Database a SQL Database ve službě Fabric je výchozí nastavení MAXDOP pro každou novou databázi a databázi elastického fondu 8. Toto výchozí nastavení zabraňuje zbytečnému využití prostředků, ale stále umožňuje databázovému stroji spouštět dotazy rychleji pomocí paralelních vláken. V úlohách Azure SQL Database obvykle není nutné konfigurovat MAXDOP, ale může to přinést výhody jako pokročilé cvičení optimalizace výkonu.

Note

V září 2020 byla na základě let telemetrie ve službě Azure SQL Database MAXDOP 8 nastavena výchozí hodnota pro nové databáze, protože optimální hodnota pro nejširší škálu zákaznických úloh. Toto výchozí nastavení pomohlo zabránit problémům s výkonem kvůli nadměrnému paralelismu. Před tím bylo výchozí nastavení pro nové databáze MAXDOP 0. U existujících databází vytvořených před zářím 2020 se hodnota MAXDOP automaticky nezměnila.

Obecně platí, že pokud se databázový stroj rozhodne pro paralelní provedení dotazu, trvá jeho spuštění kratší dobu. Nadbytečný paralelismus ale spotřebovává další prostředky procesoru, aniž by se tím zlepšil výkon dotazu. Pokud se přebytečný paralelismus vyskytuje ve velkém, může ovlivňovat výkon všech prováděných dotazů ve stejné instanci databázového stroje. Tradičně bylo nastavení horní hranice paralelismu běžným cvičením ladění výkonu v úlohách SQL Serveru.

Následující tabulka popisuje chování databázového stroje při spouštění dotazů s různými hodnotami MAXDOP:

MAXDOP Behavior
= 1 Databázový stroj používá k provádění dotazů jedno sériové vlákno. Paralelní vlákna se nepoužívají.
> 1 Databázový stroj nastaví počet dalších plánovačů , které budou používat paralelní vlákna, na hodnotu MAXDOP nebo celkový počet logických procesorů podle toho, co je menší.
= 0 Databázový stroj nastaví počet dalších plánovačů , které budou používat paralelní vlákna, na celkový počet logických procesorů nebo 64, podle toho, co je menší.

Note

Každý dotaz se spustí s alespoň jedním plánovačem a jedním pracovním vláknem v daném plánovači.

Dotaz spuštěný pomocí paralelismu používá další plánovače a další paralelní vlákna. Vzhledem k tomu, že na stejném plánovači může být spuštěno více paralelních vláken, může být celkový počet vláken použitých k provedení dotazu vyšší než zadaná hodnota MAXDOP nebo celkový počet logických procesorů. Další informace najdete v tématu Plánování paralelních úloh.

Considerations

  • Ve službě Azure SQL Database a SQL Database ve Fabricu můžete změnit výchozí hodnotu MAXDOP:

    • Na úrovni dotazu použijte ukazatel MAXDOP k dotazu.
    • Na úrovni databáze pomocí konfigurace s vymezeným oborem databáze MAXDOP.
  • Důležité informace a doporučení týkající se dlouhodobé SQL Serveru MAXDOP platí pro Azure SQL Database a SQL databázi v prostředí Fabric.

  • Operace indexu, které vytvářejí nebo znovu sestavují index nebo které odstraňují clusterovaný index, můžou být náročné na prostředky. Hodnotu MAXDOP databáze pro operace indexu můžete přepsat zadáním možnosti indexu MAXDOP v příkazu CREATE INDEX nebo ALTER INDEX. Hodnota MAXDOP se použije na příkaz v době spuštění a není uložena v metadatech indexu. Další informace naleznete v tématu Konfigurace paralelních indexových operací.

  • Kromě dotazů a operací s indexy ovládá databázová konfigurační možnost MAXDOP také paralelní provádění ostatních příkazů, které mohou využívat paralelní zpracování, jako DBCC CHECKTABLE, DBCC CHECKDB a DBCC CHECKFILEGROUP.

Recommendations

Změna MAXDOP pro databázi může mít velký vliv na výkon dotazů a využití prostředků, a to jak kladné, tak záporné. Neexistuje však žádná jedna hodnota MAXDOP, která je pro všechny úlohy optimální. Doporučení pro nastavení MAXDOP jsou nuancovaná a závisí na mnoha faktorech.

Některé souběžné úlohy ve špičce můžou fungovat lépe s jinou funkcí MAXDOP než jiné. Správně nakonfigurovaný MAXDOP by měl snížit riziko incidentů výkonu a dostupnosti a v některých případech může snížit náklady tím, že se může vyhnout zbytečnému využití prostředků, a tím snížit kapacitu na nižší cíl služby.

Nadměrný paralelismus

Vyšší MAXDOP často zkracuje dobu trvání dotazů náročných na procesor. Nadměrný paralelismus ale může zhoršit výkon jiných souběžných úloh tím, že zmírní jiné dotazy na prostředky procesoru a pracovních vláken. V extrémních případech může nadměrné paralelismus využívat všechny prostředky databáze nebo elastického fondu, což způsobuje vypršení časového limitu dotazů, chyby a výpadky aplikací.

Tip

Doporučujeme zákazníkům vyhnout se nastavení MAXDOP na 0, i když se zdá, že momentálně nezpůsobuje problémy.

Nadměrný paralelismus se stává nejproblematičtějším, pokud existuje více souběžných požadavků, než je možné podporovat prostředky procesoru a pracovního vlákna poskytované cílem služby. Vyhněte se MAXDOP 0 kvůli snížení rizika potenciálních budoucích problémů způsobených nadměrným paralelismem, pokud dojde k vertikálnímu škálování databáze nebo pokud budoucí konfigurace hardwaru poskytnou více jader pro stejný účel služby databáze.

Úprava MAXDOP

Pokud zjistíte, že nastavení MAXDOP, které se liší od výchozího nastavení, je pro vaši úlohu optimální, můžete použít ALTER DATABASE SCOPED CONFIGURATION příkaz T-SQL. Příklady najdete v části Příklady použití jazyka Transact-SQL níže. Pokud chcete pro každou novou databázi, kterou vytvoříte, změnit hodnotu MAXDOP na jinou než výchozí hodnotu, přidejte tento krok do procesu nasazení databáze.

Pokud neschválený maxDOP přináší výhody pouze malé podmnožině dotazů v úloze, můžete maxDOP přepsat na úrovni dotazu přidáním nápovědy OPTION (MAXDOP) . Příklady najdete v tématu Příklady použití jazyka Transact-SQL.

Důkladně otestujte změny konfigurace MAXDOP pomocí zátěžového testování zahrnující reálné souběžné načítání dotazů.

MaxDOP pro primární a sekundární repliky lze nakonfigurovat nezávisle, pokud jsou pro vaše pracovní zatížení při čtení a zápisu a pracovní zatížení při čtení optimální různá nastavení MAXDOP. To platí pro sekundární repliky v úrovni služby Azure SQL Database s rozšířením pro čtení, georeplikací a úrovní služby Hyperscale. Ve výchozím nastavení všechny sekundární repliky dědí konfiguraci MAXDOP primární repliky.

Permissions

Příkaz ALTER DATABASE SCOPED CONFIGURATION musí být proveden jako správce serveru, jako člen databázové role db_ownernebo uživatel, kterému bylo uděleno ALTER ANY DATABASE SCOPED CONFIGURATION oprávnění.

Examples

Tyto příklady používají nejnovější AdventureWorksLT ukázkovou databázi při SAMPLE výběru možnosti pro novou jednoúčelovou databázi.

PowerShell

Konfigurace s vymezeným oborem databáze MAXDOP

Tento příklad ukazuje, jak pomocí příkazu ALTER DATABASE SCOPED CONFIGURATION nastavit MAXDOP konfiguraci na 2. Nastavení se projeví okamžitě pro nové dotazy. Rutina PowerShellu Invoke-SqlCmd spustí dotazy T-SQL, které nastaví a vrátí konfiguraci s vymezeným oborem databáze 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

Tento příklad se používá s Azure SQL databázemi, které mají povolené repliky pro škálování čtení, geografickou replikaci a sekundární repliky Azure SQL Database Hyperscale. Primární replika je například nastavena na jinou výchozí hodnotu MAXDOP než sekundární replika, s očekáváním, že mezi úlohou pro čtení-zápis a jen pro čtení mohou být rozdíly.

$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

Ke spouštění dotazů T-SQL můžete použít editor dotazů webu Azure Portal pro Azure SQL Database, SQL Server Management Studio (SSMS),rozšíření MSSQL pro Visual Studio Code nebo editor dotazů SQL na portálu Fabric .

  1. Otevřete nové okno dotazu.

  2. Připojte se k databázi, ve které chcete změnit MAXDOP. Ve master databázi nelze změnit konfigurace s vymezeným oborem na úrovni databáze.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit.

Konfigurace s vymezeným oborem databáze MAXDOP

Tento příklad ukazuje, jak určit aktuální konfiguraci databáze s oborem MAXDOP pomocí zobrazení katalogu systému sys.database_scoped_configurations .

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

Tento příklad ukazuje, jak pomocí příkazu ALTER DATABASE SCOPED CONFIGURATION nastavit MAXDOP konfiguraci na 8. Nastavení se projeví okamžitě.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;

Tento příklad se používá s databázemi Azure SQL a povolenými replikami škálování čtení, geografickou replikací a sekundárními replikami Hyperscale. Primární replika je například nastavená na jinou hodnotu MAXDOP než sekundární replika. Předpokládá se, že mezi úlohami jen pro čtení a zápis a jen pro čtení můžou existovat rozdíly. Všechny příkazy se spouští na primární replice. Sloupec value_for_secondary ve sys.database_scoped_configurations obsahuje nastavení pro sekundární repliky.

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';

Nápověda k dotazu MAXDOP

Tento příklad ukazuje, jak spustit dotaz pomocí hintu k dotazu k vynucení změny z 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

Možnost indexu MAXDOP

Tento příklad ukazuje, jak znovu sestavit index použitím volby indexu pro vynucení max degree of parallelism na 12.

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

Další krok