Paralelismus v Plán Vykonání SQL Server

: Ahmad Yaseen | Aktualizováno: 2018-03-30 | Komentáře (3) | Související: Více > Optimalizace Dotazu

Indexování pro Výkon: Dotaz Strategie, jak Maximalizovat Své Indexy SQL Serveru

Zdarma MSSQLTips Webináře: Indexování pro Výkon: Dotaz Strategie, jak Maximalizovat Své SQL Server, Indexy

Několik věcí, které ovlivňují rychlost a výkon SQL příkazy v SQL Server, stejně jako indexy. Tato relace vám pomůže pochopit základy výkonu dotazu ve vztahu k indexům ve vaší výrobní databázi. Naučíme vás, jak zjistit, zda používáte dobré indexové strategie a přímý dopad vaší indexovací strategie na dotazy.

Problém

vím, že SQL Server lze spustit dotazy paralelně, ale jak mohu říct, že queryuses paralelní provádění plánu a jak lze získat informace o počtu ofCPUs používá, když dotaz spustí paralelně? Podívejte se na tento tip a dozvíte se, jak.

řešení

koncept paralelismu pochází z rozdělení velkého úkolu na menší úkoly, kdekaždý malý úkol je přiřazen konkrétní osobě nebo procesoru v případě dotazu SQLServer, aby splnil část hlavního úkolu. Nakonec částečné výsledkypřijaté z každého malého úkolu budou spojeny do jednoho konečného výsledku. Můžete si představit, jak moc rychleji to lze udělat, a výkon zisk, že jste dostat z provozu několik sériových úkoly ve stejnou dobu souběžně, ve srovnání torunning jeden velký úkol sériově!

, Než jít přes špičku, je prospěšné pochopit řadu technicalterms související s parallelism koncept v SQL Server:

  • Plánovač je fyzický nebo logický procesor, který je zodpovědný za plánování, provádění podprocesů SQL Server.
  • pracovník je vlákno, které je vázáno na plánovačprovést konkrétní úkol.
  • stupeň paralelismu je počet pracovníků nebo počet zpracovatelů, kteří jsou přiděleni pro paralelní plán k plnění pracovního úkolu.
  • maximální stupeň paralelismu (MAXDOP) je volba úrovně serveru, databáze nebo dotazu, která se používá k omezení počtu procesorůkteré může paralelní plán použít. Výchozí hodnota MAXDOP je 0, ve kterém theSQL Server Engine může použít všechny dostupné procesory, až 64, v dotazu parallelexecution. Nastavení volby MAXDOP na 1 zabrání použití více než jednoho procesorupři provádění dotazu, což znamená, že modul SQL Server použije k provedení dotazu serialplan. Volba MAXDOP může mít hodnotu až 32767, kde SQL Server Engine použije všechny dostupné serverové procesory v paralelním provádění plánu, pokud hodnota MAXDOP překročí počet zpracovatelů dostupných na serveru. Pokud je server SQL nainstalován na jednom procesoruserver, hodnota MAXDOP bude ignorována.
  • úkol je malý kus práce, který je přiřazen konkrétnímu pracovníkovi.
  • kontext provádění je hranice, ve které každý singletask běží uvnitř.
  • dodavatel paralelní stránky je součástí SQL ServerStorage Engine, který distribuuje datové sady požadované dotazem v rámci zúčastněných pracovníků.
  • Exchange je součást, která se bude připojovat differentexecution souvislostí v dotazu paralelní plán dohromady, aby si žáci výsledek.

rozhodnutí o použití paralelního plánu k provedení dotazu závisí na tomvíce faktorů. Například, SQL Server by měl být nainstalován na multi-processorserver, požadovaný počet závitů by měl být k dispozici, aby být spokojeni, maximální Stupeň Paralelnost možnost není sada k 1 a costof dotazu přesahuje dříve nakonfigurován Náklady Práh pro Parallelismvalue.

cílem tohoto tipu je získat informace o paralelních vláknech dotazu ze skutečného plánu provádění dotazu. Vynutit SQL Server Motoru toexecute předložené dotaz pomocí paralelní plán, jsme se nastavit Cenu Thresholdfor Parallelism na hodnotu 0, aby se ujistil, že ve všech případech dotaz cena bude exceedthe Prahu Nákladů pro Paralelnost hodnota a budeme v Maximální Míře ofParallelism možnost s jeho výchozí hodnotu 0, aby SQL Server Motoru useall k dispozici procesorů při provádění náš dotaz, že jsou 4 procesory v mymachine používá pro toto demo.

Prahu Nákladů pro Paralelnost hodnota může být nastavena pomocí SQL Server ManagementStudio, pomocí připojení k instanci serveru SQL Server, klepněte pravým tlačítkem myši na instancename a vybrat možnost Vlastnosti. Z Pokročilé stránku Serveru Propertieswindow, přejděte dolů do Paralelismus sekce, kde můžete přepsat výchozí hodnotu Prahu Nákladů pro Paralelnost možnost, která je 5, nebo MaxDegree Paralelismu pokud je to nutné, jak je znázorněno na obrázku níže:

Náklady Práh pro Paralelismus v SQL Server

můžete také přepsat výchozí hodnota Nákladů Práh pro Parallelismusing sp_configure. Být schopen změnit Prahu Nákladů pro Paralelnost hodnota,použijte sp_configure chcete-li povolit Zobrazit Pokročilé Možnosti první, jak je znázorněno v níže uvedeného skriptu:

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;

Demo Paralelní Provádění Plánu

server je nyní nakonfigurován pro demo. Vytvoříme novou tabulku pomocí příkazu T-SQL, jak je uvedeno níže:

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) )

Jakmile je tabulka vytvořena, budeme vyplnit tabulku s 100K záznamů pomocí theINSERT DO prohlášení níže:

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

Nyní chceme umožnit „Zahrnují Skutečné Plán Spuštění“ a thenrun níže VYBERTE dotaz:

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

Po tomto dokončí běh, můžeme zkontrolovat plnění plánu generované fromexecuting dotaz, uvidíte, že SQL Server Engine rozhodne použít parallelplan k provedení dotazu, vzhledem k tomu, že náklady na tento dotaz přesahuje náklady Práh pro Paralelnost hodnota.

níže vidíme, že plán provádění je paralelní plán, protože Parallelismoperátor a také žluté kruhy se dvěma šipkami pod každým operátorem, který provedl paralelismus.

Plan1 pro SQL Server MAXDOP

plán provádění je nejen graf, obsahuje cenné informace thatdescribes provedení procesu předložen dotaz. Chcete-li zobrazit tyto informace,klepněte pravým tlačítkem myši na vybrat uzel v plánu provádění a vybertevolba vlastností. V okně Vlastnosti můžete vařit počet procesorů, které jsou používány ke zpracování předložené dotaz z theDegree Paralelismu atribut, pod Misc sectionas je uvedeno níže:

VYBERTE Vlastnosti pro SQL Server MAXDOP

Z tohoto okna, informace o podprocesů paralelní dotazu jsou alsodisplayed pod ThreadStat části. V této sekci vám cancheck paralelní dotazu Větve atribut, který ukazuje počet souběžných provedení cesty v plán spuštění dotazu, NUMA Node ID, počet paralelních vláken vyhrazena pro zadaný NUMAnode pod ReservedThreads atribut a počet threadsused při provádění dotazu, pod UsedThreads atribut.

z okna vlastností můžete odvodit, že SQL Server Engine použil 4procesory k provedení dotazu. Kromě toho má plán provádění dotazu jednu executionpath, ve kterém jsou vyhrazena 4 vlákna a použita k provedení odeslaného dotazu pomocí paralelního plánu.

stejné informace, může být také odvozen od XML plnění plánu, v lookingunder na ThreadStat oddíl, jak je uvedeno níže:

XML Plán pro SQL Server MAXDOP

můžete také ponořit hlouběji podívejte se na I/O a CPU zdrojů spotřebované eachthread. Klepněte pravým tlačítkem myši na uzel skenování seskupeného indexu v executionplan a vyberte Vlastnosti. Z zobrazí se okno Vlastnosti, můžete rozšířit Aktuální I/O statistiky uzlu zkontrolovat počet logických a fyzikálních readsoperations provádí každé vlákno při provádění dotazu. Kromě toho, můžete také zkontrolovat počet řádků, které jsou načteny z každé vlákno, CPU timeconsumed tím, že každé vlákno a konečně, čas spuštění, který je uplynulý každý threadto splnit svůj úkol, jak je uvedeno níže:

Scan Seskupeného Indexu Vlastnosti pro SQL Server MAXDOP

výsledky shodují s VYBERTE uzel okno Vlastnosti, kde tam are4 podprocesů, které se podílely na dotaz úkolů provedení a jeden coordinatorthread, že souřadnice mezi pracovních podprocesů.

vezměte v úvahu, že předchozí informace lze získat pouze ze skutečného plánu provádění, který je generován po provedení dotazu. Pokud se pokusíte vyhledávat informace z Odhadované Provádění Plánu, bez provedení dotazu, žádné informace nebudou zobrazeny jako v dotazu je třeba provést s cílem určit počet processorsthat bude přiřazen k dotazu z dostupných procesorů během queryexecution, jak je uvedeno níže pro Odhadované Provádění Plánu.

Odhaduje Plán pro SQL Server MAXDOP

Stále Více SQL Server Paralelismus Informace

Při spuštění dotazu, můžete jednoduše spustit sp_who2 příkaz s querysession ID získat informace o podprocesů, které jsou používány k provedení submittedquery během spuštění dotazu, jak je znázorněno níže:

SP_who2 pro SQL Server MAXDOP

V plán vykonání, každý provozovatel v tomto plánu měl číslo přidělené ita plánovač, který slouží k provedení to. Tyto informace lze načíst pomocí systému sys.dm_os_tasks systém katalogu zobrazení a spojení s sys.dm_os_workersand sys.dm_exec_query_profiles systém katalog názory, jako v T-SQL skript níže:

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;

Provedení předchozí skript při spuštění SELECT s ActualExecution Plán povolen, výsledek nám ukáže, že tři plánu operátory: Třídit,Filtrovat a Scan Seskupeného Indexu s ID každý provozovatel zobrazeny vedle ní. To se provádí čtyřikrát, pomocí čtyř plánovačů. Rovnoběžnost operatorwith ID rovno 0, bude provedena, jakmile ve čtvrtém plánovač pro připojení allexecution souvislostech spolu v posledním kroku, jak je znázorněno níže:

Pracovníci Údaje pro SQL Server MAXDOP

Níže jsem přidal Uzlu hodnoty, které korespondují s výše dotaz resultswith plnění plánu na pomoc další ilustraci.

Popis Plánu pro SQL Server MAXDOP
Další Kroky
  • Podívejte se na následující zdroje:
    • Určení Maximální Stupeň Paralelnost v SQL Server Dotazu.
    • jaké nastavení MAXDOP by mělo být použito pro SQL Server.
    • jak vynutit paralelní plán provádění v SQL Server 2016.
    • SQL Server 2016 DBCC CHECKDB s MAXDOP

Naposledy Aktualizováno: 2018-03-30

se skripty

další tip tlačítko

O autorovi
MSSQLTips autor Ahmad YaseenAhmad Yaseen je SQL Server DBA s bakalářský titul v oboru počítačové inženýrství, stejně jako .NET zkušenosti s vývojem.
Zobrazit všechny mé tipy
související zdroje

  • další tipy pro vývojáře databází…



+