SQL Server Zeitwerte können falsch sein, wenn Sie Dienstprogramme oder CPU-Frequenzen verändern


Zusammenfassung


Microsoft SQL Server 2005 verwendet hochauflösenden Zählers CPU-Mikrosekunden Timing Funktionen bereitstellt. Eine Mikrosekunde ist ein Millionstel einer Sekunde (oder Tausendstel einer Millisekunde). SQL Server-Zeitwerte möglicherweise jedoch falsch verwenden Sie Technologien, die CPU-Frequenzen ändern. Beispielsweise kann dieses Problem auftreten, wenn folgende Technologien verwenden:
  • CPU stepping
  • AMD Cool'n'Quiet Technologie
  • Verschiedene Energieschemas
Dieser Artikel enthält Methoden und zusätzlichen Informationen zur Umgehung dieses Problems.

Problembeschreibung


Wenn Sie die Anweisung SET STATISTICS TIME Servers analysieren und Kompilierungszeiten anzeigen verwenden, erhalten Sie falsche Werte. Beispielsweise können Sie feststellen, dass die verstrichene Zeit der Ausführungszeit SQL Server viel mehr CPU-Zeit. Dieses Problem kann die Genauigkeit der Performance-Abstimmung betreffen. Dieses Problem tritt bei Verwendung eines der aufgelisteten Technologies im Abschnitt "Zusammenfassung" auf dem Server.

Ursache


Dieses Problem tritt auf, weil die CPU-Frequenzen geändert werden, wenn diese Technologie verwenden. SQL Server 2005 verwendet hochauflösenden Zählers CPU-Mikrosekunden Timing Funktionen bereitstellt. Geänderte CPU-Frequenzen um Energie und Leistung verringern können berechnete Dauer falsch sein.

Problemlösung


Service Pack-Informationen

Um dieses Problem zu beheben, beziehen Sie das neueste Servicepack für SQL Server 2005. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
913089 so erhalten Sie das neueste Servicepack für SQL Server 2005
Hinweis In SQL Server 2005 Service Pack 3 und höher wird der Zeitstempel Prozessor nicht verwendet. Diese Versionen von SQL Server 2005 verwenden einen zuverlässigeren Zeitgeber, der eine maximale von 1 Millisekunde Genauigkeit.

Status


Dieses Problem wurde zuerst in SQL Server 2005 Service Pack 3 behoben.

PROBLEMUMGEHUNG


SQL Server 2005 muss bekannt und stabile Datenpunkte genaue Leistungstuning ausführen. Wenn dynamische CPU-Frequenz Einstellungen auf dem Computer aktiviert sind, können Sie sie deaktivieren, damit die CPUs konstanter Frequenz verwalten, überwachen und Optimieren der Leistung von SQL Server vor. Verwenden Sie hierzu die folgenden Methoden.

Konfigurieren Sie das Energieschema auf dem Computer zwingen die CPUs auf maximale Frequenz

Gehen Sie hierzu folgendermaßen vor:
  1. Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie Powercfg.cplund klicken Sie dann auf OK.
  2. Klicken Sie im Dialogfeld Eigenschaften von Energieoptionen in der Liste Energieschemas Immer auf .
  3. Klicken Sie auf OK.
Eine Drift auftreten. Eine Drift ist eine Abweichung zwischen CPU-Frequenz. Weitere Informationen finden Sie im Abschnitt "Drift". In diesem Fall müssen Sie starten Microsoft Windows Frequenzen aller CPUs synchronisieren, nachdem das Energieschema zu ändern.

Wenn Sie den Computer neu starten können, aktivieren Sie SQL Server-Prozessoraffinität zu verhindern, dass SQL Server Arbeitsthreads zwischen CPUs. Wenn Sie dies tun, müssen Sie keinen Neustart des Computers selbst tritt eine Abweichung zwischen CPU-Frequenz. Um SQL Server-Prozessoraffinität für alle CPUs auf dem Server zu aktivieren, verwenden Sie eine andere Maske, abhängig von der Anzahl der logischen Prozessoren, die auf dem Server.

Die folgende Tabelle listet Beispielszenarien.
CPU-AnzahlAnweisungen, die Prozessoraffinität aktivieren
02-CPUsEXEC Sp_configure 'Affinity Mask' 0 x 00000003
GO
neu konfigurieren
GO
04-CPUsEXEC Sp_configure 'Affinity Mask' 0x0000000F
GO
neu konfigurieren
GO
08-CPUsEXEC Sp_configure 'Affinity Mask' 0x000000FF
GO
neu konfigurieren
GO
16 CPUsEXEC Sp_configure 'Affinity Mask' 0x0000FFFF
GO
neu konfigurieren
GO
32 CPUsEXEC Sp_configure 'Affinity Mask' 0xFFFFFFFF
GO
neu konfigurieren
GO
Hinweis Möglicherweise nicht genügend CPU-Frequenz Variante Funktionen auf BIOS-Ebene deaktiviert sein. Verschiedene Hilfsprogramme können CPU-Frequenzen ändern. Einige Implementierungen aktivieren Häufigkeit Korrekturen auch wenn CPUs unter Höchstleistung System Settings. In diesem Fall müssen Sie diese Dienstprogramme von Drittanbietern deaktivieren, wenn Optimierung in SQL Server 2005 ausführen.

Mit Fremdanbietern und Treiber CPU-Frequenzen und CPU-Indikatoren Uhr synchronisiert werden

In seltenen Fällen erfordern ein System ein Update des Herstellers um CPU-Frequenz Probleme zu beheben. In diesem Zusammenhang empfiehlt es sich, die neuesten BIOS-Microcode und Firmware-Updates geprüft, wenn Sie vermuten, dass das System ein Problem.

Weitere Informationen


Microsoft SQL Server 2000 und früheren Versionen von SQL Server verwenden Windows zeitlichen. Die zeitlichen verwenden Werte mit Millisekunden-Genauigkeit. In der Regel Genauigkeit ist 10 bis 15 ms, die Genauigkeit so groß wie 55 ms. SQL Server-Abfragen häufig innerhalb einer einstelligen Millisekunden abgeschlossen oder Mikrosekunden Zeitspannen. Genauigkeit muss einen hochauflösenden Zeitgeber. Daher ist es diese Versionen von SQL Server-Bericht die Dauer einiger Abfragen als 0 Frau daher schwierig, Leistung und Optimieren der Leistung von SQL Server in früheren Versionen von SQL Server.

SQL Server 2005 verbessert die Genauigkeit mit hochauflösenden Zählers CPU-Mikrosekunden Timing Funktionen bereitstellt. Bei Verwendung der aufgelisteten Technologies im Abschnitt "Zusammenfassung" können gemeldete Timing Werte falsch sein.

Dieses Problem kann die folgenden Objekte und Funktionen betreffen:
  • Verfolgen von Ereignissen:
    • Attention -Ereignis
    • Ereignisse in gespeicherte Prozeduren
    • Ereignisse im TSQL-Knoten
    • Ereignisse in den Knoten Objekte
    • Ereignisse im Knoten Transaktionen
  • Dynamische Verwaltungsansichten:
    • 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
  • Die Anweisung SET STATISTICS TIME
  • Die Sysprocesses -Systemtabelle
Nach der Installation von SQL Server 2005 Service Pack 2 (SP2) protokolliert SQL Server eine Fehlermeldung im Fehlerprotokoll von SQL Server erkennt, dass die hochauflösenden Zeitgeber zwischen CPUs sind. Die Fehlermeldung gibt an, dass Leistung Anzeigedauer möglicherweise nicht korrekt und Benutzer sollten Leistungsdaten mit Vorsicht verwenden.

Der Text der Fehlermeldung ähnelt eine der folgenden Fehlermeldungen angezeigt:
Fehlermeldung 1
Der Stempel Leistungsindikator CPU-Planer ID 2 ist mit anderen CPUs nicht synchronisiert.
Fehlermeldung 2
CPU-Zeitstempel Frequenz von 191469 geändert 1794177 Ticks pro Millisekunde. Die Frequenz wird verwendet
SQL Server verwendet die Anweisung Echtzeit Stempel Zähler (RDTSC) zu den 64-Bit-CPU-Tickzähler. Dieser Wert teilen Sie CPU-Frequenz in Millisekunden Werte den Wert konvertiert. Timing Variationen können eintreten, wenn CPU-Frequenz ändert oder Drift.

CPU stepping

CPU stepping wird definiert als absichtliche Änderung CPU-Frequenz. CPU stepping kann auch genannt Intel SpeedStep-Technologie oder AMD PowerNow! Technologie. Wenn CPU stepping wird die CPU-Geschwindigkeit erhöhen oder verringern in Schritten von je 50 MHz Energie sparen und die Leistung verringern kann. CPUs, die innerhalb der gleichen non-Uniform Memory Access (NUMA) Knoten anpassen Frequenzen nicht unabhängig voneinander.

Die folgende Tabelle veranschaulicht, wie CPU-stepping Änderungen zeitliche Berechnung auswirken.
AktionRDTSC-TicksTicks pro Millisekunde (Frequenz)Wand-Uhrzeit
Stapelverarbeitung starten12000
Frequenzschritt2001001ms
End-Stapel5003ms
SUMMEN5004ms
SQL Server zeichnet die RDTSC Teilstriche am Anfang und Ende RDTSC Ticks. SQL Server unterteilt dann Teilstriche von Frequenzwert.

In diesem Beispiel auftreten Timing Berechnungen Frequenzwert 200 oder 100 verwenden:
  • Häufigkeit 200: 500/200 = 2,5 ms
  • Häufigkeit 100: 500/100 = 5 ms
Weder die zeitliche Berechnung entspricht die tatsächlichen Wand Uhrzeit 4 ms.

Wenn diese Berechnung in eine RPC: abgeschlossen verfolgen die Dauer und Endzeit Datenspalten falsch gemeldet. Die RPC: abgeschlossen Ereignis erfasst die Wand Uhr Startzeit und Anzahl der CPU-Ticks. Zu höherer Auflösung Timing als Windows in SQL Server 2005, die Dauer und Endzeit Datenspalten in SQL Server stellt Trace mithilfe den verstrichenen CPU-Tickzähler berechnet. Die Spalte Endzeit berechnet, indem die Spalte Dauer der Spalte Startzeit . In diesem Beispiel wird Spalte Endzeit berechnet, indem falsch 2,5 ms oder 5 ms der Startzeit.

Drift

Diese Bewegung ist eine Abweichung CPU Clock Werte. Systeme mit mehreren CPUs können verschiedene CPU Clock-Werte für den gleichen Zeitpunkt erzeugen. Obwohl es nicht üblich, möglicherweise CPUs Uhr Trennung mit der Zeit.

Im folgenden Beispiel wird veranschaulicht, wie Drift Ergebnis der Dauer -Spalte in einer SQL Server-Trace beeinflussen können. Es wird angenommen, dass die CPU-Frequenz bei 200 Ticks pro Millisekunde bleibt. Die folgende Tabelle zeigt die Ereignisse in diesem Szenario.
AktionGeplanter Windows-CPUCPU 1 RDTSCCPU 2 RDTSCWand-Uhrzeit
Stapelverarbeitung starten110011000
End-Stapel290019004 ms
SUMMEN4 ms
SQL Server zeichnet RDTSC Teilstriche am sowohl die Anfangs- und Endpunkte. SQL Server unterteilt dann RDTSC Ticks von Frequenzwert. In diesem Beispiel berechnet Windows den Arbeitsthread SQL Server auf zwei verschiedenen CPUs. SQL Server-Worker-Thread, der den Stapel verarbeitet zunächst für die erste CPU (CPU 1) ausgeführt.

Jedoch wurde die Batchausführung irgendwann unterbrochen und SQL Server die Batchausführung an die ausstehende Warteschlange gesendet. Wenn SQL Server den SQL Server-Arbeitsthread, der diesem Stapel der ausführbaren Warteschlange erneut services gesendet, verteilt Windows Thread auf der zweiten CPU (CPU 2). Der SQL Server-Arbeitsthread ausgeführt an der CPU 2. CPU 2 erfasst Tick Endwert wurde wegen CPU Drift 1900 statt 900. Wenn Sie SQL Server-Prozessoraffinität aktivieren, können Sie dieses Verhalten vermeiden.

In diesem Beispiel werden folgende zeitliche Berechnung verwendet:
  • Falsche aber gemeldeten Wert: (1900 – 100 = 1800) / 200 = 9 ms
  • Wert korrigieren: (900 – 100 = 800) / 200 = 4 ms
Der Wert der Spalte für die Dauer der RPC: abgeschlossen Ereignis würde als 9 ms statt 4 Ms. dieses Ergebnis ist den korrekten Wert von 4 ms doppelt gemeldet werden.

SQL Server 2005 an Leistung Ausgaben, die zuvor erwähnt sind möglicherweise nicht zuverlässig Drift Fehlermeldungen hinzugefügt. In einigen Situationen aufgedeckten meldet SQL Server 2005 SP2 zu folgenden Fehlermeldungen:
  • False Drift Warnhinweise
  • Drift werden zehn Millisekunden ohne einen deutlichen System-Effekt
Sie müssen vorsichtig sein, wenn Sie Ausgaben leistungsbezogene und vergleicht die leistungsbezogene Ausgaben an Wand Taktraten. Wenn es keine Anzeichen für andere Leistungsprobleme, können Sie normalerweise Drift Warnung ignorieren. Beispielsweise können Sie normalerweise Drift Warnung in den folgenden Situationen ignorieren:
  • Prozesse werden wie erwartet ausgeführt.
  • SQL Server-Abfragen werden ungewöhnliche durational Muster nicht ausgeführt.
  • Sie sehen keine Anzeichen anderer Engpässe.
Jedoch ignorieren Drift Warnung Nachrichten, wir empfehlen, dass Sie den Hersteller Ihrer sicher, dass keine RDTSC Probleme vorhanden sein.

Verwenden Sie das Ablaufverfolgungsflag 8033 (-T8033) reporting Verhalten in der Originalversion von SQL Server 2005 und SQL Server 2005 SP1 wieder. Die Originalversion von SQL Server 2005 und SQL Server 2005 SP1 Drift Fehlermeldungen nicht melden. Wenn Sie die Originalversion von SQL Server 2005 oder SQL Server 2005 SP1 ohne Probleme ausführen, können Sie die Nachrichten normalerweise ignorieren.

Warum funktioniert die WAITFOR DELAY-Anweisung richtig? ? Periodische Systemprozesse

Timeout Mechanismen sind hochauflösende Design nicht betroffen. SQL Server verwendet nicht den hochauflösenden Zeitgeber für zeitgeberbasierte Aktivitäten. Timeout Aktivitäten basieren auf der geringeren Auflösung Zeitgeber, die GetTickCount -Funktion verwendet. Diese Timeouts umfassen Sperrtimeout WAITFOR DELAY-Anweisung und die Deadlockerkennung.
Klicken Sie für weitere Informationen auf die folgenden Artikelnummern, um die betreffenden Artikel in der Microsoft Knowledge Base anzuzeigen:

938448 A Windows Server 2003-basierten Server kann Zeitstempel Leistungsindikator Drift auftreten, wenn der Server Dual-Core AMD Opteron Prozessoren oder mehreren Prozessoren AMD Opteron-Prozessoren verwendet

895980 Programme, die die Funktion QueryPerformanceCounter möglicherweise schlecht in Windows Server 2003 und Windows XP ausführen

Die in diesem Artikel erörterten Produkte von Drittanbietern werden von Unternehmen hergestellt, die von Microsoft unabhängig sind. Microsoft übernimmt keine Garantie, weder konkludent noch anderweitig, für die Leistung oder Zuverlässigkeit dieser Produkte.