Parallellism i SQL Server Exekveringsplan

av: Ahmad Yaseen | uppdaterad: 2018-03-30 | kommentarer (3) / relaterad :mer > Frågeoptimering

indexering för prestanda: Frågestrategier för att maximera dina SQL Server-index

gratis Mssqltips Webinar: indexering för prestanda: Frågestrategier för att maximera dina SQL Server-index

få saker påverkar hastigheten och prestandan för SQL-satser inom SQL Server lika mycket som index. Den här sessionen hjälper dig att förstå grunderna i frågeprestanda i förhållande till indexen i din produktionsdatabas. Vi lär dig hur du bestämmer om du använder bra indexstrategier och den direkta inverkan din indexeringsstrategi har på frågor.

Problem

jag vet att SQL Server kan köra frågor parallellt, men hur kan jag säga att en frågaanvänder en parallell exekveringsplan och hur kan jag få information om antalet CPUer som används när en fråga körs parallellt? Kolla in det här tipset för att lära dig hur.

lösning

parallellitetskonceptet kommer från att dela en stor uppgift i mindre uppgifter, varvarje liten uppgift tilldelas en viss person eller processor i fallet med en SQLServer-Fråga för att utföra en del av huvuduppgiften. Slutligen kommer de partiella resultaten från varje liten uppgift att kombineras till ett slutresultat. Du kan föreställa dig hur mycket snabbare detta kan göras och prestationsvinsten som du kanfå från att köra flera seriella uppgifter samtidigt parallellt, jämfört med att köra en stor uppgift seriellt!

innan du går igenom tipset är det fördelaktigt att förstå ett antal tekniskavillkor relaterade till parallellismkonceptet i SQL Server:

  • Schemaläggaren är den fysiska eller logiska processorn somansvarar för att schemalägga utförandet av SQL Server-trådarna.
  • arbetaren är den tråd som är bunden till en schemaläggare för attutföra en specifik uppgift.
  • graden av parallellitet är antalet arbetare, ellerantalet processorer, som tilldelas för parallellplanen för att utföra arbetsuppgiften.
  • den maximala graden av parallellitet (MAXDOP) är en server,databas eller frågenivå alternativ som används för att begränsa antalet processorersom den parallella planen kan använda. Standardvärdet för MAXDOP är 0, därsql Server Engine kan använda alla tillgängliga processorer, upp till 64, i frågan parallelexecution. Om du ställer in MAXDOP-alternativet till 1 kommer det att förhindra att mer än en processoror kör frågan, vilket innebär att SQL Server-motorn använder en serialplan för att utföra frågan. MAXDOP-alternativet kan ta värde upp till 32767, där SQL Server-motorn kommer att använda alla tillgängliga serverprocessorer iparallell plankörning om MAXDOP-värdet överstiger antalet processorertillgängliga i servern. Om SQL-servern är installerad på en enda processorserver, kommer värdet av MAXDOP att ignoreras.
  • uppgiften är ett litet arbete som tilldelas enspecifik arbetare.
  • Exekveringskontexten är gränsen där varje singletask körs inuti.
  • Parallel Page Supplier är en del av SQL ServerStorage-motorn som distribuerar de datamängder som begärs av frågan inom de deltagande arbetarna.
  • utbytet är den komponent som kommer att ansluta de olika exekveringskontexterna som är involverade i frågeparallellplanen tillsammans för att få det slutliga resultatet.

beslutet att använda en parallell plan för att utföra frågan eller inte beror påflera faktorer. SQL Server ska till exempel installeras på en multiprocessorserver, det begärda antalet trådar ska vara tillgängligt för att vara nöjd, maximal grad av Parallellismalternativ är inte inställt på 1 och kostnaden för frågan överstiger den tidigare konfigurerade Kostnadsgränsen för Parallelismvalue.

syftet med detta tips är att hämta informationen om parallella frågetrådarfrån den faktiska exekveringsplanen för frågan. För att tvinga SQL Server Engine toexecute den inlämnade frågan med hjälp av en parallell plan, kommer vi att ställa in Kostnadsgränsen för Parallellismvärde till 0, för att se till att frågans kostnad i alla fall överstiger Kostnadsgränsen för Parallellismvärde och vi kommer att behålla den maximala graden avparallelism alternativ med standard 0-värde, för att tillåta SQL Server Engine att användaalla tillgängliga processorer medan du kör vår fråga, det är 4 processorer i mymachine som används för denna demo.

Kostnadströskeln för Parallellvärde kan ställas in med SQL Server ManagementStudio, genom att ansluta till SQL Server-instansen, högerklicka på instancename och välja alternativet Egenskaper. Från den avancerade sidan av serverns Propertieswindow, bläddra ner till avsnittet Parallelism, varifrån du kan åsidosätta standardvärdet för Kostnadströskeln för Parallelism-alternativet, vilket är 5, eller Maxgraden av parallellism om det behövs, som visas i skärmdumpen nedan:

Kostnadströskel för parallellism i SQL Server

du kan också åsidosätta standardvärdet för Kostnadströskeln för Parallellismusing sp_configure. För att kunna ändra Kostnadströskeln för Parallellvärde bör du använda sp_configure för att aktivera alternativet Visa avancerat först, som visas iskriptet nedan:

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 av parallell Exekveringsplan

servern är nu konfigurerad för demo. Låt oss skapa en ny tabell medskapa tabell T-SQL-sats som visas nedan:

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

när tabellen har skapats fyller vi tabellen med 100k-poster med hjälp avsätt in i uttalanden nedan:

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 vill vi aktivera ”inkludera faktisk Exekveringsplan” och sedankör nedanstående valfråga:

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

när det här är klart kan vi kontrollera exekveringsplanen som genereras frånexekutera frågan, du kommer att se att SQL Server-motorn bestämmer sig för att använda en parallellplan för att utföra frågan, på grund av att kostnaden för den frågan överstiger tröskelvärdet för Parallellismvärde.

vi kan se nedan att exekveringsplanen är en parallell plan på grund av Parallelloperatorn och även de gula cirklarna med två pilar under varje operatör som exekverasmed parallellism.

Plan1 för SQL Server MAXDOP

exekveringsplanen är inte bara en graf, den innehåller värdefull information sombeskriver exekveringsprocessen för den inlämnade frågan. För att se denna information högerklickar du på Välj nod i exekveringsplanen och väljegenskaperna alternativet. Från egenskapsfönstret kan du seantalet processorer som används för att bearbeta den inlämnade frågan frångrad av Parallellismattribut, under avsnittet Miscsom visas nedan:

välj Egenskaper för SQL Server MAXDOP

från samma fönster visas också information om parallella frågetrådar under avsnittet ThreadStat. I det avsnittet kan du kontrollera attributet parallel query Branches, som visar numberof concurrent execution paths inom query execution plan, numa-nod-ID, antalet parallella trådar som är reserverade för den angivna Numanoden under attributet ReservedThreads och antalet trådar som används när du kör frågan, under attributet UsedThreads.

från egenskapsfönstret kan du härleda att SQL Server-motorn använde 4processorer för att utföra frågan. Dessutom har query execution plan en executionpath, där 4 trådar är reserverade och används för att utföra den inlämnade frågan meden parallell plan.

samma information kan också härledas från XML-exekveringsplanen, genom att titta under avsnittet ThreadStat, som visas nedan:

XML Plan för SQL Server MAXDOP

du kan också dyka djupare för att kontrollera I/O och CPU-resurser som förbrukas av eachthread. Högerklicka på den grupperade Indexskanningsnoden i körningenplanera och välj Egenskaper. Från fönstret visade egenskaper kan du expanderaden faktiska I / O-statistiknoden för att kontrollera antalet logiska och fysiska läsoperationer som utförs av varje tråd medan du utför frågan. Dessutom kan du också kontrollera antalet rader som hämtas från varje tråd, CPU-tidkonsumeras av varje tråd och slutligen exekveringstiden som förflutit av varje trådför att utföra sin uppgift, som visas nedan:

klustrade Indexskanningsegenskaper för SQL Server MAXDOP

resultaten matchar fönstret välj nodegenskaper, där det finns 4 arbetstrådar som deltog i utförandet av frågeuppgifter och en koordinatortråd som koordinerar mellan arbetstrådarna.

ta hänsyn till att den tidigare informationen endast kan hämtas från den faktiska Exekveringsplanen som genereras efter att ha utfört frågan. Om du försöker söka efter den informationen från den beräknade Exekveringsplanen, utan att utföra frågan, kommer ingen information att visas som frågan behöver köras för att ange antalet processorersom kommer att tilldelas frågan från de tillgängliga processorerna under fråganutförande som visas nedan för den beräknade Exekveringsplanen.

Beräknad Plan för SQL Server MAXDOP

få mer SQL Server Parallellisminformation

medan frågan körs kan du helt enkelt köra sp_who2-kommandot med querysession-ID för att få information om trådarna som används för att utföra den inlämnade frågan under frågekörningen, som visas nedan:

SP_who2 för SQL Server MAXDOP

i exekveringsplanen hade varje operatör i den planen ett nummer tilldelat det och en schemaläggare som används för att utföra det. Denna information kan hämtas avquerying sys.dm_os_tasks systemkatalogvy och gå med i sys. dm_os_workersand sys. dm_exec_query_profiles systemkatalogvyer, som i T-SQL-skriptet nedan:

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;

utför det tidigare skriptet medan du kör SELECT-satsen med ActualExecution-Planen aktiverad, kommer resultatet att visa oss att de tre planoperatörerna: sortera, filtrera och klustrade Indexskanning med ID för varje operatör som visas bredvid den. Detta utförs fyra gånger med hjälp av de fyra schemaläggarna. Parallelismoperatören med ID lika med 0 kommer att utföras en gång av den fjärde Schemaläggaren för att ansluta allaxekveringssammanhang tillsammans i det sista steget, som visas nedan:

arbetare Detaljer för SQL Server MAXDOP

nedan har jag lagt till Nodvärdena som motsvarar ovanstående frågeresultatmed exekveringsplanen för att ytterligare illustrera.

Planbeskrivning för SQL Server MAXDOP
nästa steg
  • kolla in följande resurser:
    • specificera Max grad av parallellitet i SQL Server för en fråga.
    • vilken MAXDOP-inställning ska användas för SQL Server.
    • hur man tvingar en parallell Exekveringsplan i SQL Server 2016.
    • SQL Server 2016 DBCC CHECKDB med MAXDOP

Senast uppdaterad: 2018-03-30

hämta skript

nästa tip-knapp

om författaren
mssqltips författare Ahmad Yaseen Ahmad Yaseen är en SQL Server DBA med en kandidatexamen i datateknik samt. Net utvecklingserfarenhet.
Visa alla mina tips
relaterade resurser

  • fler databasutvecklare Tips…



+