Tids värden för SQL Server kan vara fel när du använder verktyg eller tekniker som ändrar CPU-frekvenserna

Sammanfattning

I Microsoft SQL Server 2005 används den högupplösta processor räknaren för att tillhandahålla mikrosekunders tids inställningar. En mikrosekund är en millionth av en sekund (eller en thousandth på en millisekund). Tids värden för SQL Server kan emellertid vara fel om du använder teknologier som ändrar CPU-frekvenserna. Det här problemet kan till exempel uppstå om du använder någon av följande tekniker:

  • CPU-version

  • AMD Cool'n'Quiet Technology

  • Olika energi schema

Den här artikeln innehåller metoder och ytterligare information som hjälper dig att undvika problemet.

Symptom

När du använder instruktionen Ställ in tids statistik för att Visa Server körning, parsa och kompileringstid kan du få felaktiga värden. Du kan till exempel se att den förflutna tiden för SQL Server Execution Time är mycket mer än processor tiden. Det här problemet kan påverka prestanda justeringen. Det här problemet uppstår när du använder någon av de tekniker som visas i avsnittet Sammanfattning på servern.

Orsak

Det här problemet beror på att CPU-frekvenserna ändras när du använder dessa tekniker. I SQL Server 2005 används den högupplösta processor räknaren för att tillhandahålla mikrosekunders tids inställningar. Om CPU-frekvenserna ändras för att spara energi och minska värmen kan beräknade varaktigheter vara felaktiga.

Lösning

Information om Service Pack

Lös problemet genom att hämta senaste Service Pack för SQL Server 2005. Mer information får du om du klickar på följande artikel nummer och läser artikeln i Microsoft Knowledge Base:

913089 Skaffa den senaste Service Pack-versionen för SQL Server 2005Obs! I SQL Server 2005 Service Pack 3 och senare Service Pack används inte tidsstämpeln för processorn. I den här versionen av SQL Server 2005 används en mer tillförlitlig timer med en maximal precision på 1 millisekund.

Status

Det här problemet åtgärdades först i SQL Server 2005 Service Pack 3.

Lösning

SQL Server 2005 kräver kända och stabila data punkter för att utföra korrekt prestanda justering. Om dynamisk justering av CPU-frekvens är aktiverat på datorn kan du avaktivera dem så att de alltid har en konstant frekvens innan du börjar övervaka och justera SQL Server-prestanda. Gör så här:

Konfigurera energischemat på datorn för att tvinga CPU-processorerna att ha maximal frekvens

Gör så här:

  1. Klicka på Start, klicka på Kör, Skriv powercfg. cploch klicka sedan på OK.

  2. I dialog rutan Egenskaper för energi alternativ klickar du på alltid i listan energi schema .

  3. Klicka på OK.

En drift kan uppkomma. En drift är en avvikelse mellan frekvens värden för processorer. Mer information finns i avsnittet "drift". I det här fallet måste du starta om Microsoft Windows för att synkronisera om frekvenserna för alla processorer när du har ändrat energi schema. Om du inte kan starta om datorn aktiverar du SQL Server-processor tillhörighet för att förhindra att arbets trådar i SQL Server flyttas mellan processorer. När du gör det behöver du inte starta om datorn, även om det finns en avvikelse mellan värdena i CPU-frekvensen. Om du vill aktivera SQL Server-processor tillhörighet för alla processorer på servern måste du använda en annan mask, beroende på hur många logiska processorer som finns på servern. I följande tabell visas exempel scenarier.

CPU-nummer

Satser för att aktivera processor tillhörighet

02 processorer

exec sp_configure ' tillhörighets mask ', 0x00000003GOreconfigureGO

04 processorer

exec sp_configure ' tillhörighets mask ', 0x0000000FGOreconfigureGO

08 CPU

exec sp_configure ' tillhörighets mask ', 0x000000FFGOreconfigureGO

16 processorer

exec sp_configure ' tillhörighets mask ', 0x0000FFFFGOreconfigureGO

32 processorer

exec sp_configure ' tillhörighets mask ', 0xFFFFFFFFGOreconfigureGO

Obs! Det kan vara otillräckligt att inaktivera processor frekvensens Variations funktioner på BIOS-nivån. Olika program från tredje part kan ändra CPU-frekvenserna. Vissa implementeringar möjliggör frekvens justeringar även när processorerna har maximalt energi schema inställningar. I det här fallet måste du inaktivera dessa verktyg från tredje part när du utför prestanda justering i SQL Server 2005.

Använda tredjepartsprogram och driv rutiner för att synkronisera räknare för CPU-frekvens och CPU-klocka

I sällsynta fall kan ett system kräva en uppdatering från tillverkaren för att åtgärda problem med CPU-frekvensen. Det är en bra idé att kontrol lera systemet med de senaste uppdateringarna av BIOS, mikrokoder och inbyggd program vara om du misstänker att systemet kan ha problem.

Mer information

Microsoft SQL Server 2000 och tidigare versioner av SQL Server använder Windows tids inställningar. Tidsmekanismer använder värden i millisekunder. Vanligt vis är denna precision 10 till 15 MS. Precisionen kan vara så stor som 55 MS. SQL Server-frågor är ofta fullständiga inom ensiffriga millisekunder eller andra tids perioder. Denna precision kräver en timer med hög upplösning. Därför rapporterar de här versionerna av SQL Server varaktigheten för vissa frågor som 0 MS. Därför är det svårt att övervaka prestanda och justera SQL Server-prestanda i tidigare versioner av SQL Server. SQL Server 2005 förbättrar noggrannheten genom att använda den högupplösta processor räknaren för att tillhandahålla mikrosekunders tids inställningar. När du använder den teknik som visas i avsnittet "Sammanfattning" kan de rapporterade tids inställningarna vara felaktiga. Det här problemet kan påverka följande objekt och funktioner:

  • Spåra händelser:

    • Attention -händelse

    • Händelser i noden lagrade procedurer

    • Händelser i TSQL-noden

    • Händelser i noden objekt

    • Händelser i noden transaktioner

  • Vyer för dynamisk hantering:

    • 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

  • Tidskommandot för ange statistik

  • System tabellen sysprocesses

När du har installerat SQL Server 2005 Service Pack 2 (SP2) loggar SQL Server ett fel meddelande i fel loggen när SQL Server upptäcker att timers för hög upplösning inte är synkroniserade mellan processorerna. Fel meddelandet indikerar att prestanda begränsningar kanske inte är korrekta och att användarna bör använda prestanda data med försiktighet. Fel meddelandets text ser ut ungefär så här:

Felmeddelande 1

Tidsstämpelns räknare för CPU för Schemaläggaren-ID 2 är inte synkroniserad med andra processorer.

Felmeddelande 2

Frekvensen för CPU-tidsstämpeln har ändrats från 191469 till 1794177 Tick per millisekund. Den nya frekvensen används

SQL Server använder den faktiska tidsstämpeln (RDTSC)-instruktionen för att hämta 64-bitars antalet processor Tick. Du kan dividera det här värdet med CPU-frekvensen för att konvertera värdet till tusendels värden. Tids variationer kan uppstå när CPU-frekvensen ändras eller inträffar.

CPU-version

CPU-stegning definieras som en avsiktlig ändring i CPU-frekvensen. CPU-stegnings kan även kallas Intel SpeedStep Technology eller AMD PowerNow! teknik. När CPU-stegnings inträffar kan CPU-hastigheten öka eller minska med steg så mycket som 50 MHz för att spara energi och minska värmen. Processorer som är inom samma NUMA-nod (nonuniform Memory Access) kan inte justera frekvenserna oberoende av varandra. I följande tabell visas hur du kan få tids beräkningar genom att ändra inställningen för CPU-steg.

Fattning

RDTSC-Tick

Tick per millisekund (frekvens)

Sidoyta klocka

Starta batch

1

200

siffrorna

Frekvens steg nedåt

200

100

1ms

Avsluta batch

500

3ms

SUMMOR

500

4ms

SQL Server fångar in RDTSC-markeringarna i både start-och slut RDTSC. Då delar SQL Server markeringarna efter frekvens svärdet. I det här exemplet sker följande tids beräkningar när du använder ett frekvens värde på 200 eller 100:

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

  • Frekvens 100: 500/100 = 5 MS

Ingen av tids beräkningarna matchar den faktiska vägg klockan på 4 MS. Om den här beräkningen används i en RPC: spårnings händelse rapporteras kolumnerna varaktighet och slut tid till fel. RPC: Complete -händelsen samlar in start tid och antal processor Tick. För att få högre upplösning än Windows-produkter i SQL Server 2005, beräknas kolumnerna varaktighet och slut tid i en SQL Server-spårning med antalet processor Tick som förflutit. Kolumnen slut tid beräknas genom att lägga till kolumnen varaktighet i kolumnen Start tid . I det här exemplet beräknas kolumnen slut tid genom att lägga till antingen 2,5 MS eller 5 ms till Start tiden.

Punkt

Drivgarn är en avvikelse i CPU-klockans värden. System som har flera processorer kan ge olika processor klock värden för samma tidpunkt. Även om det inte är ovanligt kan processorer få klock separationer över tid. I följande exempel visas hur avvikelse ändringar kan påverka resultatet av kolumnen varaktighets data i en SQL Server-spårning. I exemplet förutsätts det att CPU-frekvensen förblir konstant vid 200 Tick per millisekund. I följande tabell visas händelserna i det här scenariot.

Fattning

Windows-schemalagd processor

CPU 1-RDTSC

CPU 2-RDTSC

Sidoyta klocka

Starta batch

1

100

1100

siffrorna

Avsluta batch

2

900

1900

4 MS

SUMMOR

4 MS

SQL Server fångar in RDTSC-markeringarna i både start-och änd punkterna. Då dividerar SQL Server RDTSC-markeringarna med frekvens svärdet. I det här exemplet har Windows schemalagt SQL Server Worker-tråden på två olika processorer. Den SQL Server Worker-tråd som tjänst gruppen kördes först på den första processorn (CPU 1). Men grupp körningen avbröts vid något tillfälle och SQL-servern skickade batchprocessen till den väntande kön. När SQL Server har skickat den SQL Server Worker-tråd som utför den här gruppen till runnable-kön igen avsände Windows tråden att köras på den andra processorn (CPU 2). Arbets tråd för SQL Server som körs på CPU 2. På grund av CPU-avvikelsen var 1900 i stället för 900. Du kan undvika det här problemet om du aktiverar processor tillhörighet för SQL Server. Följande tids beräkningar används i det här exemplet:

  • Felaktigt men rapporterat värde: (1900 – 100 = 1800)/200 = 9 MS

  • Korrigera värde: (900 – 100 = 800)/200 = 4 MS

Värdet för kolumnen varaktighet för händelsen RPC: slutfört rapporteras som 9 ms i stället för 4 MS. Det här är mer än dubbelt så lite som det korrekta värdet på 4 MS. Varnings meddelanden för drivgarn läggs till i SQL Server 2005 för att indikera att prestanda utmatningen som nämns ovan kanske inte är tillförlitliga. I vissa situationer kan SQL Server 2005 SP2 rapportera varnings meddelanden om följande:

  • Felaktiga varnings meddelanden

  • Driften kan bli ett par sekunder utan att orsaka en märkbar system effekt

Du måste vara försiktig när du utvärderar resultat relaterade utdata och när du jämför prestanda relaterade utdata med tids inställningar för sidoyta. Om det inte finns några tecken på andra prestanda problem kan du oftast bortse från varnings meddelandena. Du kan till exempel normalt bortse från varnings meddelandena i följande situationer:

  • Processer körs som förväntat.

  • SQL Server-frågor körs inte i onormala varaktigheter.

  • Du ser inte tecken på andra Flask halsar.

Men innan du ignorerar varnings meddelandena rekommenderar vi att du kontaktar tillverkaren för att se till att inga kända RDTSC problem uppstår. Du kan använda trace flaggan 8033 (– T8033) för att återgå till rapporterings beteendet i den ursprungliga versionen av SQL Server 2005 och i SQL Server 2005 SP1. Den ursprungliga versionen av SQL Server 2005 och SQL Server 2005 SP1 rapporterar inte varnings meddelanden. Om du kör den ursprungliga versionen av SQL Server 2005 eller SQL Server 2005 SP1 utan problem kan du normalt bortse från meddelandena.

Varför fungerar WAITFOR-programsatsen? Vad händer med periodiska system processer?

Funktioner för tids gräns påverkas inte av den högupplösta designen. I SQL Server används inte timer med hög upplösning för tidsinställda aktiviteter. Vissa tids gräns aktiviteter är baserade på den timer för minskad upplösning som använder funktionen GetTickCount . Dessa tids gräns uppgifter inkluderar låsnings-timeout, WAITFOR DELAY-satsen och identifiering av deadlock.

Mer information får du om du klickar på följande artikel nummer och läser artiklarna i Microsoft Knowledge Base:

938448 En Windows Server 2003-baserad server kan uppleva Tidsstämpelns fördröjning om servern använder Dual-Core AMD Opteron-processorer eller multiprocessor AMD Opteron-processorer

895980 Program som använder funktionen QueryPerformanceCounter kan fungera dåligt i Windows Server 2003 och Windows XPDe produkter från tredje part som diskuteras i den här artikeln tillverkas av företag som är oberoende av Microsoft. Microsoft ger ingen garanti, underförstådda eller annat, om dessa produkters prestanda eller pålitlighet.

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

×