Parallellisme in SQL Server Execution Plan

door: Ahmad Yaseen | bijgewerkt: 2018-03-30 | Comments (3) / verwant: meer >

indexering voor prestaties: Query strategieën om uw SQL Server indexen te maximaliseren

Free Mssqltips Webinar: indexering voor prestaties: Query-strategieën om uw SQL Server-indexen

te maximaliseren weinig dingen beïnvloeden de snelheid en prestaties van SQL-statements binnen SQL Server zo veel als indexen. Deze sessie zal u helpen de basisprincipes van query-prestaties te begrijpen met betrekking tot de indexen in uw productiedatabase. We leren je hoe je kunt bepalen of je goede indexstrategieën gebruikt en welke directe impact je indexeringsstrategie heeft op queries.

probleem

ik weet dat SQL Server query ’s parallel kan uitvoeren, maar hoe kan ik zien dat een queryuses een parallel uitvoeringsplan gebruikt en hoe kan ik informatie krijgen over het aantal pu’ s dat wordt gebruikt wanneer een query parallel wordt uitgevoerd? Bekijk deze tip om te leren hoe.

oplossing

het parallellisme concept komt van het verdelen van een grote taak in kleinere taken, waarbij elke kleine taak wordt toegewezen aan een specifieke persoon, of processor in het geval van een SQLServer query, om een deel van de hoofdtaak uit te voeren. Ten slotte zullen de gedeeltelijke resultaten van elke kleine taak worden gecombineerd tot één eindresultaat. U kunt zich voorstellen hoeveel sneller dit kan worden gedaan en de prestatiewinst die u Kanet van het uitvoeren van meerdere seriële taken op hetzelfde moment in parallel, vergeleken torunningeen grote taak serieel!

voordat u door de tip gaat, is het nuttig om een aantal technische voorwaarden te begrijpen die verband houden met het parallellismeconcept in SQL Server:

  • de Planner is de fysieke of logische processor die verantwoordelijk is voor het plannen van de uitvoering van de SQL Server threads.
  • de werkmap is de thread die aan een planner is gebonden om een specifieke taak uit te voeren.
  • de mate van parallellisme is het aantal werknemers, of het aantal verwerkers, dat is toegewezen voor het parallelle plan om de taak van de werknemer te volbrengen.
  • De Maximum graad van parallellisme (MAXDOP) is een server -, database-of queryniveau-optie die wordt gebruikt om het aantal processors te beperken dat het parallelle plan kan gebruiken. De standaardwaarde van MAXDOP is 0, waarbij de QL Server Engine alle beschikbare processors kan gebruiken, tot 64, in de query parallelexecution. Het instellen van de MAXDOP optie op 1 zal voorkomen dat het gebruik van meer dan één processorin het uitvoeren van de query, wat betekent dat de SQL Server Engine een serialplan zal gebruiken om de query uit te voeren. De MAXDOP-optie kan een waarde tot 32767 aannemen, waarbij de SQL Server-Engine alle beschikbare serverprocessors in de parallelle planuitvoering gebruikt als de MAXDOP-waarde het aantal beschikbare processors op de server overschrijdt. Als de SQL Server is geïnstalleerd op een enkele processorserver, zal de waarde van MAXDOP worden genegeerd.
  • de taak is een klein werkstuk dat is toegewezen aan een specifieke werknemer.
  • de Uitvoercontext is de grens waarin elk enkelletask binnen loopt.
  • de leverancier van parallelle pagina ‘ s maakt deel uit van de SQL-Serverstorage-Engine die de door de vraag gevraagde datasets distribueert binnen de deelnemende werknemers.
  • de Exchange is de component die de verschillende uitvoercontexten die betrokken zijn bij het query parallel plan met elkaar verbindt, om het eindresultaat te krijgen.

de beslissing om een parallel plan te gebruiken om de query al dan niet uit te voeren, hangt af van meerdere factoren. Bijvoorbeeld, SQL Server moet worden geïnstalleerd op een multi-processorserver, het gevraagde aantal threads moet beschikbaar zijn om te worden voldaan, de maximale mate van parallellisme optie is niet ingesteld op 1 en de kosten van de query overschrijdt de eerder geconfigureerde Kostendrempel voor Parallellismvalue.

het doel van deze tip is om de informatie van de parallelle query-threads op te halen uit het feitelijke uitvoeringsplan van de query. Voor het forceren van de SQL Server-Engine toexecute de ingediende query met behulp van een parallel plan, zullen wij de Kosten Thresholdfor Parallellisme waarde 0 is, om ervoor te zorgen dat in alle gevallen de query kosten exceedthe Kosten Drempel voor Parallellisme waarde en houden we de Maximale Graad ofParallelism optie met de standaard-0 waarde in te stellen, de SQL Server-Engine useall beschikbare processors, terwijl de uitvoering van onze query, dat zijn 4 processors in mymachine gebruikt voor deze demo.

de Kostendrempel voor parallellisme waarde kan worden ingesteld met behulp van SQL Server ManagementStudio, door verbinding te maken met de SQL Server instance, met de rechtermuisknop te klikken op de instancename en de eigenschappen optie te kiezen. Van de geavanceerde pagina van de server Propertieswindow, scroll naar beneden naar de parallellisme sectie, van waar u de standaardwaarde van de Kostendrempel voor parallellisme optie, die is 5, of de MaxDegree van parallellisme indien nodig, zoals weergegeven in de screenshot hieronder kunt overschrijven:

Kostendrempel voor parallellisme in SQL Server

u kunt ook de standaardwaarde van de Kostendrempel voor parallellisme overschrijven met behulp van sp_configure. Om de Kostendrempel voor parallellisme waarde te kunnen wijzigen, moet u sp_configure gebruiken om de Geavanceerde optie tonen eerst in te schakelen, zoals getoond in het script hieronder:

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 van Parallel uitvoeringsplan

de server is nu geconfigureerd voor de demo. Laten we een nieuwe tabel maken met behulp van de CREATE TABLE T-SQL statement zoals hieronder getoond:

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

Zodra de tabel is aangemaakt, zullen we vullen de tabel met 100K-records met behulp van theINSERT IN onderstaande verklaringen:

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

Nu willen we gebruik maken van de “Omvatten de Daadwerkelijke Uitvoering Plan” en thenrun de onderstaande query SELECTEREN:

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

Nadat dit is voltooid uitgevoerd kunnen wij de uitvoering van het plan gegenereerd fromexecuting de query, u ziet dat de SQL Server-Engine besluit gebruik te maken van een parallelplan voor het uitvoeren van de query, te wijten aan het feit dat de kosten van de query overschrijdt theCost Drempel voor Parallellisme waarde.

hieronder kunnen we zien dat het uitvoeringsplan een parallel plan is, vanwege de Parallellismeoperator en ook de gele cirkels met twee pijlen onder elke operator die uitgevoerd werd met parallellisme.

Plan1 voor SQL Server MAXDOP

het uitvoeringsplan is niet zomaar een grafiek, Het bevat waardevolle informatie die het uitvoeringsproces van de ingediende query beschrijft. Om deze informatie te bekijken,klikt u met de rechtermuisknop op het knooppunt selecteren in het uitvoeringsplan en kiest u de optie Eigenschappen. In het venster Eigenschappen kunt u het aantal processors zien dat wordt gebruikt om de ingediende query te verwerken vanuit het attribuut degree of Parallellism, onder de sectie Misc zoals hieronder getoond:

selecteer Eigenschappen voor SQL Server MAXDOP

in dit zelfde venster wordt informatie over de parallelle query threads ook weergegeven onder de ThreadStat sectie. In dat gedeelte kunt u het kenmerk parallelle query-Branches controleren, dat het aantal gelijktijdige uitvoeringspaden binnen het uitvoeringsplan voor de query weergeeft, de NUMA-knooppunt-ID, het aantal parallelle threads dat is gereserveerd voor de opgegeven NUMAnode Onder het kenmerk ReservedThreads en het aantal threadsdat is gebruikt tijdens het uitvoeren van de query, Onder het kenmerk UsedThreads.

uit het eigenschappenvenster kunt u afleiden dat de SQL Server-Engine 4processors heeft gebruikt om de query uit te voeren. Daarnaast heeft het uitvoeringsplan voor de query één uitvoeringspad, waarin 4 threads zijn gereserveerd en worden gebruikt om de ingediende query uit te voeren met behulp van een parallel plan.

dezelfde informatie kan ook worden afgeleid uit het XML uitvoeringsplan, door te kijken onder de ThreadStat sectie, zoals hieronder getoond:

XML-Plan voor SQL Server MAXDOP

u kunt ook dieper duiken om de I/O-en CPU-bronnen te controleren die door eachthread worden verbruikt. Klik met de rechtermuisknop op het knooppunt geclusterde Indexscan in het uitvoerplan en kies Eigenschappen. In het venster weergegeven eigenschappen kunt u het knooppunt I/O-statistieken uitbreiden om het aantal logische en fysieke leeshandelingen te controleren die door elke thread worden uitgevoerd tijdens het uitvoeren van de query. Bovendien kunt u ook het aantal rijen controleren dat wordt opgehaald uit elke thread, de CPU-tijd die wordt berekend door elke thread en ten slotte de uitvoeringstijd die wordt verstreken door elke thread om zijn taak te volbrengen, zoals hieronder wordt getoond:

geclusterde Indexscaneigenschappen voor SQL Server MAXDOP

de resultaten komen overeen met het venster Eigenschappen voor select node, waarin er 4 werkthreads zijn die deelnamen aan de uitvoering van query-taken en één coördinatordread die coördineert tussen de werkthreads.

houd er rekening mee dat de vorige informatie alleen kan worden opgehaald uit het feitelijke uitvoeringsplan dat wordt gegenereerd na het uitvoeren van de query. Als u probeert te zoeken naar die informatie uit het geschatte uitvoeringsplan, zonder de query uit te voeren, wordt er geen informatie weergegeven, omdat de query moet worden uitgevoerd om het aantal processors te specificeren dat tijdens de queryuitvoer aan de query van de beschikbare processors wordt toegewezen, zoals hieronder wordt weergegeven voor het geschatte uitvoeringsplan.

Geschatte Plan voor SQL Server MAXDOP

Steeds Meer SQL Server Parallellisme Informatie

Terwijl de query wordt uitgevoerd, kunt u gewoon de sp_who2 opdracht met de querysession ID om informatie te krijgen over de draden die worden gebruikt voor het uitvoeren van de submittedquery tijdens de uitvoering van een query, zoals hieronder weergegeven:

SP_who2 voor SQL Server MAXDOP

In de uitvoering van het plan, elke operator wordt in dat plan was een nummer dat is toegewezen aan itand een scheduler die wordt gebruikt om het uit te voeren. Deze informatie kan worden opgehaald door het systeem te gebruiken.dm_os_tasks systeemcatalogusweergave en samenvoegen met sys. dm_os_workersand sys. dm_exec_query_profiles systeemcatalogusweergaven, zoals in het T-SQL script hieronder:

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;

het uitvoeren van het vorige script terwijl het uitvoeren van de SELECT statement met de ActualExecution Plan ingeschakeld, het resultaat zal ons laten zien dat de drie plan operators: sorteer,Filter en geclusterde Index Scan met de ID van elke operator getoond ernaast. Dit wordt vier keer uitgevoerd, met behulp van de vier schedulers. De parallellisme operatormet ID gelijk aan 0 zal eenmaal worden uitgevoerd door de vierde scheduler om allexecution contexten te verbinden in de laatste stap, zoals hieronder getoond:

Workers Details voor SQL Server MAXDOP

hieronder heb ik de Knooppuntwaarden toegevoegd die overeenkomen met de bovenstaande query resultaten met het uitvoeringsplan om verder te illustreren.

planbeschrijving voor SQL Server MAXDOP
volgende stappen
  • bekijk de volgende bronnen:
    • specificeer de maximale parallelliteit in SQL Server voor een Query.
    • welke MAXDOP-instelling moet worden gebruikt voor SQL Server.
    • een Parallel uitvoeringsplan forceren in SQL Server 2016.
    • SQL Server 2016 DBCC CHECKDB met MAXDOP

Laatst Bijgewerkt: 2018-03-30

voor scripts

de volgende tip knop

Over de auteur
MSSQLTips auteur Ahmad YaseenAhmad Yaseen is een SQL-Server DBA met een bachelor ‘ s degree in computer engineering als op .NETTO ervaring in de ontwikkeling.
Bekijk al mijn tips
gerelateerde bronnen

  • meer tips voor Databaseontwikkelaars…



+