SQL Server timingwaarden worden onjuist wanneer u hulpprogramma's en technologieën die CPU-frequentie wijzigen


Samenvatting


Microsoft SQL Server 2005 wordt de teller met hoge resolutie CPU microseconden timing mogelijkheden bieden. Een microseconde is één miljoenste van een seconde (of één duizendste van een milliseconde). SQL Server timingwaarden mogelijk onjuist als het gebruik van technologieën die CPU frequenties te wijzigen. Dit probleem kan bijvoorbeeld optreden als u een van de volgende technologieën:
  • CPU stepping
  • AMD Cool'n'Quiet-technologie
  • Verschillende energiebeheerschema 's
Dit artikel bevat methoden en meer informatie kunt u dit probleem omzeilen.

Symptomen


Wanneer u met de instructie SET STATISTICS TIME server worden uitgevoerd, parse en compilatie tijden weergeven, u onjuiste waarden. Bijvoorbeeld, zult u merken dat de verstreken tijd van de uitvoeringstijd voor SQL Server veel meer dan de CPU-tijd is. Dit probleem kan invloed hebben op de nauwkeurigheid van het afstemmen van prestaties. Dit probleem treedt op wanneer u een van de technologieën die worden vermeld in de sectie 'Samenvatting' op de server.

Oorzaak


Dit probleem treedt op omdat de CPU frequenties worden gewijzigd wanneer u deze technologieën gebruiken. SQL Server 2005 wordt de teller met hoge resolutie CPU microseconden timing mogelijkheden bieden. Als de CPU frequenties worden gewijzigd om energie te besparen en verminderen de warmteafgifte, berekende duur niet correct.

Oplossing


Informatie over het service pack

U lost dit probleem, het meest recente servicepack voor SQL Server 2005 te verkrijgen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
913089 het verkrijgen van het meest recente servicepack voor SQL Server 2005
Opmerking De tijdstempel van de processor is niet gebruikt in SQL Server 2005 Service Pack 3 en in latere servicepacks. Deze versies van SQL Server 2005 gebruiken een meer betrouwbare timer met een maximale precisie van 1 milliseconde.

Status


In SQL Server 2005 Service Pack 3 is voor het eerst een correctie aangebracht voor dit probleem.

Tijdelijke oplossing


SQL Server 2005 vereist bekende stabiele gegevenspunten voor het uitvoeren van nauwkeurige prestaties afstemmen. Als dynamische CPU frequentie aanpassingen zijn ingeschakeld op de computer, kunt u ze uitschakelen zodat de CPU's een constante frequentie, onderhouden voordat u begint met het controleren en afstemmen van de prestaties van SQL Server. U doet dit door de volgende methoden te gebruiken.

Het schema configureren op de computer te dwingen de CPU's te handhaven op de maximale frequentie

Ga hiervoor als volgt te werk:
  1. Klik op Start, klik op uitvoeren, typ Powercfg.cplen klik vervolgens op OK.
  2. Klik in het dialoogvenster Eigenschappen voor energiebeheer op Altijd op in de lijst met energiebeheerschema's .
  3. Klik op OK.
Drift kan optreden. Drift is een geschil tussen de waarden van CPU-frequentie. Zie de sectie 'Drift' voor meer informatie. In dit geval moet u Microsoft Windows als u wilt synchroniseren van frequenties van alle CPU's na het wijzigen van het schema opnieuw.

Als u de computer niet kunt starten, kunnen de processoraffiniteit SQL Server om te voorkomen dat SQL Server worker-threads verplaatsen tussen CPU's. Wanneer u dit doet, er geen de computer opnieuw opstarten, zelfs als er een geschil tussen de waarden van CPU-frequentie optreedt. Als u wilt dat SQL Server de processoraffiniteit voor alle processors op de server, moet u een ander masker, afhankelijk van het aantal logische processors op de server.

De volgende tabel bevat een voorbeeld van de scenario's.
CPU-nummerOverzichten processoraffiniteit inschakelen
02 CPU 'sexec sp_configure 'affinity mask', 0x00000003
GO
opnieuw configureren
GO
04-CPU 'sexec sp_configure 'affinity mask', 0x0000000F
GO
opnieuw configureren
GO
08-CPU 'sexec sp_configure 'affinity mask', 0x000000FF
GO
opnieuw configureren
GO
16 CPU 'sexec sp_configure 'affinity mask', 0x0000FFFF
GO
opnieuw configureren
GO
32 CPU 'sexec sp_configure affinity mask, 0xFFFFFFFF
GO
opnieuw configureren
GO
Opmerking Het is mogelijk onvoldoende CPU frequentie variatiefuncties op het niveau van het BIOS uitschakelen. Verschillende hulpprogramma's van derden kunnen veranderen als u CPU-frequentie. Sommige implementaties inschakelen frequentie aanpassingen, zelfs wanneer de CPU's onder de maximale energiebeheerschema-instellingen zijn. In dit geval moet u deze hulpprogramma's van derden uitschakelen wanneer u prestaties afstemmen in SQL Server 2005 uitvoert.

Stuurprogramma's en hulpprogramma's van derden gebruiken voor het synchroniseren van CPU frequenties en CPU klok items

Soms kan een systeem vereist een update van de fabrikant om CPU frequentie problemen te verhelpen. Het is raadzaam het systeem voor de nieuwste BIOS, microcode- en firmware-updates controleren als u vermoedt dat het systeem een probleem kan zijn.

Meer informatie


Microsoft SQL Server 2000 en eerdere versies van SQL Server gebruikt de Windows timing mechanismen. De timing mechanismen milliseconde precision waarden gebruiken. Meestal is 10 tot 15 mevrouw echter deze precisie, de precisie 55 ms zo groot kan worden. SQL Server-query's vaak volledig binnen één cijfer milliseconden of microseconden tijd omspant. Deze precisie vereist een timer met een hoge resolutie. Daarom deze versies van SQL Server-rapport de duur van sommige query's als 0 mevrouw daarom is het moeilijk om de prestaties controleren en afstemmen van de prestaties van SQL Server in eerdere versies van SQL Server.

SQL Server 2005 verbetert de nauwkeurigheid door het hoge CPU-item gebruikt om de mogelijkheden van microseconden timing. Wanneer u de technologieën die worden vermeld in de sectie 'Samenvatting', is de van gerapporteerde timingwaarden mogelijk onjuist.

Dit probleem kan invloed hebben op de volgende objecten en functies:
  • Gebeurtenissen traceren:
    • De gebeurtenis aandacht
    • Gebeurtenissen in het knooppunt voor opgeslagen Procedures
    • Gebeurtenissen in het knooppunt TSQL
    • Gebeurtenissen in het knooppunt Groepsbeleidsobjecten
    • Gebeurtenissen in het knooppunt transacties
  • Beheer van dynamische weergaven:
    • 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
  • De instructie SET STATISTICS TIME
  • De systeemtabel sysprocesses
Nadat u SQL Server 2005 Service Pack 2 (SP2) hebt geïnstalleerd, vastgelegd SQL Server een foutbericht in het foutenlogboek, wanneer SQL Server detecteert dat de hoge resolutie timers gesynchroniseerd tussen de CPU's worden. Het foutbericht geeft aan dat prestaties tijdsinstellingen zijn mogelijk niet nauwkeurig en gebruikers prestatiegegevens met de nodige omzichtigheid moeten gebruiken.

De tekst van het foutbericht ziet er als een van de volgende foutberichten weergegeven:
Foutbericht 1
Stempel teller voor de tijd van de CPU op scheduler-id 2 is niet gesynchroniseerd met andere processors.
Foutbericht 2
CPU-tijdstempel frequentie is gewijzigd van 191469 naar 1794177 maten per milliseconde. De nieuwe frequentie wordt gebruikt
De delta tussen teller (Real Time stempel RDTSC) instructie SQL Server gebruikt voor het verkrijgen van het aantal tikken van 64-bits processor. U kunt deze waarde delen door de CPU-frequentie worden geconverteerd naar waarden in milliseconden. Timing variaties kunnen optreden wanneer de CPU frequentie wijzigingen of drift plaatsvindt.

CPU stepping

CPU stepping is gedefinieerd als een doelbewuste wijziging in CPU-frequentie. CPU stepping mogelijk ook bekend als de technologie van Intel SpeedStep of AMD PowerNow! -technologie. Wanneer CPU stepping optreedt, de CPU-snelheid kan vergroten of verkleinen in stappen van minimaal 50 MHz om energie te besparen en minder warmte. CPU's binnen hetzelfde knooppunt voor de niet-uniform memory access (NUMA) wijzigen frequenties niet onafhankelijk van elkaar.

De volgende tabel ziet u CPU stepping invloed van wijzigingen timing berekeningen.
ActieDelta tussen RDTSC matenMaten per milliseconde (frequentie)Wand klok-tijd
Begin Batch12000
Frequentie stap omlaag2001001ms
Einde Batch5003ms
TOTALEN5004ms
SQL Server worden vastgelegd voor de delta tussen RDTSC tikken op de begin- en einddatum delta tussen RDTSC tikken. SQL Server wordt de maten vervolgens gedeeld door de frequentiewaarde.

In dit voorbeeld wordt optreden de volgende timing berekeningen wanneer u de frequentiewaarde van een van 200 of 100:
  • Frequentie 200: 500/200 = 2,5 ms
  • Frequentie 100: 500/100 = 5 ms
Geen van de berekeningen van timing komt overeen met de werkelijke wand klok-tijd van 4 ms.

Als deze berekening wordt gebruikt in een RPC: voltooid trace gebeurtenis, de duur en eindtijd gegevenskolommen ten onrechte worden gemeld. De RPC: voltooid gebeurtenis worden vastgelegd voor de begintijd van een wand klok en CPU Vink tellen. Voor een hogere resolutie timing dan Windows in SQL Server 2005, de duur en eindtijd gegevenskolommen in een SQL-Server levert trace berekend met behulp van het aantal verstreken CPU tikken. De kolom einddatum wordt berekend door de kolom duur toe te voegen aan de kolom die de begintijd . In dit voorbeeld wordt wordt de kolom einddatum berekend ten onrechte ms 2,5 of 5 ms toevoegen aan de begintijd.

Drift

Drift is een afwijking in de twaalfuursklok CPU. Systemen met meerdere processoren kunnen leiden tot verschillende CPU klokwaarden voor hetzelfde punt in de tijd. Hoewel het niet gemeenschappelijk kunnen CPU's klok scheiding na verloop van tijd optreden.

In het volgende voorbeeld wordt gedemonstreerd hoe drift wijzigingen invloed hebben op de uitkomst van de kolom duur in een SQL Server-trace. In het voorbeeld wordt ervan uitgegaan dat de CPU-frequentie gestaag op 200 tikken per milliseconde blijft. De volgende tabel ziet u de gebeurtenissen in dit scenario.
ActieWindows CPU geplandDELTA TUSSEN RDTSC CPU 1DELTA TUSSEN RDTSC CPU 2Wand klok-tijd
Begin Batch110011000
Einde Batch290019004 ms
TOTALEN4 ms
SQL Server legt de delta tussen RDTSC maten op zowel het begin en de eindpunten vast. SQL Server wordt de delta tussen RDTSC maten vervolgens gedeeld door de frequentiewaarde. In dit voorbeeld wordt de geplande Windows de werkthread SQL Server op twee verschillende processors. Eerste gedeelte van de werkthread in SQL Server die de batch-services op de eerste CPU (CPU-1).

Echter de batchverwerking kan worden uitgevoerd op een bepaald moment is onderbroken en SQL Server de Batchuitvoering verzonden naar de wachtrij in behandeling. Wanneer SQL Server de werkthread in SQL Server die services deze batch naar de runnable wachtrij opnieuw verzonden, verzonden Windows de thread uit te voeren op de tweede CPU (CPU-2). De SQL Server-werkthread voltooid op 2 CPU. De tick waarde die is vastgelegd vanuit 2 CPU is door CPU-drift 1900 in plaats van 900. U kunt dit probleem voorkomen als u SQL Server de processoraffiniteit inschakelen.

De volgende timing berekeningen worden gebruikt in dit voorbeeld:
  • De onjuiste maar aangegeven waarde: (1900 – 100 = 1800) / 200 = 9 ms
  • Waarde: (900 – 100 = 800) / 200 = 4 ms
De waarde van de kolom duur voor de RPC: voltooid gebeurtenis zou worden gerapporteerd als 9 ms in plaats van 4 mevrouw dit resultaat is de juiste waarde van 4 ms meer dan verdubbelen.

Drift waarschuwingsberichten worden toegevoegd aan de SQL Server 2005 om aan te geven dat de prestaties van eerder genoemde uitgangen mogelijk niet betrouwbaar. In sommige situaties vanuit een ongedekte positie kan SQL Server 2005 SP2 waarschuwingsberichten over het volgende melden:
  • False drift waarschuwingsberichten
  • Drift kan tientallen milliseconden zonder dat een systeem merkbaar effect worden
U moet voorzichtig zijn bij de evaluatie van de resultaten die betrekking hebben op prestaties en als u de uitvoer die betrekking hebben op prestaties kan wand klok tijdsinstellingen vergelijken. Als er geen symptomen van andere problemen met de prestaties, kunt u de waarschuwingsberichten drift doorgaans negeren. Bijvoorbeeld, kunt u doorgaans negeren de drift waarschuwingsberichten in de volgende situaties:
  • Processen worden uitgevoerd zoals verwacht.
  • SQL Server-query's worden niet uitgevoerd in vreemde patronen voor durational.
  • U ziet geen tekenen van andere knelpunten.
Echter voordat u negeert de drift waarschuwingen worden weergegeven, wordt aangeraden dat u contact opnemen met de fabrikant om ervoor te zorgen dat er geen bekende delta tussen RDTSC problemen met aanwezig zijn.

U kunt traceringsvlag 8033 (– T8033) terug te keren naar de rapportage probleem in de oorspronkelijke versie van SQL Server 2005 en SQL Server 2005 SP1. De originele versie van SQL Server 2005 en SQL Server 2005 SP1 waarschuwingsberichten drift niet rapporteren. Als u de originele versie van SQL Server 2005 of SQL Server 2005 SP1 zonder problemen worden uitgevoerd, kunt u de berichten doorgaans negeren.

Waarom werkt de instructie WAITFOR vertraging goed? Hoe zit het periodieke systeemprocessen?

Time-mechanismen worden niet beïnvloed door het ontwerp met een hoge resolutie. SQL Server maakt geen gebruik van de timer met hoge resolutie voor activiteiten op basis van een timer. Sommige time-activiteiten zijn gebaseerd op de lagere resolutie timer die gebruikmaakt van de functie GetTickCount . Deze time-activiteiten omvatten time-lock, instructie WAITFOR vertraging en deadlock-detectie.
Voor meer informatie klikt u op de volgende artikelnummers om de artikelen in de Microsoft Knowledge Base te bekijken:

938448 op basis van een Windows Server 2003-server tijdstempel teller drift kan optreden als de server gebruikmaakt van dual core AMD Opteron-processors of met meerdere processoren AMD Opteron-processors

895980 programma's die gebruikmaken van de functie QueryPerformanceCounter kunnen tegenvallen in Windows Server 2003 en Windows XP

De producten van andere leveranciers die in dit artikel worden beschreven, worden vervaardigd door bedrijven die onafhankelijk van Microsoft zijn. Microsoft geeft geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of betrouwbaarheid van deze producten.