Parallellisme I SQL Server Execution Plan

Av: Ahmad Yaseen | Oppdatert: 2018-03-30 | Kommentarer (3 | / Relatert :Mer > Query Optimization

Indeksering For Ytelse: Spørringsstrategier For Å Maksimere SQL Server-Indeksene Dine

Gratis Mssqltips Webinar: Indeksering For Ytelse: Spørringsstrategier For Å Maksimere SQL Server-Indeksene

Få ting påvirker hastigheten og ytelsen TIL SQL-setninger i SQL Server så mye som indekser. Denne økten vil hjelpe deg å forstå grunnleggende om spørringsytelse i forhold til indeksene i produksjonsdatabasen. Vi lærer deg hvordan du kan avgjøre om du bruker gode indeksstrategier og den direkte effekten indekseringsstrategien din har på spørringer.

Problem

JEG vet AT SQL Server kan kjøre spørringer parallelt, men hvordan kan jeg fortelle at en queryuses en parallell utførelsesplan og hvordan kan jeg få informasjon om antall ofCPUs brukes når en spørring kjøres parallelt? Sjekk ut dette tipset for å lære hvordan.

Løsning

parallellitet konseptet kommer fra å dele en stor oppgave i mindre oppgaver, hvor hver liten oppgave er tildelt en bestemt person, eller prosessor i tilfelle Av En SQLServer spørring, for å oppnå en del av hovedoppgaven. Til slutt vil de delvise resultatenetatt fra hver liten oppgave bli kombinert sammen til ett sluttresultat. Du kan forestille deg hvor mye raskere dette kan gjøres og ytelsesgevinsten du kanfå fra å kjøre flere serielle oppgaver samtidig parallelt, sammenlignet med å løpe en stor oppgave serielt!

Før du går gjennom spissen, er det gunstig å forstå en rekke tekniskevilkår knyttet til parallelliseringskonseptet I SQL Server:

  • Planleggeren er den fysiske eller logiske prosessoren somer ansvarlig for å planlegge utførelsen av SQL Server-trådene.
  • Arbeideren er tråden som er bundet til en planlegger for å utføre en bestemt oppgave.
  • Graden Av Parallellisme er antall arbeidere, ellerantall prosessorer, som er tildelt for parallellplanen for å oppnåarbeideroppgaven.
  • Maksimal Grad Av Parallellisme (MAXDOP) er et alternativ for server, database eller spørringsnivå som brukes til å begrense antall prosessorerat parallellplanen kan bruke. Standardverdien TIL MAXDOP er 0, der theSQL Server Engine kan bruke alle tilgjengelige prosessorer, opptil 64, i spørringen parallelexecution. Hvis DU angir MAXDOP-alternativet til 1, forhindrer du at du bruker mer enn en prosessori å utføre spørringen, noe som betyr AT SQL Server-Motoren vil bruke en serialplan til å utføre spørringen. MAXDOP-alternativet kan ta verdi opp til 32767, hvor SQL Server-Motoren vil bruke alle tilgjengelige serverprosessorer i parallell planutførelse hvis MAXDOP-verdien overstiger antall prosessorertilgjengelig på serveren. HVIS SQL-Serveren er installert på en enkelt prosessorserver, ignoreres VERDIEN AV MAXDOP.
  • Oppgaven er et lite stykke arbeid som er tilordnet til spesifikk arbeider.
  • Utførelseskonteksten er grensen der hver singletask kjører inne.
  • Leverandøren Av Parallelle Sider er en del AV SQL ServerStorage-Motoren som distribuerer datasettene forespurt av spørringen med deltakende arbeidere.
  • Exchange er komponenten som vil koble differentexecution sammenhenger involvert i spørringen parallell plan sammen, for å få det endelige resultatet.

beslutningen om å bruke en parallell plan for å utføre spørringen eller ikke, avhenger avflere faktorer. FOR EKSEMPEL SQL Server skal installeres på en multi-processorserver, det forespurte antallet tråder skal være tilgjengelig for å være fornøyd, theMaximum Grad Av Parallellisme alternativet er ikke satt til 1 og costof spørringen overskrider tidligere konfigurert Kostnadsterskelen For Parallelismvalue.

målet med dette tipset er å hente informasjonen om de parallelle spørringstrådene fra den faktiske utførelsesplanen for spørringen. For å tvinge SQL Server-Motoren til å utføre den innsendte spørringen ved hjelp av en parallell plan, vil vi sette Kostnadsterskelen For Parallellisme-verdien til 0, for å sikre at spørringen i alle tilfeller vil overstige Kostnadskostnaden For Parallellisme-verdien, og vi vil beholde Maksimal gradparallellisme-alternativet med standard 0-verdi, slik at SQL Server-Motoren kan brukealle tilgjengelige prosessorer mens du utfører spørringen vår, det er 4-prosessorer i mymachine som brukes til denne demoen.

Kostnadsgrensen for Parallellisme-verdien kan settes ved HJELP AV SQL Server ManagementStudio, ved å koble TIL SQL Server-forekomsten, høyreklikke på instancename og velge Egenskaper-alternativet. Fra Den Avanserte Siden Av Serveregenskapenevindu, bla ned Til Parallellisme-delen, hvorfra du kan overstyre standardverdien For Kostnadsterskelen for Parallellisme-alternativet, som er 5, eller Maksgrad Av Parallellisme om nødvendig, som vist på skjermbildet nedenfor:

 Kostnadsterskel For Parallellitet I SQL Server

du kan også overstyre standardverdien For Kostnadsgrensen for Parallellitet Ved hjelp av sp_configure. For å kunne endre Kostnadsterskelen for Parallellisme-verdien, bør du bruke sp_configure til å aktivere Alternativet Vis Avansert først, som vist iskriptet nedenfor:

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 Utførelsesplan

serveren er nå konfigurert for demoen. La oss lage et nytt bord ved hjelp avopprett TABELL T-SQL-setning som vist nedenfor:

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 er opprettet, fyller vi tabellen MED 100K-poster ved hjelp avsett inn i setninger nedenfor:

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

Nå vil vi aktivere «Inkluder Faktisk Utførelsesplan» og kjør deretter UNDER UTVALGSSPØRRINGEN:

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

ETTER at dette er fullført, kan vi sjekke utførelsesplanen generert frautfør spørringen, vil DU se AT SQL Server-Motoren bestemmer seg for å bruke en parallelplan til å utføre spørringen, på grunn av at kostnaden for spørringen overskrider omkostningsgrensen for Parallellisme-verdi.

vi kan se nedenfor at utførelsesplanen er en parallell plan, på Grunn Av Parallelliseoperatoren og også de gule sirkler med to piler under hver operatør som utføresmed parallellisme.

 Plan1 FOR SQL Server MAXDOP

utførelsesplanen er ikke bare en graf, den inneholder verdifull informasjon sombeskriver utførelsesprosessen av den innsendte spørringen. For å se denne informasjonen,høyreklikk PÅ VELG node i utførelsesplanen og velg Alternativet Egenskaper. Fra Egenskapsvinduet kan du seantall prosessorer som brukes til å behandle den innsendte spørringen fragrad Av Parallellisme-attributtet, under Misc-seksjonensom vist nedenfor:

VELG Egenskaper for SQL Server MAXDOP

fra det samme vinduet vises også informasjon om parallelle spørringstråder under ThreadStat-delen. I den delen kan du kontrollere attributtet parallelle Spørringsgrener, som viser numberof samtidige kjøringsbaner i utførelsesplanen for spørringen, Numa Node-ID, antall parallelle tråder som er reservert for den angitte Numanoden under ReservedThreads-attributtet og antall threadsused under kjøring av spørringen, Under UsedThreads-attributtet.

Fra Egenskapsvinduet kan du utlede AT SQL Server-Motoren brukte 4processors til å utføre spørringen. I tillegg har spørringsplanen en utførelsesbane, hvor 4 tråder er reservert og brukes til å utføre den innsendte spørringen ved hjelp aven parallell plan.

den samme informasjonen kan også utledes FRA XML-utførelsesplanen, ved å se under ThreadStat-delen, som vist nedenfor:

XML Plan FOR SQL Server MAXDOP

Du kan også dykke dypere for å sjekke I/O og CPU-ressursene som forbrukes av everythread. Høyreklikk På Den Grupperte Indeksskanneknuten i utførelsenplanlegge Og velg Egenskaper. Fra Vinduet viste Egenskaper kan du utvideden Faktiske i / O-statistikknoden for å sjekke antall logiske og fysiske leseroperasjoner utført av hver tråd mens du utfører spørringen. I tillegg kan du også sjekke antall rader som hentes fra hver tråd, CPU-tidenkonsumert av hver tråd og til slutt utførelsestiden som er gått av hver trådfor å utføre sin oppgave, som vist nedenfor:

Grupperte Indeksskanningsegenskaper for SQL Server MAXDOP

resultatene samsvarer MED vinduet VELG nodeegenskaper, der det finnes 4 arbeidertråder som deltok i utførelsen av spørringsoppgaver, og en coordinatorthread som koordinerer mellom arbeidertrådene.

Ta hensyn til at den forrige informasjonen bare kan hentes fra Den Faktiske Utførelsesplanen som genereres etter at spørringen er utført. Hvis du prøver å søke etter denne informasjonen fra Den Estimerte Utførelsesplanen, uten å utføre spørringen, vises ingen informasjon som spørringen må utføres for å angi antall prosessorer som vil bli tildelt spørringen fra de tilgjengelige prosessorene under spørringsutførelsen som vist nedenfor for Den Estimerte Utførelsesplanen.

Estimert Plan FOR SQL Server MAXDOP

Få MER SQL Server Parallellitet Informasjon

mens spørringen kjører, kan du bare kjøre kommandoen sp_who2 med QUERYSESSION-IDEN for å få informasjon om trådene som brukes til å utføre submittedquery under spørringen, som vist nedenfor:

SP_who2 FOR SQL Server MAXDOP

i utførelsesplanen hadde hver operatør i den planen et nummer tildelt itand en planlegger som brukes til å utføre den. Denne informasjonen kan hentes avquerying sys.dm_os_tasks system catalog vis og bli med det med sys.dm_os_workersand sys. dm_exec_query_profiles system catalog visninger, som I T-SQL skriptet nedenfor:

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ører det forrige skriptet mens DU kjører SELECT-setningen med Den Faktiskeutføringsplan aktivert, vil resultatet vise oss at de tre planoperatørene: Sorter, Filtrer Og Gruppert Indeksskanning med IDEN til hver operatør vist ved siden av den. Dette utføres fire ganger, ved hjelp av de fire planleggerne. Parallellisme operatorwith ID lik 0 vil bli utført en gang av den fjerde scheduler å koble allexecution sammenhenger sammen i det siste trinnet, som vist nedenfor:

Arbeidere Detaljer FOR SQL Server MAXDOP

Nedenfor har jeg lagt Til Nodeverdiene som samsvarer med spørringsresultatenemed utførelsesplanen for å illustrere ytterligere.

 Planbeskrivelse FOR SQL Server MAXDOP
Neste Trinn
  • Sjekk ut følgende ressurser:
    • Angi Maksimal Grad Av Parallellitet I SQL Server for En Spørring.
    • HVILKEN MAXDOP-innstilling skal brukes TIL SQL Server.
    • Hvordan Tvinge En Parallell Utførelsesplan I SQL Server-2016.
    • SQL Server-2016 DBCC CHECKDB MED MAXDOP

Sist Oppdatert: 2018-03-30

få skript

neste tips knappen

Om forfatteren
mssqltips forfatter Ahmad Yaseen Ahmad Yaseen Er EN SQL Server DBA med en bachelorgrad i datateknikk samt. NET utviklingserfaring.
Vis alle mine tips
Relaterte Ressurser

  • Flere Tips For Databaseutvikler…



+