Hodnoty časovania SQL servera môžu byť nesprávne pri používaní nástrojov alebo technológií, ktoré menia frekvencie CPU

Súhrn

Microsoft SQL Server 2005 používa počítadlo CPU s vysokým rozlíšením, ktoré poskytuje funkcie mikrosekúnd na časovanie. Mikrosekúnd je jedna milióntinu druhej (alebo jedna tisícinu milisekundy). Pri používaní technológií, ktoré menia frekvenciu CPU, však môže byť nesprávne časové hodnoty servera SQL Server nesprávne. Tento problém sa môže vyskytnúť napríklad pri používaní niektorej z týchto technológií:

  • CPU steping

  • Technológia AMD Cool'n'Quiet

  • Rôzne schémy napájania

Tento článok obsahuje metódy a ďalšie informácie, ktoré vám pomôžu obísť tento problém.

Príznaky

Pri použití výkazu ČASOVá štatistika na zobrazenie spustenia, analýzy a času kompilácie servera môžete získať nesprávne hodnoty. Môžete si napríklad všimnúť, že uplynulý čas vykonávania SQL servera je oveľa väčší ako čas CPU. Tento problém môže ovplyvniť presnosť ladenia výkonu. Tento problém sa vyskytuje pri použití niektorej z technológií, ktoré sú uvedené v časti Súhrn na serveri.

Príčina

Tento problém sa vyskytuje, pretože frekvencie CPU sa pri používaní týchto technológií zmenia. SQL Server 2005 používa počítadlo CPU s vysokým rozlíšením, ktoré poskytuje funkcie mikrosekúnd na časovanie. Ak sa frekvencie CPU zmenia tak, aby šetrili energiu a znížili tepelný výstup, vypočítané trvanie môže byť nesprávne.

Riešenie

Informácie o balíku Service Pack

Ak chcete tento problém vyriešiť, Získajte najnovší balík Service Pack pre SQL Server 2005. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na nasledovné číslo článku:

913089 Získanie najnovšieho balíka Service Pack pre SQL Server 2005Poznámka: V balíku SQL Server 2005 Service Pack 3 a v novších balíkoch Service Pack sa časová pečiatka procesora nepoužije. Tieto verzie SQL servera 2005 používajú spoľahlivejší časovač s maximálnou presnosťou 1 milisekundy.

Stav

Tento problém bol opravený v balíku SQL Server 2005 Service Pack 3.

Alternatívne riešenie

SQL Server 2005 vyžaduje známe a stabilné údajové body na vykonanie presného ladenia výkonu. Ak je v počítači povolená funkcia dynamických frekvencií CPU, môžete ich vypnúť, aby CPU udržali konštantnú frekvenciu pred začatím sledovania a ladenia výkonu SQL servera. Vykonáte to pomocou nasledujúcich postupov.

Konfigurácia Power scheme v počítači na vynútenie CPU, aby zostali maximálne frekvencie

Postupujte podľa nasledujúcich krokov:

  1. Kliknite na tlačidlo Štart, kliknite na položku Spustiť, zadajte príkaz powercfg. cpla potom kliknite na tlačidlo OK.

  2. V dialógovom okne Vlastnosti možnosti napájania kliknite na položku vždy zapnuté v zozname schémy Power .

  3. Kliknite na tlačidlo OK.

Môže sa vyskytnúť drift. Drift je rozdiel medzi hodnotami frekvencie CPU. Ďalšie informácie nájdete v časti drift. V tomto prípade je nutné reštartovať systém Microsoft Windows na opätovnú synchronizáciu frekvencie všetkých CPU po zmene schémy napájania. Ak sa vám nepodarí reštartovať počítač, povoľte afinitu procesora SQL servera, aby sa zabránilo premiestneniu vlákien pracovného servera SQL Server. Keď to urobíte, Nemusíte reštartovať počítač aj v prípade, že sa vyskytuje rozdiel medzi hodnotami frekvencie CPU. Ak chcete povoliť afinitu procesora SQL servera pre všetky procesory na serveri, musíte použiť inú masku v závislosti od počtu logických procesorov, ktoré sú na serveri. V nasledujúcej tabuľke sú uvedené príklady scenárov.

Číslo CPU

Príkazy na povolenie afinity procesora

02 CPU

exec sp_configure ' afinita maska ', 0x00000003GOreconfigureGO

04 CPU

exec sp_configure ' afinita maska ', 0x0000000FGOreconfigureGO

08 CPU

exec sp_configure ' afinita maska ', 0x000000FFGOreconfigureGO

16 CPU

exec sp_configure ' afinita maska ', 0x0000FFFFGOreconfigureGO

32 CPU

exec sp_configure ' afinita maska ', 0xFFFFFFFFGOreconfigureGO

Poznámka: Môže byť nedostatočné na vypnutie funkcie frekvenčných variácií CPU na úrovni systému BIOS. Rôzne nástroje tretích strán môžu meniť frekvencie CPU. Niektoré implementácie zapínajú adjustácie frekvencie aj vtedy, keď sú CPU v rámci maximálnej nastavenia schémy napájania. V tomto prípade je pri vykonávaní ladenia výkonu v programe SQL Server 2005 nutné vypnúť tieto pomôcky tretích strán.

Používanie nástrojov a ovládačov tretích strán na synchronizáciu frekvencií CPU a počítadiel hodín CPU

Pri zriedkavých príležitostiach môže systém vyžadovať aktualizáciu od výrobcu na opravu problémov s frekvenčným rozsahom CPU. Ak máte podozrenie, že systém môže mať problém, je najvhodnejší postup na kontrolu systému najnovších aktualizácií systému BIOS, microcode a firmvéru.

Ďalšie informácie

Microsoft SQL Server 2000 a staršie verzie SQL servera používajú mechanizmy časovania Windowsu. Mechanizmy časovania používajú hodnoty s presnosťou na milisekundu. Táto presnosť je zvyčajne 10 až 15 MS. Presnosť však môže byť väčšia ako 55 MS. Dotazy SQL servera sa často dokončia v rámci jednej číslice milisekundy alebo mikrosekundy. Táto presnosť vyžaduje časovač s vysokým rozlíšením. Preto tieto verzie SQL servera hlásia trvanie niektorých dotazov ako 0 MS. Preto je ťažké sledovať výkon a ladiť výkonnosť SQL servera v starších verziách servera SQL Server. SQL Server 2005 zlepšuje presnosť pomocou počítadla CPU s vysokým rozlíšením, ktoré poskytuje funkcie mikrosekúnd. Pri používaní technológií, ktoré sú uvedené v časti Súhrn, môžu byť nahlásené časové hodnoty nesprávne. Tento problém môže ovplyvniť nasledujúce objekty a funkcie:

  • Sledovanie udalostí:

    • Udalosť pozornosti

    • Udalosti v uzle uložených procedúr

    • Udalosti v uzle v TSQL

    • Udalosti v uzle objektov

    • Udalosti v uzle transakcií

  • Dynamické zobrazenia správy:

    • 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

  • Výkaz o čase nastavovania štatistík

  • Tabuľka systému sysprocesses

Po inštalácii SQL servera 2005 Service Pack 2 (SP2), SQL Server zapíše chybové hlásenie do denníka chýb, keď SQL Server zistí, že časovače s vysokým rozlíšením nie sú synchronizované medzi CPU. V chybovom hlásení sa uvádza, že časovanie výkonu nemusí byť presné a používatelia by mali používať údaje o výkone s opatrnosťou. Text chybového hlásenia sa podobá na jedno z nasledujúcich chybových hlásení:

Chybové hlásenie 1

Počítadlo časovej pečiatky PROCESORA pri identifikácii plánovača 2 nie je synchronizované s inými procesormi.

Chybové hlásenie 2

Frekvencia časovej pečiatky CPU sa zmenila z 191469 na 1794177 kliešťov na milisekundu. Použije sa nová frekvencia

SQL Server používa inštrukcie počítadla počítadiel v reálnom čase (RDTSC) na získanie počtu začiarknutých hodín v 64-bitovom PROCESORe. Túto hodnotu môžete rozdeliť pomocou frekvencie CPU na konvertovanie hodnoty na hodnoty v milisekundách. Odchýlky časovania sa môžu vyskytnúť, ak sa vyskytnú zmeny frekvencie CPU alebo drift.

CPU steping

CPU steping je definovaná ako zámerná Zmena frekvencie CPU. CPU steping môže byť tiež známy ako Intel SpeedStep Technology alebo AMD PowerNow! technológie. Keď sa vyskytne CPU steping, rýchlosť PROCESORA sa môže zvýšiť alebo znížiť v prírastkoch ako malý ako 50 MHz na šetrenie energie a zníženie tepelného výstupu. CPU, ktoré sú v rámci toho istého uzla s nejednotným prístupom na pamäť (NUMA), nezávisle upravujú frekvencie. V nasledujúcej tabuľke je znázornené, ako môžu zmeny vykonané CPU ovplyvniť výpočty časovania.

Akcie

RDTSC kliešte

Kliešte na milisekundu (frekvencia)

Čas nástenné hodiny

Začiatočná dávka

1

200

0

Frekvenčný rozsah smerom nadol

200

100

1ms

Koncová dávka

500

3ms

SÚČTY

500

4ms

SQL Server zachytáva RDTSC kliešte na začiatku a na konci RDTSC kliešte. Potom SQL Server rozdeľuje kliešte podľa hodnoty frekvencie. V tomto príklade dochádza k nasledujúcim výpočtom časovania pri použití hodnoty frekvencie 200 alebo 100:

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

  • Frekvencia 100: 500/100 = 5 MS

Ani jeden z výpočtov časovania sa nezhoduje s aktuálnym časom nástenného času 4 MS. Ak sa tento výpočet použije v rámci RPC: dokončená udalosť sledovania, v stĺpcoch Trvanie a Koncový čas sa oznamujú nesprávne údaje. Udalosť RPC: dokončená zaznamenáva počiatočný čas nástenného času a počet začiarknutých hodín CPU. Ak chcete v programe SQL Server 2005 použiť časovanie s vyššou presnosťou, ako je napríklad dodanie systému Windows, stĺpce s údajmi o trvaní a čase ukončenia v sledovaní SQL servera sa vypočítavajú pomocou počtu začiarknutých hodín. Stĺpec Koncový čas sa vypočíta pridaním stĺpca Trvanie do stĺpca Počiatočný čas . V tomto príklade sa stĺpec Koncový časový úsek vypočítava nesprávne pridaním programu 2,5 ms alebo 5 MS do počiatočného času.

Drift

Hodnota drift je odchýlka v hodnotách hodín PROCESORA. Systémy, ktoré majú viacero CPU, môžu v rovnakom čase produkovať rôzne hodnoty hodín PROCESORA. Hoci to nie je bežné, CPU môže časom vyskytovať odstup času. Nasledujúci príklad ukazuje, ako môže drift zmeny ovplyvniť výsledok stĺpca údaje o trvaní v sledovaní servera SQL Server. Príklad predpokladá, že frekvencia PROCESORA zostane v 200 kliešťoch na milisekundu. Nasledujúca tabuľka znázorňuje udalosti v tomto scenári.

Akcie

Windows naplánovaný CPU

CPU 1 RDTSC

CPU 2 RDTSC

Čas nástenné hodiny

Začiatočná dávka

1

100

1100

0

Koncová dávka

2

900

1900

4 MS

SÚČTY

4 MS

SQL Server zachytáva RDTSC kliešte na začiatku a na koncových bodoch. Potom SQL Server rozdeľuje RDTSC kliešte podľa hodnoty frekvencie. V tomto príklade Windows naplánovalo vlákno pracovník SQL servera na dvoch rôznych CPU. Vlákno pracovníka SQL servera, ktoré služby šarža najprv spustila na prvom CPU (CPU 1). V určitom bode sa však vykonala prerušená realizácia šarže a SQL Server odoslal dávkovú realizáciu do čakajúceho frontu. Keď SQL Server odoslal vlákno pracovníka SQL servera, ktorý túto dávku služby runnable, Windows odoslal vlákno na spustenie na druhom CPU (CPU 2). Vlákno pracovného servera SQL Server dokončené spustené na CPU 2. Vzhľadom na to, že CPU Drift, hodnota ukončenia začiarknutia, ktorá bola zachytená z CPU 2, je 1900 namiesto 900. Toto správanie sa môžete vyhnúť, ak povolíte afinitu procesora SQL servera. V tomto príklade sa používajú nasledujúce výpočty časovania:

  • Nesprávna, ale zaznamenaná hodnota: (1900 – 100 = 1800)/200 = 9 MS

  • Správna hodnota: (900 – 100 = 800)/200 = 4 MS

Hodnota stĺpca Trvanie pre udalosť RPC: dokončená sa nahlási ako 9 MS namiesto 4 MS. Tento výsledok je viac ako dvojnásobok správnej hodnoty 4 MS. Hlásenia s upozornením drift sa pridajú do SQL servera 2005, čo znamená, že výstupy výkonu, ktoré sú spomenuté vyššie, nemusia byť spoľahlivé. V niektorých nekrytých situáciách môže SQL Server 2005 SP2 nahlásiť upozorňujúce správy o týchto témach:

  • Hlásenia s upozornením False drift

  • Drift sa môže stať desiatimi milisekundami bez toho, aby spôsoboval citeľný systémový efekt

Pri vyhodnocovaní výstupov súvisiacich s výkonom a pri porovnávaní výstupov súvisiacich s výkonom do časovania nástenného času musíte byť opatrný. Ak neexistujú žiadne náznaky iných problémov s výkonom, zvyčajne môžete ignorovať výstražné hlásenia driftu. Môžete napríklad zvyčajne ignorovať hlásenia s upozornením na drift v nasledujúcich situáciách:

  • Procesy sú spustené podľa očakávaní.

  • Dotazy SQL servera nie sú spustené v podivnom časovom usporiadaní.

  • Nezobrazujú sa vám príznaky iných úzkych miest.

Pred ignorovaním varovných hlásení driftu však odporúčame, aby ste sa uistili, že neexistujú žiadne známe problémy s RDTSC. Ak sa chcete vrátiť k správaniu správania v pôvodnej verzii SQL servera 2005 a SQL Server 2005 SP1, môžete použiť príznak sledovania 8033 (– T8033). Pôvodná verzia programu SQL Server 2005 a SQL Server 2005 SP1 nehlásia upozorňujúce hlásenia driftu. Ak používate originálnu verziu programu SQL Server 2005 alebo SQL Server 2005 SP1 bez problémov, môžete správy zvyčajne ignorovať.

Prečo príkaz oneskorenie WAITFOR funguje správne? A čo pravidelné systémové procesy?

Návrh s vysokým rozlíšením neovplyvní mechanizmy časového limitu. SQL Server nepoužíva časovač s vysokým rozlíšením pre aktivity založené na časovom rozlíšení. Niektoré aktivity časového limitu vychádzajú zo zníženého časovača rozlíšenia, ktorý používa funkciu GetTickCount . Tieto časové úseky zahŕňajú časový limit uzamknutia, výkaz ONESKOREnia WAITFOR a Zisťovanie zablokovania.

Ďalšie informácie získate po kliknutí na nasledovné čísla článkov databázy Microsoft Knowledge Base:

938448 Server so systémom Windows Server 2003 môže mať časovú pečiatku počítadlo počítadiel, ak server používa Dual-Core AMD Opteron procesorov alebo Multiprocessor AMD Opteron

895980 Programy, ktoré používajú funkciu napríklad QueryPerformanceCounter, môžu v systéme Windows Server 2003 a vo Windowse XP fungovať zleProdukty tretích strán, ktorých sa tento článok zaoberá, vyrábajú spoločnosti, ktoré sú nezávislé od spoločnosti Microsoft. Spoločnosť Microsoft neposkytuje žiadnu záruku, implikovanú ani inak, o výkone alebo spoľahlivosti týchto produktov.

Potrebujete ďalšiu pomoc?

Rozšírte svoje zručnosti
Preskúmať školenie
Buďte medzi prvými, ktorí získajú nové funkcie
Pripojiť k Microsoft insiderov chcú

Považujete poskytnuté informácie za užitočné?

Ďakujem za vaše pripomienky!

Ďakujeme vám za pripomienky. Pravdepodobne vám pomôže, ak vás spojíme s pracovníkom podpory pre Office.

×