Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:Azure SQL Database
SQL Database a Fabricben
Ez a cikk az Azure SQL Database és a Fabric SQL Database max. párhuzamossági (MAXDOP) konfigurációs beállítását ismerteti.
Note
Ez a tartalom az Azure SQL Database-re és a Fabricben található SQL Database-re összpontosít. Az Azure SQL Database a Microsoft SQL Server adatbázismotor legújabb stabil verzióján alapul, így a tartalom nagy része hasonló, bár a hibaelhárítás és a konfigurációs lehetőségek eltérnek. Az SQL Serverben és a felügyelt Azure SQL-példányban található MAXDOP-ról további információt a Kiszolgáló konfigurációs beállításának maximális párhuzamossági fokának konfigurálása című témakörben talál.
A MAXDOP szabályozza a lekérdezések közötti párhuzamosságot az adatbázismotorban. A magasabb MAXDOP értékek általában több párhuzamos szálat eredményeznek lekérdezésenként, és gyorsabban hajtják végre a lekérdezéseket.
Az Azure SQL Database-ben és a Fabricben található SQL Database-ben az alapértelmezett MAXDOP-beállítás minden új önálló adatbázishoz és rugalmas készletadatbázishoz 8. Ez az alapértelmezett beállítás megakadályozza a szükségtelen erőforrás-használatot, ugyanakkor lehetővé teszi, hogy az adatbázismotor gyorsabban hajtsa végre a lekérdezéseket párhuzamos szálak használatával. Általában nem szükséges tovább konfigurálni a MAXDOP-t az Azure SQL Database számítási feladataiban, bár ez a teljesítmény finomhangolási gyakorlataként előnyökkel járhat.
Note
2020 szeptemberében, az Azure SQL Database szolgáltatás többéves telemetriai adatai alapján, a MAXDOP 8 lett az új adatbázisok alapértelmezett értéke, mivel ez bizonyult a legkülönfélébb ügyfél-munkaterhelések számára optimálisnak. Ez az alapértelmezett beállítás segített megelőzni a túlzott párhuzamosság miatti teljesítményproblémát. Ezt megelőzően az új adatbázisok alapértelmezett beállítása a következő volt MAXDOP 0: . A MAXDOP nem lett automatikusan módosítva a 2020 szeptembere előtt létrehozott meglévő adatbázisok esetében.
Általánosságban elmondható, hogy ha az adatbázismotor úgy dönt, hogy párhuzamossággal hajt végre egy lekérdezést, a végrehajtási idő gyorsabb. A túlzott párhuzamosság azonban további processzorerőforrásokat is igénybe vehet a lekérdezési teljesítmény javítása nélkül. Nagy léptékben a túlzott párhuzamosság negatívan befolyásolhatja az ugyanazon az adatbázismotor-példányon végrehajtó összes lekérdezés lekérdezési teljesítményét. A párhuzamosság felső határának beállítása hagyományosan gyakori teljesítményhangolási gyakorlat volt az SQL Server számítási feladataiban.
Az alábbi táblázat az adatbázismotor viselkedését ismerteti a különböző MAXDOP-értékekkel rendelkező lekérdezések végrehajtásakor:
| MAXDOP | Behavior |
|---|---|
= 1 |
Az adatbázismotor egyetlen soros szálat használ a lekérdezések végrehajtásához. A párhuzamos szálak nem használhatók. |
> 1 |
Az adatbázismotor beállítja a párhuzamos szálak által használandó további ütemez ők számát a MAXDOP értékre vagy a logikai processzorok teljes számára, amelyik kisebb. |
= 0 |
Az adatbázismotor a párhuzamos szálak által használni kívánt további ütemező számát a logikai processzorok teljes számához vagy 64-hez állítja be, attól függően, hogy melyik a kisebb. |
Note
Minden lekérdezést legalább egy ütemező hajt végre, és az ütemezőn egy munkaszál dolgozik.
A párhuzamossággal futtatott lekérdezések további ütemezőket és további párhuzamos szálakat használnak. Mivel több párhuzamos szál is végrehajtható ugyanazon az ütemezőn, a lekérdezés végrehajtásához használt szálak teljes száma magasabb lehet a megadott MAXDOP-értéknél vagy a logikai processzorok teljes számánál. További információ: Párhuzamos tevékenységek ütemezése.
Considerations
Az Azure SQL Database-ben és az SQL Database-ben a Fabricben módosíthatja az alapértelmezett MAXDOP-értéket:
- A lekérdezés szintjén használja a MAXDOPlekérdezési tippet.
- Az adatbázis szintjén a MAXDOPadatbázis hatókörébe tartozó konfigurációt használja.
A régóta fennálló SQL Server MAXDOP-szempontok és javaslatok az Azure SQL Database-hez és a Fabricben található SQL Database-hez alkalmazhatók.
Azok az indexműveletek, amelyek indexet hoznak létre vagy építenek újra, vagy amelyek fürtözött indexet elvetnek, erőforrásigényesek lehetnek. Az adatbázis MAXDOP-értékét felülbírálhatja az indexműveletek esetében a MAXDOP index beállítás megadásával a
CREATE INDEXvagyALTER INDEXutasításban. A MAXDOP értéket a rendszer a végrehajtási időpontban alkalmazza az utasításra, és nem tárolja az index metaadataiban. További információ: Párhuzamos indexelési műveletek konfigurálása.A lekérdezések és az indexműveletek mellett a MAXDOP adatbázis-hatókörű konfigurációs lehetősége más, párhuzamos végrehajtást használó utasítások párhuzamosságát is szabályozza, például
DBCC CHECKTABLEaDBCC CHECKDB.DBCC CHECKFILEGROUP
Recommendations
Az adatbázis MAXDOP-jának módosítása jelentős hatással lehet a lekérdezési teljesítményre és az erőforrás-kihasználtságra, mind pozitív, mind negatív. Nincs azonban egyetlen MAXDOP-érték, amely minden számítási feladathoz optimális. A MAXDOP beállítására javaslatok árnyaltak, és számos tényezőtől függenek.
Egyes egyidejű csúcsterhelések jobban működhetnek más MAXDOP-val, mint mások. A megfelelően konfigurált MAXDOP-knak csökkenteniük kell a teljesítmény- és rendelkezésreállási incidensek kockázatát, és bizonyos esetekben csökkenthetik a költségeket azáltal, hogy elkerülik a szükségtelen erőforrás-használatot, és így alacsonyabb szolgáltatási célkitűzésre skálázhatók le.
Túlzott párhuzamosság
A magasabb MAXDOP gyakran csökkenti a processzorigényes lekérdezések időtartamát. A túlzott párhuzamosság azonban ronthatja a számítási feladatok egyéb egyidejű teljesítményét azáltal, hogy más cpu- és feldolgozószál-erőforrások lekérdezéseit éhezteti. Szélsőséges esetekben a túlzott párhuzamosság az összes adatbázis- vagy rugalmas készleterőforrást felhasználhatja, ami lekérdezési időtúllépéseket, hibákat és alkalmazáskimaradásokat okozhat.
Tip
Azt javasoljuk, hogy az ügyfelek ne állítsa a MAXDOP értékét 0 értékre, még akkor is, ha az jelenleg nem okoz problémát.
A túlzott párhuzamosság akkor válik a legnagyobb problémássá, ha több egyidejű kérés van, mint amennyit a szolgáltatás célkitűzése által biztosított CPU- és feldolgozószál-erőforrások támogatnak. Kerüljük el MAXDOP 0, hogy csökkentsük a jövőbeli problémák kockázatát a túlzott párhuzamosság miatt, ha az adatbázist felskálázzák, vagy ha a jövőbeli hardverkonfigurációk több magot biztosítanak ugyanahhoz az adatbázis szolgáltatási célkitűzéshez.
MAXDOP módosítása
Ha úgy ítéli meg, hogy az alapértelmezetttől eltérő MAXDOP-beállítás optimális a számítási feladathoz, használhatja a ALTER DATABASE SCOPED CONFIGURATION T-SQL utasítást. Példákért lásd az alábbi Példák a Transact-SQL használatával című szakaszt. Ha a MAXDOP-t nem alapértelmezett értékre szeretné módosítani minden újonnan létrehozott adatbázis esetében, vegye fel ezt a lépést az adatbázis üzembe helyezésének folyamatába.
Ha a nem alapértelmezett MAXDOP csak a lekérdezések munkaterhelésének egy kis részhalmazát szolgálja, a OPTION (MAXDOP) utasítás hozzáadásával felülbírálhatja a MAXDOP-ot a lekérdezés szintjén. Példaként lásd a Transact-SQL-t használó példákat.
A MAXDOP-konfiguráció változásainak alapos tesztelése terhelésteszteléssel, amely valós egyidejű lekérdezési terheléseket is magában foglal.
Az elsődleges és másodlagos replikák MAXDOP-ja egymástól függetlenül konfigurálható, ha a különböző MAXDOP-beállítások optimálisak az írható és csak olvasható számítási feladatokhoz. Ez az Azure SQL Database olvasási felskálázási, georeplikációs és rugalmas skálázási szolgáltatási rétegű másodlagos replikáira vonatkozik. Alapértelmezés szerint az összes másodlagos replika örökli az elsődleges replika MAXDOP-konfigurációját.
Permissions
A ALTER DATABASE SCOPED CONFIGURATION utasítást kiszolgálói rendszergazdaként, az adatbázis-szerepkör tagjaként db_owner, vagy olyan felhasználóként kell végrehajtani, aki megkapta a ALTER ANY DATABASE SCOPED CONFIGURATION engedélyt.
Examples
Ezek a példák a legújabb AdventureWorksLT mintaadatbázist használják, amikor az SAMPLE lehetőség van kiválasztva egy új, önálló adatbázishoz.
PowerShell
MAXDOP-adatbázis hatókörű konfigurációja
Ez a példa bemutatja, hogyan használható ALTER DATABASE SCOPED CONFIGURATION utasítás a MAXDOP konfiguráció 2beállításához. A beállítás azonnal érvénybe lép az új lekérdezések esetében. A PowerShell-parancsmag Invoke-SqlCmd végrehajtja a beállítani kívánt T-SQL-lekérdezéseket, és visszaadja a MAXDOP-adatbázis hatókörű konfigurációját.
$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
Ez a példa az Azure SQL Database-hez használható, olvasási felskálázási replikák engedélyezett, georeplikációsés Azure SQL Database rugalmas skálázású másodlagos replikák. Például az elsődleges replikát egy másik alapértelmezett MAXDOP-ra állítják be, mint a másodlagos replikát, azt feltételezve, hogy lehetnek különbségek az olvasási-írási és az írásvédett munkafolyamatok között.
$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
Az Azure SQL Database, az SQL Server Management Studio (SSMS), a Visual Studio Code MSSQL-bővítménye vagy a Fabric portál SQL-lekérdezésszerkesztője segítségével T-SQL-lekérdezéseket hajthat végre.
Nyisson meg egy új lekérdezési ablakot.
Csatlakozzon ahhoz az adatbázishoz, amelyben módosítani szeretné a MAXDOP-t. Az adatbázis hatókörébe tartozó konfigurációk nem módosíthatók a
masteradatbázisban.Másolja és illessze be a következő példát a lekérdezési ablakba, és válassza a Végrehajtáslehetőséget.
MAXDOP-adatbázis hatókörű konfigurációja
Ez a példa bemutatja, hogyan határozhatja meg az adatbázis MAXDOP adatbázis-hatókörű konfigurációját a sys.database_scoped_configurations rendszerkatalógus nézet használatával.
SELECT [value] FROM sys.database_scoped_configurations WHERE [name] = 'MAXDOP';
Ez a példa bemutatja, hogyan használható ALTER DATABASE SCOPED CONFIGURATION utasítás a MAXDOP konfiguráció 8beállításához. A beállítás azonnal érvénybe lép.
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;
Ez a példa az Azure SQL Database-hez használható, olvasási felskálázási replikákkal engedélyezett, georeplikációsés rugalmas skálázású másodlagos replikákkal. Az elsődleges replika például más MAXDOP-ra van beállítva, mint a másodlagos replika, mivel arra számítunk, hogy lehetnek különbségek az írható-olvasható és az írásvédett munkaterhelések között. A rendszer minden utasítást végrehajt az elsődleges replikán. A value_for_secondary oszlopa a sys.database_scoped_configurations-ben a másodlagos replika beállításait tartalmazza.
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 lekérdezési tipp
Ez a példa bemutatja, hogyan hajtson végre lekérdezést úgy, hogy a lekérdezési célzást használja a max degree of parallelism átkapcsolására 2-re.
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 indexbeállítás
Ez a példa bemutatja, hogyan lehet újraépíteni egy indexet az index opcióval, hogy kényszerítse a max degree of parallelism-t 12-re.
ALTER INDEX ALL ON SalesLT.SalesOrderDetail
REBUILD WITH
( MAXDOP = 12
, SORT_IN_TEMPDB = ON
, ONLINE = ON);