SQL Server tidsberegning verdier kan være feil når du bruker verktøy eller teknologier som endrer CPU frekvenser

Sammendrag

Microsoft SQL Server 2005 bruker CPU telleren med høy oppløsning som gir muligheter for tidsberegning av microsecond. En microsecond er en millionth av et sekund (eller en 6 av et millisekund). SQL Server tidsberegning verdiene kan imidlertid være feil hvis du bruker teknologier som endrer CPU-frekvenser. Dette problemet kan oppstå når du bruker noen av følgende teknologier:

  • CPU stepping

  • AMD Cool'n'Quiet teknologi

  • Ulike strømoppsett

Denne artikkelen inneholder metoder og tilleggsinformasjon som skal hjelpe deg med å løse dette problemet.

Symptomer

Når du bruker STATISTIKK for angi klokkeslett-setningen til å vise Serverutføringen, behandle og kompilering klokkeslett, kan du få uriktige verdier. For eksempel kan det hende at det er mye mer CPU-tid enn tiden for utførelsestid for SQL Server. Dette problemet kan påvirke nøyaktigheten av ytelsesjustering. Dette problemet oppstår når du bruker en av teknologiene som er oppført i delen "Sammendrag" på serveren.

Årsak

Dette problemet oppstår fordi CPU frekvenser endres når du bruker disse teknologiene. SQL Server 2005 bruker CPU telleren med høy oppløsning som gir muligheter for tidsberegning av microsecond. Hvis CPU-frekvenser er endret for å spare energi og redusere varme utdata, kan beregnede varighetene være feil.

Oppløsning

Informasjon om oppdateringspakke

Hvis du vil løse dette problemet ved å få tak i den nyeste oppdateringspakken for SQL Server 2005. Hvis du vil ha mer informasjon, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

913089 hvordan du får tak i den nyeste oppdateringspakken for SQL Server 2005
Obs! Tidsstempel for prosessor brukes ikke i SQL Server 2005 Service Pack 3, og i senere oppdateringspakker. Disse versjonene av SQL Server 2005 bruker et mer pålitelig tidtaker som har en maksimal presisjon av 1 millisekund.

Status

Dette problemet ble først løst i SQL Server 2005 Service Pack 3.

Løsningen

SQL Server 2005 krever kjente og stabile datapunkter som skal utføre nøyaktige ytelsesjustering. Hvis dynamisk CPU frekvens justeringer er aktivert på datamaskinen, kan du deaktivere dem så CPUene beholde en jevn frekvens hastighet før du begynner å overvåke og justere ytelsen i SQL Server. Hvis du vil gjøre dette, kan du bruke følgende metoder.

Konfigurere strømoppsettet på datamaskinen for å tvinge CPUer forblir maksimal frekvens

Følg disse trinnene:

  1. Klikk Start, Kjør, Skriv inn Powercfg.cpl, og klikk deretter OK.

  2. I dialogboksen Egenskaper for Strømalternativer klikker du Alltid på i listen strømoppsett .

  3. Klikk på OK.

En Jorge kan oppstå. En Jorge er et avvik mellom verdier for CPU-frekvens. Hvis du vil ha mer informasjon, se delen "Jorge". I så fall må du starte Microsoft Windows Hvis du vil synkronisere frekvenser for alle prosessorer på nytt etter at du endre strømoppsettet.

Hvis du ikke kan starte datamaskinen på nytt, må du aktivere SQL Server prosessoraffinitet å hindre at SQL Server arbeidstråder flytte mellom CPUer. Når du gjør dette, har du ikke å starte datamaskinen på nytt selv om det oppstår et avvik mellom verdier for CPU-frekvens. Hvis du vil aktivere prosessoraffinitet for SQL Server for alle prosessorer på serveren, må du bruke en annen maske, avhengig av hvor mange logiske prosessorer som er på serveren.

Tabellen nedenfor viser Eksempelscenarier.

CPU-nummer

Setninger for å aktivere prosessoraffinitet

02 CPUer

EXEC sp_configure affinity mask, 0x00000003

konfigurere på nytt

04 CPUer

EXEC sp_configure affinity mask, 0x0000000F

konfigurere på nytt

08 CPUer

EXEC sp_configure affinity mask, 0x000000FF

konfigurere på nytt

16 CPUer

EXEC sp_configure affinity mask, 0x0000FFFF

konfigurere på nytt

32 CPUer

EXEC sp_configure affinity mask, 0xFFFFFFFF

konfigurere på nytt

Obs! Det kan være tilstrekkelig til å deaktivere CPU frekvens variasjonsfunksjoner på BIOS-nivå. Flere tredjepartsverktøy kan endre CPU-frekvenser. Enkelte implementeringer aktivere frekvens justeringer, selv når CPUene er under innstillinger for maksimal strømoppsett. I dette tilfellet må du deaktivere disse tredjeparts-verktøy når du utfører ytelsesjustering i SQL Server 2005.

Bruke tredjeparts verktøy og drivere til å synkronisere frekvenser for CPU og CPU-klokken tellere

I sjeldne tilfeller kan et system krever en oppdatering fra produsenten for å rette opp problemer for CPU-frekvens. Det er lurt å kontrollere systemet for de siste oppdateringene for BIOS, mikrokode og fastvare Hvis du tror at systemet kan ha et problem.

Hvis du vil ha mer informasjon

Microsoft SQL Server 2000 og tidligere versjoner av SQL Server bruker Windows tidsberegning mekanismer. Tidsberegning mekanismene bruke millisekunders presisjon verdier. Vanligvis dette presisjon er 10 til 15 FR. imidlertid, presisjonen kan være like stor som 55 ms. SQL Server-spørringer som ofte er fullført innen ett siffer millisekunder eller går over i microsecond tid. Denne precision krever en høy oppløsning tidtaker. Disse versjonene av SQL Server-rapport varigheten av noen spørringer som 0 FR. Derfor, det er derfor vanskelig å overvåke ytelsen og justere ytelsen i SQL Server i tidligere versjoner av SQL Server.

SQL Server 2005 forbedrer nøyaktigheten ved hjelp av høy oppløsning CPU telleren for å gi muligheter for tidsberegning av microsecond. Når du bruker teknologier som er oppført i delen "Sammendrag", kan det være feil rapportert timing-verdier.

Dette problemet kan påvirke følgende objekter og funksjoner:

  • Spore hendelser:

    • Hendelsen oppmerksomhet

    • Hendelser i noden lagrede prosedyrer

    • Hendelser i noden TSQL

    • Hendelser i noden objekter

    • Hendelser i transaksjoner-node

  • Behandling av dynamiske visninger:

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_sessions

    • sys.dm_io_pending_io_requests


    • sys.dm_os_ring_buffers

    • sys.dm_os_sys_info

    • sys.dm_io_virtual_file_stats

    • sys.dm_os_wait_stats

  • Angi STATISTIKK klokkeslett-setningen

  • Tabellen sysprocesses system

Når du installerer SQL Server 2005 Service Pack 2 (SP2), logger SQL Server en feilmelding i feilloggen når SQL Server oppdager at høy oppløsning-tidtakere er synkronisert mellom CPUene. Feilmeldingen angir at ytelsen Tidsberegning er ikke kanskje nøyaktig, og brukere bør bruke ytelsesdata med forsiktighet.

Teksten i feilmeldingen ligner på en av følgende feilmeldinger:

Feilmelding 1

Tid stempel teller for prosessor på jobbskjema-id 2 er ikke synkronisert med andre prosessorer.

Feilmelding 2

CPU tid stempel frekvens er endret fra 191469 til 1794177 tikk per millisekunder. Ny frekvensen vil bli brukt.

SQL Server bruker instruksjonen sanntid stempel teller (RDTSC) til å hente 64-biters CPU tick-teller. Du kan dele denne verdien med CPU-frekvensen til å konvertere verdien til verdier i millisekunder. Tidsberegning variasjoner kan forekomme når CPU frekvens endringer eller Jorge oppstår.

CPU stepping

CPU stepping er definert som en bevisst endring i CPU-frekvens. CPU stepping er også kjent som Intel SpeedStep-teknologi eller AMD PowerNow! teknologi. Når CPU stepping oppstår, CPU-hastighet som kan øke eller redusere i intervaller så små som 50 MHz til å spare energi og redusere varme utdata. CPUer som er innenfor den samme ikke-uniform memory access (NUMA) noden justere ikke frekvenser uavhengig av hverandre.

Tabellen nedenfor illustrerer hvordan CPU stepping endringer kan påvirke tidsberegningen beregninger.

Handlingen

RDTSC merker

Tikk per millisekunder (frekvens)

Vegg klokke

Start kjørselen

1

200

0

Frekvens trinn ned

200

100

1ms

Slutt satsvis

500

3ms

TOTALER

500

4ms

SQL-serveren registrerer RDTSC-merker på starten og slutten av RDTSC-tikk. SQL Server deler deretter avmerkingen ved Frekvensverdien.

I dette eksemplet utføres følgende tidsberegning beregninger når du bruker Frekvensverdien 200 eller 100:

  • Frekvens 200: 500/200 = 2,5 ms

  • Frekvens 100: 500/100 = 5 ms

Ingen av timing beregningene samsvarer med faktisk vegg klokke av 4 ms.

Hvis denne beregningen er brukt i en RPC: fullført spor hendelse, varighet og Sluttid datakolonner rapporteres på feil måte. Den RPC: fullført hendelsen registrerer vegg klokke starttidspunktet og CPU Merk av for antall. Hvis du vil ha høyere oppløsning tidsberegning enn Windows leverer i SQL Server 2005, varighet og Sluttid datakolonner i en SQL Server beregnes spor ved hjelp av utvidede CPU tick-teller. Sluttidspunkt -kolonne beregnes ved å legge til varighet -kolonnen til kolonnen Starttidspunkt . I dette eksemplet beregnes Sluttidspunkt -kolonnen ved å legge enten 2,5 ms eller 5 ms feilaktig til starttidspunktet.

Jorge

Jorge er et avvik i CPU klokkeverdier. Systemer som har flere prosessorer, kan produsere forskjellige verdier for CPU-klokken for det samme punktet i tid. Selv om det ikke er vanlig, oppleve CPUer klokke separasjon over tid.

Det følgende eksemplet viser hvordan Jorge endringer kan påvirke utfallet av varighet -kolonnen for data i en SQL Server-sporing. Det antas at CPU-frekvens forblir jevn på 200 tikk per millisekunder. Følgende tabell viser hendelser i dette scenariet.

Handlingen

Planlagte Windows-CPU

PROSESSOR 1 RDTSC

CPU 2 RDTSC

Vegg klokke

Start kjørselen

1

100

1100

0

Slutt satsvis

2

900

1900

4 ms

TOTALER

4 ms

SQL-serveren registrerer RDTSC-merker på punktene start- og endepunktene. SQL Server dividerer deretter, RDTSC-tikk med Frekvensverdien. I dette eksemplet planlagt Windows Arbeidstråden SQL Server på to forskjellige CPUer. Arbeidstråden for SQL Server som betjener den satsvise jobben gikk først på første Prosessoren (CPU-1).

Imidlertid satsvis kjøring ble avbrutt på et bestemt tidspunkt, og SQL Server sendes satsvis kjøring til venter køen. Når SQL Server sendt SQL Server-tråd som betjener denne satsvise jobben til køen runnable på nytt, sendes Windows tråd som skal kjøre på andre Prosessoren (CPU-2). Arbeidstråden for SQL Server fullført kjører på CPU-2. På grunn av CPU-Jorge var tick sluttverdien som ble tatt fra CPU 2 1900 i stedet for 900. Du kan unngå dette problemet hvis du bruker SQL Server-prosessoraffinitet.

I dette eksemplet brukes følgende tidsberegning beregninger:

  • Feil men rapporterte verdi: (1900 – 100 = 1800) / 200 = 9 ms

  • Rette verdien: (900 – 100 = 800) / 200 = 4 ms

Verdien for varighet -kolonnen for den RPC: fullført hendelsen vil bli rapportert som 9 ms i stedet for 4 ms. Dette resultatet er mer enn doble den riktige verdien 4 ms.

Jorge advarsler blir lagt til SQL Server 2005 til å angi at ytelse-utganger som er nevnt tidligere kan være pålitelig. I noen tildekkede situasjoner, kan SQL Server 2005 SP2 rapportere advarsler om følgende:

  • Jorge falske advarsler

  • Jorge kan bli titalls millisekunder uten å forårsake en merkbar system-effekt

Du må være forsiktig når du evaluerer ytelsesrelaterte-utganger, og når du sammenligner ytelsesrelaterte utdataene til veggen klokke-tidsberegninger. Hvis det er ingen tegn på andre problemer, kan du vanligvis ignorere advarslene Jorge. Du kan for eksempel vanligvis ignorere advarslene Jorge i følgende situasjoner:

  • Prosesser som kjører som forventet.

  • SQL Server-spørringer, kjører ikke i merkelige durational mønstre.

  • Du kan ikke se tegn på andre flaskehalser.

Men før du ignorere Jorge advarsler, anbefaler vi at du kontakter finnes produsenten for å forsikre deg om at ingen kjente RDTSC problemer.

Du kan bruke sporingsflagg 8033 (-T8033) å gå tilbake til rapportering virkemåten i den opprinnelige versjonen av SQL Server 2005 og SQL Server 2005 SP1. Den opprinnelige versjonen av SQL Server 2005 og SQL Server 2005 SP1 ikke rapporterer Jorge advarsler. Hvis du kjører den opprinnelige versjonen av SQL Server 2005 eller SQL Server 2005 SP1 uten problemer, kan du vanligvis ignorere meldingene.

Hvorfor WAITFOR FORSINKELSE setningen fungerer på riktig måte? Hva om periodiske systemprosesser?

Tidsavbrudd mekanismer påvirkes ikke av høy oppløsning design. SQL Server bruker ikke med høy oppløsning tidtakeren for tidtaker-baserte aktiviteter. Enkelte tidsavbrudd for aktiviteter er basert på den reduserte oppløsning tidtakeren som bruker funksjonen GetTickCount . Disse tidsavbrudd aktiviteter inkluderer Lås tidsavbrudd, WAITFOR FORSINKELSE setningen og oppdaging av vranglås.

Hvis du vil ha mer informasjon, kan du klikke følgende artikkelnumre for å vise artiklene i Microsoft Knowledge Base:

938448 A Windows Server 2003-basert server kan oppleve tidsstempel teller Jorge Hvis serveren bruker tokjerners AMD Opteron-prosessorer eller AMD Opteron-prosessorer med flere prosessorer

895980 programmer som bruker funksjonen QueryPerformanceCounter kan gi dårlig effekt i Windows Server 2003 og Windows XP

Tredjepartsprodukter som beskrives i denne artikkelen, produseres av selskaper som er uavhengige av Microsoft. Microsoft gir ingen garantier, stilltiende eller på annen måte, om ytelsen eller påliteligheten til disse produktene.

Trenger du mer hjelp?

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Microsoft Insiders

Var denne informasjonen nyttig?

Takk for tilbakemeldingen!

Takk for tilbakemeldingen! Det høres ut som det kan være lurt å sette deg i kontakt med én av våre Office-kundestøtteagenter.

×