Párhuzamosság az SQL Server végrehajtási tervben

írta: Ahmad Yaseen | Frissítve: 2018-03-30 | Hozzászólások (3) | kapcsolódó: több > lekérdezés optimalizálás

indexelés a teljesítményhez: lekérdezési stratégiák Az SQL Server indexek maximalizálásához

ingyenes Mssqltips webinárium: indexelés a teljesítményhez: lekérdezési stratégiák Az SQL Server indexek maximalizálásához

kevés dolog befolyásolja annyira az SQL Server utasításainak sebességét és teljesítményét, mint az indexek. Ez a munkamenet segít megérteni a lekérdezés teljesítményének alapjait a termelési adatbázis indexeivel kapcsolatban. Megtanítjuk, hogyan állapíthatja meg, hogy jó indexstratégiákat használ-e, és hogy az indexelési stratégia milyen közvetlen hatással van a lekérdezésekre.

probléma

tudom, hogy az SQL Server párhuzamosan futtathat lekérdezéseket, de hogyan állapíthatom meg, hogy egy lekérdezés párhuzamos végrehajtási tervet használ, és hogyan szerezhetek információt a lekérdezés párhuzamos végrehajtásakor használt CP-k számáról? Nézze meg ezt a tippet, hogy megtudja, hogyan.

megoldás

a párhuzamosság fogalma abból származik, hogy egy nagy feladatot kisebb feladatokra osztunk, ahol minden kis feladatot egy adott személyhez vagy egy SQLServer lekérdezés esetén processzorhoz rendelünk a fő feladat egy részének végrehajtásához. Végül az egyes kis feladatokból vett részleges eredményekegy végeredménybe kerülnek. El tudod képzelni, hogy mennyivel gyorsabban lehet ezt megtenni, valamint a teljesítménynövekedést, amelyet egyszerre több soros feladat párhuzamos futtatásával érhet el, összehasonlítva egy nagy feladat sorozatos futtatásával!

mielőtt áttekintené a tippet, hasznos megérteni számos technikátaz SQL Server párhuzamossági koncepciójához kapcsolódó kifejezések:

  • az ütemező a fizikai vagy logikai processzorfelelős az SQL Server szálak végrehajtásának ütemezéséért.
  • a dolgozó az a szál, amely egy ütemezőhöz van kötveegy adott feladat végrehajtása.
  • a párhuzamosság mértéke a munkavállalók száma, vagya feldolgozók száma, amelyeket a párhuzamos tervhez rendelnek a munkavállalói feladat elvégzéséhez.
  • a párhuzamosság maximális foka (MAXDOP) egy szerver,adatbázis vagy lekérdezési szint opció, amely a párhuzamos terv által használható processzorok számának korlátozására szolgál. A MAXDOP alapértelmezett értéke 0, amelyben a SQL Server Engine az összes rendelkezésre álló processzort használhatja, legfeljebb 64-ig, a parallelexecution lekérdezésben. Ha a MAXDOP opciót 1-re állítja, akkor nem lehet egynél több processzort használni a lekérdezés végrehajtásában, ami azt jelenti, hogy az SQL Server Motor serialplan-t fog használni a lekérdezés végrehajtásához. A MAXDOP opció akár 32767 értéket is igénybe vehet, aholaz SQL Server motor az összes rendelkezésre álló kiszolgálóprocesszort felhasználjaa párhuzamos terv végrehajtása, ha a MAXDOP érték meghaladja a kiszolgálón elérhető processzorok számát. Ha az SQL Server egyetlen processzorra van telepítvekiszolgáló, a MAXDOP értéke figyelmen kívül marad.
  • a feladat egy kis munka, amelyet egy adott munkavállalóhoz rendelnek.
  • A végrehajtási kontextus az a határ, amelyben minden egyes feladat belül fut.
  • a Parallel Page Supplier az SQL ServerStorage motor része, amely a lekérdezés által kért adatkészleteket a részt vevő dolgozókon belül terjeszti.
  • az Exchange az a komponens, amely összekapcsolja a lekérdezés párhuzamos tervében részt vevő különböző végrehajtási összefüggéseket, hogy megkapja a végső eredményt.

a párhuzamos terv használatának döntése a lekérdezés végrehajtásához vagy nem függtöbb tényező. Például az SQL Server-t többfolyamatos kiszolgálóra kell telepíteni, a kért szálszámnak elérhetőnek kell lennie ahhoz, hogy teljesüljön, a párhuzamosság maximális foka opció nincs beállítva 1-re, és a lekérdezés költsége meghaladja a Parallelismvalue korábban beállított Költségküszöbét.

ennek a tippnek a célja a párhuzamos lekérdezési szálak információinak lekérése a lekérdezés tényleges végrehajtási tervéből. Kényszeríteni az SQL Server Engine toexecute a benyújtott lekérdezés egy párhuzamos terv, akkor meg a költség Thresholdfor párhuzamosság értéke 0, hogy megbizonyosodjon arról, hogy minden esetben a lekérdezés költsége meghaladja a Költségküszöb párhuzamosság értékét, és megtartjuk a maximális foka párhuzamosság opciót az alapértelmezett 0 értéket, hogy az SQL Server Engine useall rendelkezésre álló processzorok végrehajtása közben a lekérdezés, amelyek 4 processzorok mymachine használt ez a demo.

a párhuzamossági érték Költségküszöbét az SQL Server ManagementStudio segítségével állíthatja be, ha csatlakozik az SQL Server példányhoz, jobb egérgombbal kattint az instancename-re, majd kiválasztja a Tulajdonságok opciót. A Server Propertieswindow speciális oldalán görgessen le a párhuzamosság szakaszig, ahonnan felülbírálhatja a párhuzamosság Költségküszöbének alapértelmezett értékét, amely 5, vagy szükség esetén a párhuzamosság maximális fokát, az alábbi képernyőképen látható módon:

párhuzamossági küszöbérték az SQL Server rendszerben

a párhuzamossági küszöbérték alapértelmezett értékét az sp_configure használatával is felülbírálhatja. A párhuzamossági érték Költségküszöbének megváltoztatásához először az sp_configure használatával engedélyezze a speciális megjelenítése opciót, amint az az alábbi szkriptben látható:

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;GOEXEC sp_configure 'cost threshold for parallelism', 0;RECONFIGURE;GOEXEC sp_configure 'show advanced options', 0;RECONFIGURE;

a párhuzamos végrehajtási terv bemutatója

a kiszolgáló most konfigurálva van a bemutatóhoz. Hozzunk létre egy új táblát a theCREATE TABLE T-SQL utasítás az alábbiak szerint:

USE MSSQLTipsDemoGOCREATE TABLE ParallelDemo( ID INT IDENTITY (1,1) PRIMARY KEY, FirstName NVARCHAR (200), LastName NVARCHAR (200), PhoneNumber VARCHAR(50), BirthDate DATETIME, Address NVARCHAR(MAX) )

a Táblázat létrehozása után a táblázatot 100k rekordokkal töltjük ki aillessze be az alábbi utasításokba:

INSERT INTO ParallelDemo VALUES ('John','Horold','+96255889955','1987-01-08','Jordan - Amman - Mecca Street - Building 77')GO 50000 INSERT INTO ParallelDemo VALUES ('Michel','Anglo','+96255776655','1985-06-02','Jordan - Amman - Mecca Street - Building 74')GO 50000

most engedélyezni akarjuk a “tényleges végrehajtási terv felvétele” , majdfuttassa az alábbi lekérdezést:

SELECT , , , , , FROM .. WHERE Address LIKE '%AMM%' ORDER BY BirthDate desc

a Futtatás befejezése után ellenőrizhetjük a generált végrehajtási terveta lekérdezés végrehajtásával látni fogja, hogy az SQL Server motor úgy dönt, hogy parallelplan-t használ a lekérdezés végrehajtásához, mivel a lekérdezés költsége meghaladja aa párhuzamossági érték költségküszöbét.

az alábbiakban láthatjuk, hogy a végrehajtási terv párhuzamos terv, a Parallelismoperator miatt, valamint a sárga körök két nyíllal az egyes operátorok alatt, amelyek parallelizmussal hajtották végre.

Plan1 for SQL Server MAXDOP

a végrehajtási terv nem csak egy grafikon, hanem értékes információkat tartalmazleírja a benyújtott lekérdezés végrehajtási folyamatát. Ezen információk megtekintéséhez kattintson a jobb gombbal a csomópont kiválasztása elemre a végrehajtási tervben, majd válassza a lehetőségeta Tulajdonságok lehetőséget. A Tulajdonságok ablakban láthatjaa benyújtott lekérdezés feldolgozásához használt processzorok számaa párhuzamosság mértéke attribútum, A Egyéb szakaszaz alábbiak szerint:

válassza ki az SQL Server Maxdop

tulajdonságait ugyanebből az ablakból a párhuzamos lekérdezési szálakra vonatkozó információk is megjelennek a ThreadStat szakaszban. Ebben a szakaszban ellenőrizheti a párhuzamos lekérdezési ágak attribútumot, amely megmutatja a lekérdezés végrehajtási tervén belüli egyidejű végrehajtási útvonalak számát, A NUMA csomópont azonosítóját, a megadott Numanode számára fenntartott párhuzamos szálak számát A ReservedThreads attribútum alatt, valamint a lekérdezés végrehajtása során használt szálak számát A UsedThreads attribútum alatt.

a Tulajdonságok ablakból levezethető, hogy az SQL Server Motor 4processzorokat használt a lekérdezés végrehajtásához. Ezenkívül a lekérdezés végrehajtási tervének van egy executionpath, amelyben 4 szál van fenntartva, és a benyújtott lekérdezés párhuzamos terv segítségével történő végrehajtására szolgál.

ugyanezek az információk az XML végrehajtási tervből is származhatnak, a ThreadStat szakasz alatt, az alábbiak szerint:

XML terv az SQL Server MAXDOP

azt is mélyebbre, hogy ellenőrizze az I/O és a CPU erőforrások által fogyasztott eachthread. Kattintson a jobb gombbal a fürtözött Index Scan csomópontra az executionplan alkalmazásban, majd válassza a Tulajdonságok lehetőséget. A megjelenített Tulajdonságok ablakban kibővíthetia tényleges I / O statisztikai csomópontot, hogy ellenőrizze az egyes szálak által a lekérdezés végrehajtása során végrehajtott logikai és fizikai olvasási műveletek számát. Ezenkívül ellenőrizheti az egyes szálakból beolvasott sorok számát, az egyes szálak által felhasznált CPU-időt, végül pedig az egyes szálak által eltelt végrehajtási időt isfeladatának végrehajtásához, az alábbiak szerint:

fürtözött Indexvizsgálati tulajdonságok SQL Server MAXDOP esetén

az eredmények megegyeznek a csomópont tulajdonságainak kiválasztása ablakkal, ahol a lekérdezési feladatok végrehajtásában részt vevő 4 dolgozói szál, valamint a dolgozó szálak közötti koordinátorszál található.

vegye figyelembe, hogy az előző információkat csak a lekérdezés végrehajtása után létrehozott tényleges végrehajtási tervből lehet letölteni. Ha megpróbálja megkeresni ezt az információt a becsült végrehajtási tervből, a lekérdezés végrehajtása nélkül, nem jelenik meg olyan információ, amelyet a lekérdezésnek végre kell hajtania annak érdekében, hogy meghatározza a lekérdezéshez rendelt processzorok számát az elérhető processzoroktól a lekérdezés végrehajtása során, az alábbiak szerint a becsült végrehajtási tervhez.

 becsült terv az SQL Server számára MAXDOP

további SQL Server párhuzamossági információk beszerzése

a lekérdezés futása közben egyszerűen futtathatja az sp_who2 parancsot a querysession ID-vel, hogy információt kapjon a submittedquery végrehajtásához használt szálakról a lekérdezés végrehajtása során, az alábbiak szerint:

SP_who2 for SQL Server MAXDOP

a végrehajtási tervben az adott terv minden operátorához hozzárendeltek egy számot és egy ütemezőt, amelyet a végrehajtáshoz használnak. Ezt az információt a sys használatával lehet letölteni.dm_os_tasks rendszerkatalógus nézet és csatlakozás a sys. dm_os_workersand sys. dm_exec_query_profiles rendszerkatalógus nézetekhez, mint az alábbi T-SQL szkriptben:

SELECT OSTSK.scheduler_id, qp.node_id, qp.physical_operator_nameFROM sys.dm_os_tasks OSTSKLEFT JOIN sys.dm_os_workers OSWRK on OSTSK.worker_address=OSWRK.worker_addressLEFT JOIN sys.dm_exec_query_profiles qp on OSWRK.task_address=qp.task_addressWHERE OSTSK.session_id=58ORDER BY scheduler_id, node_id;

az előző parancsfájl végrehajtása a SELECT utasítás futtatása közben az ActualExecution terv engedélyezve van,az eredmény megmutatja nekünk, hogy a három terv operátor: rendezés, szűrés és fürtözött Index szkennelés az egyes operátorok mellett látható azonosítóval. Ezt négyszer hajtják végre, a négy ütemező segítségével. A Parallelism operatorwith ID egyenlő 0 hajtja végre egyszer a negyedik ütemező csatlakozni allexecution összefüggések együtt az utolsó lépésben, az alábbiak szerint:

Workers Részletek SQL Server MAXDOP

az alábbiakban már hozzá a csomópont értékeket, amelyek megfelelnek a fenti lekérdezés resultswith a végrehajtási tervet, hogy segítsen tovább szemléltetni.

terv leírása az SQL Server számára MAXDOP
következő lépések
  • tekintse meg a következő forrásokat:
    • a párhuzamosság maximális fokának megadása az SQL Serverben egy lekérdezéshez.
    • milyen MAXDOP beállítást kell használni az SQL Server számára.
    • párhuzamos végrehajtási terv kényszerítése az SQL Server 2016-ban.
    • SQL Server 2016 DBCC CHECKDB maxdop-val

Utolsó frissítés: 2018-03-30

szkriptek beszerzése

következő tipp gomb

A szerzőről
mssqltips szerző Ahmad Yaseen Ahmad Yaseen egy SQL Server DBA egy főiskolai diplomát számítástechnika, valamint a. net fejlesztési tapasztalat.
az összes tippem megtekintése
kapcsolódó források

  • további adatbázis-fejlesztői tippek…



+