Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Podsumowanie

Program Microsoft SQL Server 2005 używa liczników procesora o wysokiej rozdzielczości, aby zapewnić microsecond. Microsecond to jedna Millionth sekundy (lub jedna thousandth w milisekundach). Jednak wartości chronometrażu programu SQL Server mogą być niepoprawne, jeśli korzystasz z technologii, które zmieniają częstotliwości procesora. Na przykład ten problem może wystąpić w przypadku korzystania z dowolnej z następujących technologii:

  • Taktowanie procesora

  • Technologia AMD Cool'n'Quiet

  • Różne schematy zasilania

Ten artykuł zawiera metody i informacje dodatkowe ułatwiające obejście tego problemu.

Symptomy

W przypadku użycia instrukcji SET STATISTICS TIME (Ustaw Statystyka czasu) w celu wyświetlenia informacji o wykonaniu serwera, przeanalizowaniu i kompilacjach można uzyskać niepoprawne wartości. Na przykład możesz zauważyć, że czas wykonywania programu SQL Server, który upłynął, jest o wiele więcej niż czas procesora CPU. Ten problem może wpływać na dokładność dostrajania wydajności. Ten problem występuje w przypadku korzystania z jednej z technologii wymienionych w sekcji "Podsumowanie" na serwerze.

Przyczyna

Ten problem występuje, ponieważ częstotliwości procesora ulegają zmianie podczas korzystania z tych technologii. Program SQL Server 2005 używa licznika procesora o wysokiej rozdzielczości, aby zapewnić microsecond. Jeśli częstotliwości procesora są zmieniane w celu oszczędzania energii i redukcji ciepła, obliczane czasy trwania mogą być niepoprawne.

Rozwiązanie

Informacje o dodatku Service Pack

Aby rozwiązać ten problem, Uzyskaj najnowszy dodatek Service Pack dla programu SQL Server 2005. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

913089 Jak uzyskać najnowszy dodatek Service Pack dla programu SQL Server 2005Uwaga W programie SQL Server 2005 z dodatkiem Service Pack 3 i nowszych dodatkach Service Pack nie jest używana sygnatura czasowa procesora. Te wersje programu SQL Server 2005 używają bardziej niezawodnego czasomierza, który ma maksymalną dokładność 1 milisekund.

Stan

Ten problem został po raz pierwszy rozwiązany w dodatku Service Pack 3 dla programu SQL Server 2005.

Obejście

Program SQL Server 2005 wymaga znanych i stabilnych punktów danych do przeprowadzenia dokładnego dostrajania wydajności. Jeśli na komputerze są włączone dynamiczne regulacje częstotliwości procesorów, możesz je wyłączyć, aby zapewnić stałą częstotliwość, zanim zaczniesz monitorować i dostrajać wydajność programu SQL Server. Aby to zrobić, Skorzystaj z poniższych metod.

Konfigurowanie schematu zasilania na komputerze w celu wymuszenia pozostawania w maksymalnej częstotliwości CPU

W tym celu wykonaj następujące czynności:

  1. Kliknij przycisk Start, kliknij polecenie Uruchom, wpisz polecenie Powercfg. cpl, a następnie kliknij przycisk OK.

  2. W oknie dialogowym Właściwości: Opcje zasilania kliknij pozycję zawsze włączone na liście Schematy zasilania .

  3. Kliknij przycisk OK.

Może wystąpić dryf. Dryf jest różnicą między wartościami częstotliwości procesora. Aby uzyskać więcej informacji, zobacz sekcję "dryf". W takim przypadku należy ponownie uruchomić system Microsoft Windows, aby zsynchronizować częstotliwości wszystkich procesorów po zmianie schematu zasilania. Jeśli nie możesz uruchomić ponownie komputera, Włącz opcję koligacja procesora programu SQL Server, aby zapobiec przenoszeniu wątków roboczych programu SQL Server między procesorami. Po wykonaniu tej czynności nie trzeba ponownie uruchamiać komputera, nawet jeśli występuje rozbieżność między wartościami częstotliwości procesora. Aby włączyć koligację procesorów programu SQL Server dla wszystkich procesorów na serwerze, należy użyć innej maski, zależnie od liczby procesorów logicznych znajdujących się na serwerze. W poniższej tabeli wymieniono przykładowe scenariusze.

Numer procesora

Instrukcje umożliwiające włączenie koligacji procesora

02 jednostki CPU

sp_configure "maska koligacji", 0x00000003GOreconfigureGO

04 jednostki CPU

sp_configure "maska koligacji", 0x0000000FGOreconfigureGO

08 procesory

sp_configure "maska koligacji", 0x000000FFGOreconfigureGO

16 procesorów

sp_configure "maska koligacji", 0x0000FFFFGOreconfigureGO

32 CPU

sp_configure "maska koligacji", 0xFFFFFFFFGOreconfigureGO

Uwaga Wyłączenie funkcji odmian częstotliwości procesora może być niewystarczające na poziomie systemu BIOS. Różne narzędzia innych firm mogą zmieniać częstotliwości procesora. Niektóre implementacje umożliwiają dostosowywanie częstotliwości nawet wtedy, gdy jednostki CPU znajdują się w obszarze maksymalne ustawienia schematu zasilania. W takim przypadku przed wykonaniem dostrajania wydajności w programie SQL Server 2005 należy wyłączyć te narzędzia innych firm.

Synchronizowanie częstotliwości procesora i liczników zegara procesora za pomocą narzędzi i sterowników innych firm.

Zdarza się, że system może wymagać aktualizacji od producenta w celu poprawienia problemów z częstotliwością procesora. Najlepszym rozwiązaniem jest sprawdzenie systemu najnowszych aktualizacji systemu BIOS, Microcode i oprogramowania firmware, jeśli podejrzewasz, że system może mieć problem.

Więcej informacji

W programie Microsoft SQL Server 2000 i we wcześniejszych wersjach programu SQL Server są używane mechanizmy taktowania systemu Windows. W przypadku mechanizmów taktowania są używane wartości milisekundy. Zazwyczaj dokładność ta wynosi od 10 do 15 MS. Jednak dokładność może być większa niż 55 MS. Kwerendy programu SQL Server są często uzupełniane w ciągu jednocyfrowej lub microsecond czasu. Ta dokładność wymaga czasomierza wysokiej rozdzielczości. Dlatego te wersje programu SQL Server zgłaszają czas trwania kilku zapytań jako wartość 0 MS. Dlatego trudno jest monitorować wydajność i dostrajać wydajność programu SQL Server we wcześniejszych wersjach programu SQL Server. program SQL Server 2005 zwiększa dokładność, korzystając z liczników procesora o wysokiej rozdzielczości, aby zapewnić microsecond. Gdy korzystasz z technologii wymienionych w sekcji "Podsumowanie", zgłoszone wartości chronometrażu mogą być niepoprawne. Ten problem może wpływać na następujące obiekty i funkcje:

  • Śledzenie zdarzeń:

    • Zdarzenie uwagi

    • Zdarzenia w węźle procedury składowane

    • Zdarzenia w węźle TSQL

    • Zdarzenia w węźle obiekty

    • Zdarzenia w węźle transakcje

  • Dynamiczne widoki zarządzania:

    • 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

  • Instrukcja SET TIME STATYSTYKa

  • Tabela system sysprocesses

Po zainstalowaniu dodatku Service Pack 2 (SP2) dla programu SQL Server 2005 program SQL Server rejestruje komunikat o błędzie w dzienniku błędów, gdy program SQL Server wykryje, że czasomierze wysokiej rozdzielczości nie są zsynchronizowane między procesorami. Komunikat o błędzie wskazuje, że chronometraż wydajności może nie być dokładny, a użytkownicy powinni zachować ostrożność przy użyciu danych o wydajności. Tekst komunikatu o błędzie jest podobny do jednego z następujących komunikatów o błędach:

Komunikat o błędzie 1

Licznik sygnatura czasowa procesora CPU na identyfikatorze harmonogramu 2 nie jest zsynchronizowany z innymi procesorami CPU.

Komunikat o błędzie 2

Częstotliwość sygnatur czasowych procesora CPU została zmieniona z 191469 na 1794177 Takty na milisekundy. Nowa częstotliwość będzie używana

Program SQL Server używa instrukcji licznika sygnatur czasowych (RDTSC), aby uzyskać 64-bitową liczbę cykli procesora. Możesz podzielić tę wartość przez częstotliwość procesora w celu przekonwertowania wartości na wartość w milisekundach. Wahania czasu mogą wystąpić po zmianie częstotliwości procesora lub dryfie.

Taktowanie procesora

Taktowanie procesora jest definiowane jako umyślne zmiany częstotliwości procesora. Taktowanie procesora może również być nazywane technologią Intel SpeedStep lub AMD PowerNow! technologi. Gdy procesor przebiega zgodnie z oczekiwaniami, szybkość procesora może wzrastać lub zmniejszać w mniejszym zakresie, tak jak w przypadku 50 MHz, aby oszczędzać energię i zredukować wyjście ciepła. Jednostki CPU należące do tego samego węzła NUMA nie dopasowują niezależnie od siebie częstotliwości. W poniższej tabeli pokazano, jak zmiany w realizacji procesora mogą wpływać na obliczenia czasu.

Action

Znaczniki RDTSC

Takty na milisekundy (częstotliwość)

Czas zegara ściany

Uruchom partię

1

200

0,4

Krok częstotliwości w dół

200

100

1ms

Zakończ partię

500

3ms

SUMY

500

4ms

Program SQL Server przechwytuje znaczniki RDTSC zarówno na osi początkowej, jak i końcowej RDTSC. Następnie program SQL Server dzieli znaczniki według wartości częstotliwości. W tym przykładzie występują następujące obliczenia dotyczące czasu, gdy jest używana wartość częstotliwości 200 lub 100:

  • Częstotliwość 200: 500/200 = 2,5 ms

  • Częstotliwość 100: 500/100 = 5 ms

Żadna z obliczeń dotyczących czasu nie jest zgodna z rzeczywistym czasem zegara ściany o wartości 4 MS. Jeśli to obliczenie jest używane w przypadku wywołania RPC: ukończone śledzenie, kolumny danych czasu trwania i zakończenia są błędnie zgłaszane. Zdarzenie Zakończono RPC: ukończone przechwycono początkowy czas zegara ściany i licznik cykli procesora. Aby uzyskać wyższy poziom rozdzielczości, niż w przypadku programu SQL Server 2005, kolumny danych czasu trwania i zakończenia w śledzeniu programu SQL Server są obliczane przy użyciu licznika czasu procesora. Kolumna czas zakończenia jest obliczana przez dodanie kolumny czas trwania do kolumny czas rozpoczęcia . W tym przykładzie kolumna czas zakończenia jest obliczana przez nieprawidłowe dodanie 2,5 ms lub 5 ms do godziny rozpoczęcia.

Osad

Dryf to rozbieżność w wartościach zegara procesora. Systemy, które mają wiele procesorów, mogą generować różne wartości zegara procesora dla tego samego punktu w czasie. Chociaż nie jest to typowe, jednostki CPU mogą być rozdzieleniem zegara w czasie. W poniższym przykładzie pokazano, jak zmiany dryfu mogą wpływać na wynik kolumny dane czasu trwania w ŚLEDZENIU programu SQL Server. W przykładzie przyjęto założenie, że częstotliwość procesora jest stała w 200 taktach na milisekundę. W poniższej tabeli przedstawiono zdarzenia w tym scenariuszu.

Action

Zaplanowany procesor systemu Windows

PROCESOR 1 RDTSC

PROCESOR 2 RDTSC

Czas zegara ściany

Uruchom partię

1

100

1100

0,4

Zakończ partię

2

900

1900

4 MS

SUMY

4 MS

Program SQL Server przechwytuje znaczniki RDTSC zarówno w punktach początkowych, jak i końcowych. Następnie program SQL Server dzieli znaczniki RDTSC przez wartość częstotliwości. W tym przykładzie system Windows zaplanował wątek roboczy programu SQL Server na dwóch różnych procesorach. Wątek roboczy programu SQL Server, w którym uruchomiono partię po raz pierwszy na pierwszym procesorze CPU (procesor 1). Jednak wykonywanie wsadowe zostało przerwane w pewnym momencie, a program SQL Server wysłał wykonanie partii do oczekującej kolejki. Gdy program SQL Server wysłał wątek roboczy programu SQL Server, który ponownie przestawuje tę partię do kolejki usługi runnable, system Windows wysłał wątek do uruchomienia na drugim procesorze CPU (procesor 2). Wątek roboczy programu SQL Server ukończył działanie w PROCESORze 2. Z powodu dryfowania procesora wartość końcowa, która została przechwycona z procesora 2, jest 1900 zamiast 900. Możesz uniknąć tego zachowania, jeśli zostanie włączona koligacja procesora programu SQL Server. W tym przykładzie użyto następujących obliczeń czasu:

  • Niepoprawna, ale zgłoszona wartość: (1900 – 100 = 1800)/200 = 9 MS

  • Właściwa wartość: (900 – 100 = 800)/200 = 4 MS

Wartość kolumny Duration dla zdarzenia RPC: ukończone zostanie zgłoszona jako 9 MS zamiast 4 MS. Wynik jest większy niż podwójna wartość 4 MS. Do programu SQL Server 2005 są dodawane wiadomości z ostrzeżeniem dotyczącym dryfu, które wskazują, że wspomniane wcześniej wyniki mogą być niewiarygodne. W niektórych przypadkach program SQL Server 2005 z dodatkiem SP2 może raportować komunikaty ostrzegawcze dotyczące następujących informacji:

  • Fałszywe komunikaty dotyczące pławnic

  • Dryf może być w postaci liczby milisekund bez powodowania zauważalnego wpływu systemu

Należy zachować ostrożność podczas oceniania wyjść związanych z wydajnością i porównywania wyjść z wydajności do chronometrażu zegara ściennego. Jeśli nie ma żadnych oznak innych problemów z wydajnością, zazwyczaj można zignorować komunikaty z ostrzeżeniem dotyczącym dryfu. Na przykład zazwyczaj można ignorować komunikaty z ostrzeżeniem dotyczącym dryfu w następujących sytuacjach:

  • Procesy działają zgodnie z oczekiwaniami.

  • Zapytania programu SQL Server nie działają w przypadku nieznajomych wzorów czasu trwania.

  • Nie widać oznak innych wąskich gardeł.

Jednak przed zignorowaniem wiadomości z ostrzeżeniem dotyczącym dryfu zalecamy skontaktowanie się z producentem w celu upewnienia się, że nie ma znanych problemów z RDTSC. Możesz użyć flagi śledzenia 8033 (– T8033), aby powrócić do zachowania raportowania w pierwotnej wersji programu SQL Server 2005 i w programie SQL Server 2005 SP1. Oryginalna wersja programu SQL Server 2005 i SQL Server 2005 z dodatkiem SP1 nie raportuje komunikatów z ostrzeżeniem o dryfie. Jeśli korzystasz z oryginalnej wersji programu SQL Server 2005 lub SQL Server 2005 z dodatkiem SP1 bez problemów, możesz zazwyczaj zignorować wiadomości.

Dlaczego instrukcja WAITFOR DELAY działa poprawnie? Co z okresowymi procesami systemowymi?

W przypadku mechanizmów limitu czasu nie ma wpływu projekt o wysokiej rozdzielczości. Program SQL Server nie używa czasomierza wysokiej rozdzielczości dla działań opartych na czasomierzach. Niektóre działania przekroczenia limitu czasu są oparte na czasomierzu zmniejszonej rozdzielczości używającym funkcji GetTickCount . Te czynności przekroczenia obejmują limit czasu blokady, instrukcję opóźnienia z poleceniem WAITFOR oraz wykrywanie zakleszczenia.

Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:

938448 Jeśli serwer korzysta z dwurdzeniowych procesorów AMD Opteron lub wieloprocesorowych procesorów AMD Opteron, serwer oparty na systemie Windows Server 2003 może powodować nałożenia licznika sygnatur czasowych

895980 Programy korzystające z funkcji QueryPerformanceCounter mogą działać niewłaściwie w systemach Windows Server 2003 i Windows XPProdukty innych firm, które omówiono w tym artykule, są wytwarzane przez firmy, które są niezależne od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani w inny sposób, dotyczących wydajności lub niezawodności tych produktów.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×