Tijdsinstellingen voor SQL Server-timing zijn mogelijk onjuist wanneer u Utilities of technologieën gebruikt waarmee de processor frequenties worden gewijzigd.

Samenvatting

In Microsoft SQL Server 2005 wordt de processor teller met een hoge resolutie gebruikt voor de tijdsinstellingen voor microseconden. Een micro seconde is één millionth van een seconde (of één thousandth van een milliseconde). De timing waarden van SQL Server zijn mogelijk onjuist als u technologieën gebruikt waarmee de processor frequenties worden gewijzigd. Dit probleem kan bijvoorbeeld optreden wanneer u een van de volgende technologieën gebruikt:

  • CPU-stap voor stap

  • AMD Cool'n'Quiet technologie

  • Diverse energiebeheerschema's

Dit artikel bevat methoden en aanvullende informatie die u kunt gebruiken om dit probleem te omzeilen.

Symptomen

Wanneer u de TIME-outwaarde voorwaarden instellen gebruikt om server uitvoer, parsering en compilatie tijden weer te geven, kunt u onjuiste waarden verkrijgen. U zult bijvoorbeeld merken dat de verstreken tijd van de uitvoeringstijd van SQL Server veel meer is dan de processortijd. Dit probleem kan de nauwkeurigheid van de prestatieafstemming beïnvloeden. Dit probleem doet zich voor wanneer u een van de technologieën gebruikt die worden vermeld in de sectie summary van de server.

Oorzaak

Dit probleem doet zich voor omdat processor frequenties worden gewijzigd wanneer u deze technologieën gebruikt. SQL Server 2005 gebruikt de processor teller voor een hoge resolutie om de tijdsinstellingen voor microseconden te bieden. Als processor frequenties worden gewijzigd om de energie te sparen en de warmte-uitvoer te verminderen, kunnen berekende duur onjuist zijn.

Oplossing

Informatie over service packs

Download het meest recente Service Pack voor SQL Server 2005 om dit probleem op te lossen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

913089 Het nieuwste servicepack voor SQL Server 2005 ophalenOpmerking In SQL Server 2005 Service Pack 3 en in latere service packs wordt de processor tijdstempel niet gebruikt. Deze versies van SQL Server 2005 gebruiken een betrouwbaardere timer met een maximale nauwkeurigheid van 1 milliseconden.

Status

Dit probleem is voor het eerst gecorrigeerd in SQL Server 2005 Service Pack 3.

Workaround

Voor SQL Server 2005 zijn bekende en stabiele gegevenspunten vereist om nauwkeurige prestaties af te stemmen. Als u de instellingen voor dynamische CPU-klok op de computer hebt ingeschakeld, kunt u deze uitschakelen zodat de Cpu's een constante frequentie bijhouden voordat u de prestaties van de SQL server beoordeelt en afstemmen. Gebruik de volgende methoden om dit te doen.

Het energiebeheerschema op de computer configureren om te zorgen dat de processors de maximale frequentie behouden

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 Power opties op altijd aan in de lijst met Power Schemes .

  3. Klik op OK.

Er kan een drift plaatsvinden. Een drijf is een divergentie van de CPU-frequentie waarden. Zie voor meer informatie de sectie ' drift '. In dit geval moet u Microsoft Windows opnieuw starten om de frequenties van alle Cpu's opnieuw te synchroniseren nadat u het energiebeheerschema hebt gewijzigd. Als u de computer niet opnieuw kunt opstarten, schakelt u de SQL Server-processoraffiniteit in om te voorkomen dat de SQL Server-werk threads tussen processors worden verplaatst. Wanneer u dit doet, hoeft u de computer niet opnieuw op te starten, zelfs als een divergentie van de CPU-frequentie waarden plaatsvindt. Als u de SQL Server-Processoraffiniteit voor alle Cpu's op de server wilt inschakelen, moet u een ander Mask gebruiken, afhankelijk van het aantal logische processors op de server. In de volgende tabel ziet u voorbeelden van scenario's.

CPU-nummer

Statements om processoraffiniteit in te schakelen

02 Cpu's

exec sp_configure ' Affinity Mask ', 0x00000003GOreconfigureGO

04 Cpu's

exec sp_configure ' Affinity Mask ', 0x0000000FGOreconfigureGO

08 Cpu's

exec sp_configure ' Affinity Mask ', 0x000000FFGOreconfigureGO

16 Cpu's

exec sp_configure ' Affinity Mask ', 0x0000FFFFGOreconfigureGO

32 Cpu's

exec sp_configure ' Affinity Mask ', 0xFFFFFFFFGOreconfigureGO

Opmerking Het is mogelijk dat u onvoldoende functies voor processorfrequentie variaties op het BIOS-niveau wilt uitschakelen. Verschillende hulpprogramma's van derden kunnen de processorfrequentie wijzigen. Bij sommige implementaties wordt frequentie correcties ook ingeschakeld wanneer de Cpu's onder het maximale energieschema worden ingesteld. In dit geval moet u deze hulpmiddelen van derden uitschakelen wanneer u de prestaties afstemt in SQL Server 2005.

De hulpprogramma's en Stuurprogramma's van derden gebruiken voor het synchroniseren van CPU-frequenties en tellers voor processor klokken

In zeldzame gevallen is het mogelijk dat een systeem een update van de fabrikant vereist om problemen met de processorfrequentie te corrigeren. De beste manier om het systeem te controleren op de nieuwste BIOS-, microcode-en firmware-updates als u vermoedt dat het systeem mogelijk een probleem heeft.

Meer informatie

Microsoft SQL Server 2000 en eerdere versies van SQL Server gebruiken de tijd mechanismen voor Windows. Voor de tijds mechanismen wordt de waarde met een milliseconde precisie gebruikt. Meestal is deze precisie 10 tot 15 MS. De precisie kan echter zo groot zijn als 55 MS. SQL Server-query's die regelmatig worden uitgevoerd binnen de milliseconde-of Microsoft-tijdsperioden. Voor deze precisie is een timer voor hoge resolutie vereist. Daarom rapporteren deze versies van SQL Server de duur van enkele query's als 0 MS. Daarom is het lastig om de prestaties te controleren en de prestaties van de SQL Server af te stemmen in eerdere versies van SQL Server. SQL Server 2005 verbetert de nauwkeurigheid met de processor teller met een hoge resolutie voor de tijdsinstellingen voor microseconden. Wanneer u de technologieën gebruikt die worden vermeld in de sectie Summary, kunnen de gerapporteerde timing waarden onjuist zijn. Dit probleem kan van invloed zijn op de volgende objecten en functies:

  • Gebeurtenissen overtrekken:

    • De aandacht -gebeurtenis

    • Gebeurtenissen in het knooppunt opgeslagen procedures

    • Gebeurtenissen in het TSQL-knooppunt

    • Gebeurtenissen in het knooppunt objecten

    • Gebeurtenissen in het knooppunt transacties

  • Dynamische beheer 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 TIME-out voor het instellen van statistieken

  • De tabel sysprocesses systeem

Na de installatie van SQL Server 2005 Service Pack 2 (SP2), registreert SQL Server een foutbericht in het foutenlogboek wanneer SQL Server detecteert dat de time-outwaarden voor hoge resolutie niet zijn gesynchroniseerd tussen de processors. Het foutbericht geeft aan dat de tijdsinstellingen voor de prestaties mogelijk niet kloppen en dat gebruikers met een goede prestatiegegevens kunnen werken. De tekst van het foutbericht lijkt op een van de volgende foutberichten:

Foutbericht 1

De waarde van het tijdstempel van de processor voor Scheduler-ID 2 is niet gesynchroniseerd met andere Cpu's.

Foutbericht 2

De frequentie van de CPU-tijdstempel is veranderd van 191469 in 1794177 tikken per milliseconde. De nieuwe frequentie wordt gebruikt

SQL Server gebruikt de instructie van de Real Time Stamp Counter (RDTSC) om het aantal CPU-tikken (64-bits) te verkrijgen. U kunt deze waarde opdelen door de processorfrequentie, zodat de waarde wordt omgezet in milliseconde-waarden. Tijdsinstellingen voor het wijzigen van de tijdsinstelling kunnen voorkomen dat de CPU-frequentie wordt gewijzigd.

CPU-stap voor stap

CPU-stap voor stap is gedefinieerd als een opzettelijke wijziging in de processorfrequentie. CPU Stepping kan ook wel een Intel SpeedStep-technologie of AMD PowerNow! zijn. ondersteunende. Wanneer de processor stepping voordoet, kan de CPU-snelheid in stappen toenemen of verlagen met een snelheid van 50 MHz, zodat de energie wordt beperkt en de warmte uitvoer minder wordt. Cpu's die zich in hetzelfde niet-uniform geheugentoegang (NUMA) bevinden, worden de frequentie niet apart aangepast. In de volgende tabel ziet u hoe de wijzigingen van de CPU-Step van invloed kunnen zijn op Tijdsinstellingen.

Actierij

RDTSC-maten

Maatstreepjes per milliseconde (frequentie)

Tijd voor muur klok

Batch starten

1

200

0

Frequentie omlaag

200

100

1ms

Batch beëindigen

500

3ms

TOTAAL

500

4ms

De RDTSC-maatstreepjes worden door SQL Server vastgelegd aan het begin en einde van RDTSC tikken. Vervolgens deelt SQL Server de maatstreepjes met de frequentiewaarde. In dit voorbeeld worden de volgende tijdsinstellingen berekend wanneer u de frequentiewaarde van 200 of 100 gebruikt:

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

  • Frequentie 100: 500/100 = 5 MS

De tijdsinstellingen voor de tijdsinstelling komen overeen met de werkelijke duur van de muur klok van 4 MS. Als deze berekening wordt gebruikt in een RPC: een voltooide traceringsgebeurtenis, worden de kolommen duur en Eindtijd onjuist gerapporteerd. De gebeurtenis RPC: voltooid registreert de starttijd van de muur en het aantal CPU-tikken. Voor een betere oplossing met een hogere resolutie dan Windows-leveranties in SQL Server 2005 worden de waarden voor de duur en de Eindtijd in een SQL Server-tracering berekend met behulp van het verstreken aantal CPU-tikken. De kolom Eindtijd wordt berekend door de kolom duur toe te voegen aan de kolom Begintijd . In dit voorbeeld wordt de kolom Eindtijd berekend op basis van een onjuiste toevoeging van 2,5 MS of 5 ms.

Tijdens

Drift is een divergentie van de CPU-klok waarden. Systemen met meerdere Cpu's kunnen verschillende waarden voor de CPU-klok leveren voor hetzelfde tijdstip. Hoewel dit niet gebruikelijk is, kan de processor in de loop van de tijd van de processor scheiding. In het volgende voorbeeld wordt gedemonstreerd hoe drijf changes het resultaat van de kolom duur van gegevens in een SQL Server-tracering kan beïnvloeden. In dit voorbeeld wordt ervan uitgegaan dat de processorfrequentie constant blijft bij 200 tikken per milliseconde. In de volgende tabel ziet u de gebeurtenissen in dit scenario.

Actierij

Geplande CPU van Windows

CPU 1 RDTSC

CPU 2 RDTSC

Tijd voor muur klok

Batch starten

1

100

1100

0

Batch beëindigen

3

900

1900

4 MS

TOTAAL

4 MS

De RDTSC-maatstreepjes worden door SQL Server vastgelegd aan de beginpunten en de eindpunten. Vervolgens deelt SQL Server de RDTSC-maatstreepjes met de frequentiewaarde. In dit voorbeeld is de uitvoering van de SQL Server-werkthread op twee verschillende Cpu's gepland. De SQL Server-werkthread waarmee de batch wordt uitgevoerd voor de eerste CPU (processor 1). De batchuitvoering is echter op een bepaald moment onderbroken en SQL Server heeft de batchuitvoering verzonden naar de wachtrij in behandeling. Wanneer SQL Server de SQL Server-werkthread die deze batch aan de runnable-wachtrij heeft doorgestuurd, opnieuw verzendt, heeft Windows de thread opnieuw gerepareerd voor uitvoering op de tweede processor (processor 2). De SQL Server-werkthread is uitgevoerd op de processor 2. Vanwege CPU-drift is de waarde voor de eind streep die is vastgelegd via processor 2 1900 in plaats van 900. U kunt dit gedrag vermijden wanneer u affiniteit met SQL Server-processor inschakelt. In dit voorbeeld worden de volgende tijdsinstellingen voor tijdsinstellingen gebruikt:

  • De onjuiste maar gerapporteerde waarde: (1900-100 = 1800)/200 = 9 MS

  • Juiste waarde: (900-100 = 800)/200 = 4 MS

De waarde van de kolom duur voor de gebeurtenis RPC: voltooid werd gerapporteerd als 9 MS in plaats van 4 MS. Dit resultaat is groter dan de juiste waarde van 4 MS. Er worden drijf waarschuwingsberichten toegevoegd aan SQL Server 2005 om aan te geven dat de hierboven vermelde prestatie-uitvoer niet betrouwbaar is. In sommige gevallen met een storing kunnen waarschuwingen in SQL Server 2005 SP2 waarschuwingsberichten over de volgende rapporten melden:

  • Waarschuwingsberichten voor onjuiste drijfman

  • Het kan zijn dat de drift tientallen tijd in milliseconden verandert zonder dat dit een merkbaar systeem effect veroorzaakt

U dient voorzichtig te zijn wanneer u de prestatie-gerelateerde uitvoer evalueert en wanneer u de resultaten van de prestaties vergelijkt met de instellingen voor de muur klok. Als er geen verschijnselen zijn met andere prestaties, kunt u de waarschuwingsberichten meestal negeren. U kunt bijvoorbeeld in de volgende situaties de waarschuwingsberichten voor de drift meestal negeren:

  • Processen worden uitgevoerd zoals verwacht.

  • SQL Server-query's worden niet in vreemde tijds patronen uitgevoerd.

  • U ziet geen symptomen van andere knelpunten.

Voordat u de foutberichten van een drijf negeert, is het echter raadzaam contact op te nemen met de fabrikant om te controleren of er geen bekende problemen met RDTSC bestaan. U kunt Trace Flag 8033 (– T8033) gebruiken om terug te gaan naar het rapportage gedrag in de oorspronkelijke releaseversie van SQL Server 2005 en in SQL Server 2005 SP1. De oorspronkelijke releaseversie van SQL Server 2005 en SQL Server 2005 SP1 meldt geen drijf waarschuwingsberichten. Als u zonder problemen de oorspronkelijke releaseversie van SQL Server 2005 of SQL Server 2005 SP1 uitvoert, kunt u de berichten meestal negeren.

Waarom werkt de instructie WAITFOR-vertraging correct? Hoe zit het met periodieke systeemprocessen?

De voorzieningen voor time-out worden niet beïnvloed door het ontwerp met hoge resolutie. In SQL Server wordt de timer voor hoge resolutie niet gebruikt voor activiteiten op basis van timer. Sommige time-outactiviteiten zijn gebaseerd op de timer voor minder resoluties, met de functie GetTickCount . Deze time-outactiviteiten omvatten vergrendelen van de time-out, de instructie WAITFOR vertraging en de detectie van deadlock.

Klik op de volgende artikelnummers in de Microsoft Knowledge Base voor meer informatie:

938448 Een server van Windows Server 2003 werkt mogelijk een tijdstempel van een toepassing voor tijdstempels als de server gebruikmaakt van Dual Core AMD Opteron-processors of meerdere processors van AMD Opteron

895980 Programma's die de functie QueryPerformanceCounter gebruiken, kunnen slecht werken in Windows Server 2003 en in Windows XPDe producten van derden die in dit artikel worden beschreven, worden gefabriceerd door bedrijven die geen deel uitmaken van Microsoft. Microsoft verbiedt geen garanties, impliciet of anderszins, over de werking of betrouwbaarheid van deze producten.

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagenten.

×