Få indsigt i ydeevnen, når du har brug for det, og sæt fart på ydeevnen uden kodeændringer
- 10 minutter
SQL Server 2022 indeholder indbyggede funktioner til at reducere tid til forespørgselsjustering, herunder forespørgselslageret og næste generation af IQP-funktioner (Intelligent Query Processing), så du kan få hurtigere og mere ensartet ydeevne uden kodeændringer.
Udfordringer i forbindelse med justering af forespørgsler
Udviklere og SQL-eksperter er enige om, at selvom nogle forespørgsler bare fungerer, kan der opstå nogle ydeevnesituationer for forespørgsler, der kræver fejlfinding af ydeevnen og justering af forespørgsler. Justering af forespørgselsydeevnen kan være en dyr og ofte langvarig proces.
Løsninger til justering af forespørgsler ved hjælp af Forespørgselslager
Forespørgselslageret er et indbygget sæt forespørgselsydeevnesstatistikker, der er gemt i en brugerdatabase. Forespørgselslageret registrerer automatisk en oversigt over forespørgsler, planer og kørselsstatistikker og bevarer disse oplysninger til din gennemgang. Den adskiller data efter klokkeslætsvinduer, så du kan se databaseanvendelsesmønstre og forstå, hvornår der er foretaget ændringer i forespørgselsplanen på serveren. Du kan få flere oplysninger i Overvåg ydeevnen ved hjælp af Forespørgselslager.
SQL Server 2022 indeholder vigtige forbedringer af Forespørgselslager for at reducere mængden af tid til forespørgselsjustering.
Forespørgselslager slået til som standard
Før SQL Server 2022 blev Forespørgselslager aktiveret ved hjælp af T-SQL ALTER DATABASE-sætningen . For SQL Server 2022 er forespørgselslageret aktiveret som standard for en nyoprettet database. Databaser, der er gendannet fra tidligere versioner af SQL Server, bevarer de indstillinger for forespørgselslageret, der blev hentet, da databasen blev sikkerhedskopieret. Der er foretaget flere forbedringer af Forespørgselslager siden starten i SQL Server 2016, der giver brugerne mulighed for at aktivere Forespørgselslager uden at påvirke programmets ydeevne væsentligt. Derudover er der flere nye indstillinger mulige i Forespørgselslager, så brugerne nemmere kan styre, hvordan oplysninger om forespørgselsydeevne registreres og ryddes op. Brugerne kan når som helst deaktivere Forespørgselslager ved hjælp af sætningen T-SQL ALTER DATABASE.
Tip til forespørgselslager
Tip til Forespørgselslager giver en brugervenlig metode til udformning af forespørgselsplaner uden at ændre programkoden. Du kan tage en hvilken som helst forespørgsel, der er gemt i Forespørgselslager, og bruge systemlagrede procedurer til at anvende et forespørgselstip. Forespørgselstippet påvirker forespørgselsplanen med det formål at forbedre forespørgslens ydeevne uden at ændre programkoden. Du kan f.eks. anvende et tip til et forespørgselslager for at kræve, at en forespørgsel bruger en bestemt MAXDOP
værdi uden at ændre forespørgselsteksten.
Tip til forespørgselslager er ikke beregnet til at blive brugt som et normalt trin til at justere forespørgslens ydeevne. De kan dog være et nyttigt værktøj til justering af forespørgsler, især hvis du ikke kan ændre forespørgselsteksten i et program. Derudover bruger nogle nye funktioner til intelligent forespørgselsbehandling et tip til forespørgselslageret. Du kan få vist alle bevarede tip til forespørgselslageret i sys.query_store_query_hints katalogvisning. Du kan finde flere oplysninger under tip til Forespørgselslager.
Forespørgselslager til læsereplikaer
Forespørgselslageret er velegnet til at reducere den tid, der kræves for at tilpasse forespørgsler eller nemt identificere problemer med forespørgselsydeevnen. Oplysninger om ydeevne er dog kun tilgængelige for forespørgsler, der udføres i forhold til den primære replika i en always on-tilgængelighedsgruppe. I SQL Server 2022 er der en ny indstilling tilgængelig ved hjælp af T-SQL ALTER DATABASE--sætningen for at gøre det muligt for Forespørgselslageret at indsamle oplysninger om ydeevnen for skrivebeskyttede forespørgsler, der udføres på sekundære replikaer. Alle oplysninger om ydeevne for alle replikaer bevares på den primære replika. Nye oplysninger registreres i Forespørgselslager for at angive, hvilken replika der er knyttet til en forespørgsel eller forespørgselsplan.
Seddel
Sporingsflag 12606 er påkrævet for at aktivere Forespørgselslager for sekundære replikaer.
Forespørgselslager til intelligent forespørgselsbehandling
Forespørgselslageret indsamler vigtige oplysninger om ydeevnen for forespørgsler, men forespørgselsbehandleren i SQL Server 2022 bruger også Forespørgselslager til at bevare oplysninger for at fremskynde forespørgslens ydeevne. Disse funktioner omfatter optimeret planovertving, hukommelsestildel feedback, kardinalitetsestimering (CE) modelfeedback og graden af parallelitetsfeedback (DOP).
Løsninger til hurtigere ydeevne med den næste generation af intelligent forespørgselsbehandling
Intelligent forespørgselsbehandling (IQP) er en serie af funktioner, der er indbygget i forespørgselsprocessoren i databaseprogrammet, og som er designet til at fremskynde ydeevnen uden kodeændringer. Den næste generation af intelligent forespørgselsbehandling er baseret på et fundament af funktioner, der findes i SQL Server 2017 og 2019, som vist i følgende diagram:
Som du kan se, var der flere IQP-funktioner i SQL Server 2017 og SQL Server 2019. SQL Server 2022 tilføjer flere nye funktioner til IQP. Du kan holde dig ajour med alle de nyeste IQP-funktioner på Intelligent forespørgselsbehandling i SQL-databaser. Lad os undersøge hver af disse nye funktioner.
Databaseprogrammet bruger to principper til at træffe beslutninger om intelligent forespørgselsbehandling:
- Undgå at forårsage regressioner for forespørgselsydeevnen ved hjælp af en ny metode eller automatisering.
- Angiv en metode på database- eller forespørgselsniveau til deaktivering af en bestemt IQP-funktion. Du kan vælge, hvilken IQP-funktion du vil aktivere på database- eller forespørgselsniveau, mens du bruger andre IQP-funktioner, afhængigt af niveauet for databasekompatibilitet.
Egenskaber efter opgradering til SQL Server 2022
Hvis du opgraderer til SQL Server 2022, er der nye funktioner til at fremskynde ydeevnen uafhængigt af databasens kompatibilitetsniveau for databasen. Kompatibilitetsniveauet giver dig mulighed for at drage fordel af nye funktioner, selvom du har brug for at bruge et databasekompatibilitetsniveau fra en tidligere version af SQL Server. Du kan få flere oplysninger under Kompatibilitetscertificering.
Omtrentlige fraktilfunktioner
SQL Server indeholder to Transact-SQL -funktioner (T-SQL) for at hjælpe med at beregne en fraktil for en række værdier:
- PERCENTILE_CONT
- PERCENTILE_DISC
SQL Server 2022 indeholder omtrentlige, der svarer til disse to funktioner:
- APPROX_PERCENTILE_CONT
- APPROX_PERCENTILE_DISC
De omtrentlige fraktilfunktioner kan være nyttige til analysearbejdsbelastninger med usædvanligt store datasæt. Disse funktioner fungerer hurtigere, og implementeringsgarantierne er op til 1,33% fejlfrekvens inden for en 99-% sandsynlighed.
Gennemtvinget optimeret plan
Optimeret plan gennemtving er en ny funktion i SQL Server 2022, der skal reducere den tid, det tager at kompilere visse forespørgsler, hvis forespørgselsplanen gennemtvinges i Forespørgselslager.
Nogle forespørgsler kan i sagens natur tage lang tid at kompilere. Optimeret plan gennemtvingning reducerer den tid, det tager at kompilere en forespørgsel, ved at gemme kompileringstrin i Forespørgselslager. Disse trin gemmes for berettigede forespørgsler, der har forespørgselsplaner, der gennemtvinges i Forespørgselslager. Næste gang en forespørgsel skal kompileres, der har optimeret en plan, der gennemtvinges, bruges kompileringstrin til at fremskynde kompileringsfasen betydeligt for at udføre en forespørgsel.
Du kan få flere oplysninger under Optimeret plan, der gennemtvinges med Forespørgselslager.
SQL Server 2022 IQP-funktioner ved hjælp af databasekompatibilitetsniveau 140 eller nyere
Du kan få flere intelligente funktioner til forespørgselsbehandling for at forbedre hukommelsesfeedback i SQL Server 2022, hvis du bruger niveau 140 eller nyere for databasekompatibilitet. Feedback om tildeling af hukommelse blev introduceret i SQL Server 2017 (batchtilstand) og SQL Server 2019 (rækketilstand). Feedback om tildeling af hukommelse er en mekanisme, hvor forespørgselsbehandleren lærer af feedback om udførelse og justerer et hukommelsestilskud for yderligere udførelser. Denne viden gør det muligt for forespørgselsbehandleren at undgå eller reducere tempdb-spild og RESOURCE_SEMAPHORE ventetider.
Hukommelsestildel feedback-percentiler
I versioner før SQL Server 2022 var feedback om tildeling af hukommelse baseret på den seneste udførelse for en bestemt forespørgsel. Denne metode kan resultere i nogle tilfælde af forskellige feedbackjusteringer, hvilket kan få forespørgselsbehandleren til at deaktivere hukommelse og give feedback til en bestemt forespørgsel. I SQL Server 2022 bruger feedback om tildeling af hukommelse en fraktilmetode til at se på hukommelsestilskud over flere udførelser, før du bruger feedback om hukommelsestildel.
Hukommelsestildel feedback vedholdenhed
I versioner før SQL Server 2022 blev feedback om tildeling af hukommelse kun gemt i en cachelagret plan i hukommelsen. Hvis den cachelagrede plan blev fjernet, skal feedback om tildeling af hukommelse genberegnes ved nye udførelser af forespørgsler. I SQL Server 2022, hvor Forespørgselslager er aktiveret, bevares feedback om tildeling af hukommelse i forespørgselslageret. Du kan få vist hukommelse til at give feedback vedholdenhed fra sys.query_store_plan_feedback katalogvisning.
Du kan få flere oplysninger under Hukommelse giver feedback.
SQL Server 2022 IQP-funktioner ved hjælp af databasekompatibilitetsniveau 160 eller nyere
Du kan få flere intelligente funktioner til behandling af forespørgsler, hvis du bruger et databasekompatibilitetsniveau 160 eller nyere. Egenskaber som optimering af parameterfølsom plan, forbedringer af kardinalitetsestimering og graden af parallelitet.
Optimering af parameterfølsom plan
Når en forespørgsel kompileres, oprettes der en udførelsesplan. Planen tager højde for værdier for alle parametre, der bruges i forespørgsler i en lagret procedure eller parameteriseret forespørgsel. Dette begreb kaldes parametersnøfte. Der kan kun findes én forespørgselsplan i cachen for sætninger i en lagret procedure eller en parameteriseret forespørgsel. I de fleste tilfælde medfører denne situation ikke nogen problemer med ydeevnen for programmer. Der er dog situationer, hvor de data, der hentes til forespørgsler baseret på parametre, kan skæveeller ikke fordeles jævnt. I disse tilfælde er den enkelte cacheplan muligvis ikke optimal for forskellige parameterværdier. Dette problem kaldes en parameterfølsom plan.
I SQL Server 2022 kan optimeringsprogrammet registrere scenarier med parameterfølsomme planer og cachelagre flere planer for den samme lagrede procedure eller parameteriseret forespørgsel. Optimeringen bruger et begreb kaldet forespørgselsvarianter til at aggregere sæt af parameterværdier, så de stemmer overens med en forespørgselsplan, der passer bedst til disse parameterværdier.
Du kan få flere oplysninger under optimering af parameterfølsom plan.
Feedback om kardinalitetsestimering (CE)
I SQL Server 2014 med databasekompatibilitetsniveau 120 begyndte Microsoft at bruge en ny model i forespørgselsbehandleren for at foretage visse antagelser om kardinalitetsestimering for visse forespørgselsmønstre. I nogle tilfælde genererede den nye model en mere korrekt forespørgselsplan, men kan resultere i langsommere ydeevne end med den ældre CE-model. CE-modelscenarierne omfatter korrelation, joinforbindelsesbegrænsende elementer og rækkemål. Siden SQL Server 2014 blev der inkluderet flere muligheder for at bruge den ældre CE-model eller til at styre CE-funktionsmåden på database- eller forespørgselsniveau med sporingsflag eller forespørgselstip.
I SQL Server 2022 med Forespørgselslager aktiveret evaluerer optimeringsprogrammet meget gentagne forespørgsler, der matcher mønstre for CE-modelscenarier, hvor modellen muligvis foretager en forkert antagelse. Optimeringsprogrammet forsøger at teste og kontrollere, om et forespørgselstip kan bruges til at tillade, at forespørgslen kan udføres hurtigere. Når det er bekræftet, at ydeevnen er hurtigere, bevares et forespørgselstip i forespørgselslageret, så det kan bruges til fremtidige udførelser af forespørgsler. Du kan se alle anvendte forespørgselstip til CE-feedback i sys.query_store_query_hints katalogvisning og oplysninger om CE-feedback i sys.query_store_plan_feedback katalogvisning.
CE-feedback bruges ikke, hvis:
- Den ældre CE-model er aktiveret.
- En forespørgselsplan gennemtvinges i forespørgselslageret.
- En forespørgsel har eksisterende tip til forespørgselslageret.
Du kan få flere oplysninger under Feedback om kardinalitetsestimering (CE).
Dop-feedback (Degree of parallelism)
I nogle tilfælde kører optimeringsprogrammet i SQL Server dele af forespørgselsplanen (kaldet operatorer) ved hjælp af parallelitet med flere samtidige tråde. Det antal tråde, der bruges til en forespørgselsplanoperator, kaldes DOP (degree of parallelism). SQL Server kan styre det maksimale antal tråde pr. operator ved hjælp af server, database, ressourcegruppe eller forespørgselsindstillinger kaldet max grad af parallelitet (MAXDOP). Det kan være en kompleks og nogle gange vanskelig øvelse at angive den rette MAXDOP for en SQL Server-installation.
I SQL Server 2022 kan optimeringsprogrammet bruge en teknik kaldet DOP-feedback til at finde parallel effektivitet for en forespørgsel. Parallel effektivitet er den mindste DOP for en forespørgsel, der kan resultere i den samme overordnede forespørgselsvarighed (indregne almindelige ventetider). Reduktion af DOP'en for en forespørgsel kan give flere tråde og CPU-ressourcer til andre forespørgsler eller programmer.
DOP-feedback kræver, at Forespørgselslager er aktiveret, niveau 160 for databasekompatibilitet og en databaseindstilling med navnet DOP_FEEDBACK
, der skal aktiveres. Med disse indstillinger fungerer optimeringsprogrammet i samarbejde med baggrundsopgaver i Forespørgselslager for at søge efter gentagne og langvarige forespørgsler, der kan drage fordel af en lavere DOP. En feedbackcyklus bruges til at validere, at en justeret forespørgselsvarighed ikke går tilbage med en lavere DOP-værdi. Den validerer også, at der er observeret en lavere samlet CPU for forespørgslen. Efter en valideringsperiode anses en lavere DOP for at være stabiliseret og bevares i forespørgselslageret. Optimeringsprogrammet validerer fortsat lavere DOP-værdier trinvist nedad for at finde den bedste parallelle effektivitet eller en minimum-DOP, som er 2. DOP-feedback øger aldrig DOP. Den understøtter MAXDOP-indstillingen for en forespørgsel, afhængigt af hvilken server, database, ressourceguvernør eller forespørgselstip, der anvendes.
DOP-feedback kræver ikke genkompilering, men valideringen undersøges på en ny forespørgselskompilering. Du kan se permanente DOP-feedbackværdier i sys.query_store_plan_feedback katalogvisning. Du kan se, hvad der er den nyeste DOP, der bruges til en forespørgsel, ved hjælp af kolonnen last_dop
fra sys.dm_exec_query_stats dynamisk administrationsvisning og sys.query_store_runtime_stats katalogvisning.
Du kan få flere oplysninger under DOP-feedback (Degree of parallelism).