Sdílet prostřednictvím


Konfigurace maximálního stupně paralelismu (MAXDOP) ve službě Azure SQL Database

Platí pro: Azure SQL Database SQL Database v prostředcích infrastruktury

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

Poznámka:

Tento obsah se zaměřuje na Azure SQL Database. 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 na SQL Serveru najdete v tématu Konfigurace maximálního stupně paralelismu Možnost konfigurace serveru.

Přehled

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ů.

Ve službě Azure SQL Database je pro jednotlivé nové jednoúčelové databáze a databáze v elastickém fondu nastavený výchozí maximální stupeň paralelismu 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.

Poznámka:

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 Chování
= 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ší.

Poznámka:

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.

Důležité informace

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

    • Na úrovni dotazu použijte nápovědu k dotazu MAXDOP.
    • Na úrovni databáze pomocí konfigurace s vymezeným oborem databáze MAXDOP.
  • Pro Azure SQL Database platí dlouhodobé aspekty a doporučení MAXDOP SQL Serveru.

  • 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 CREATE INDEX MAXDOP v příkazu nebo ALTER INDEX příkazu. 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 indexovacích operací řídí možnost konfigurace s oborem databáze pro MAXDOP také paralelismus jiných příkazů, které můžou používat paralelní spouštění, jako je DBCC CHECKTABLE, DBCC CHECKDB a DBCC CHECKFILEGROUP.

Doporučení

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 jiným MAXDOP než jinými. 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, abyste snížili riziko potenciálních budoucích problémů kvůli nadměrnému paralelismu v případě vertikálního navýšení kapacity databáze nebo pokud budoucí konfigurace hardwaru ve službě Azure SQL Database poskytují více jader pro stejný cíl databázové služby.

Úprava MAXDOP

Pokud zjistíte, že nastavení MAXDOP, které se liší od výchozího nastavení, je optimální pro vaši úlohu Azure SQL Database, 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 výchozí hodnotu, přidejte tento krok do procesu nasazení databáze.

Pokud neschválený parametr 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 části Příklady použití jazyka Transact-SQL níže.

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 je možné nakonfigurovat nezávisle, pokud jsou pro úlohy jen pro čtení a čtení optimální různá nastavení MAXDOP. To platí pro sekundární repliky azure SQL Database se škálováním na více instancí, geografickou replikací a sekundárními replikami hyperškálování . Ve výchozím nastavení všechny sekundární repliky dědí konfiguraci MAXDOP primární repliky.

Zabezpečení

Oprávnění

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í.

Příklady

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 Azure SQL Database.

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á se službami Azure SQL Database s povolenými replikami škálování na více systémů čtení, geografickou replikací a sekundárními replikami Hyperškálování služby Azure SQL Database. Primární replika je například nastavená na jinou výchozí hodnotu MAXDOP jako sekundární repliku, přičemž předpokládá, že mezi úlohou jen pro čtení a zápisem pro čtení můžou 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

K provádění dotazů T-SQL ve službě Azure SQL Database můžete použít editor dotazů webu Azure Portal, SQL Server Management Studio (SSMS) nebo Azure Data Studio .

  1. Otevřete nové okno dotazu.

  2. Připojte se k databázi, ve které chcete změnit MAXDOP. V databázi nelze změnit konfigurace s vymezeným oborem master 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á se službami Azure SQL Database s povolenými replikami škálování na více instancí č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 sys.database_scoped_configurations obsahuje nastavení 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í nápovědy dotazu k vynucení 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 pomocí možnosti indexu vynutit max degree of parallelism na 12.

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

Viz také

Další kroky