Vrednosti vremenskog rasporeda sistema SQL Server mogu biti netačne kada koristite uslužne programe ili tehnologije koje menjaju CPU frekvencije

Rezime

Microsoft SQL Server 2005 koristi CPU brojač visoke rezolucije da bi obezbedio mogućnosti vremenskog rasporeda mikrosekunde. Mikrosekundu je milion u sekundi (ili jedna hiljadita milisekunde). Međutim, vrednosti vremenskog rasporeda sistema SQL Server mogu biti netačne ako koristite tehnologije koje menjaju CPU frekvencije. Na primer, do ovog problema može doći kada koristite neku od sledećih tehnologija:

  • CPU stepping

  • AMD Cool'n'Quiet tehnologija

  • Razne šeme napajanja

Ovaj članak sadrži metode i dodatne informacije koje će vam pomoći da zaobiđete ovaj problem.

Simptomi

Kada koristite izjavu SET STATISTICS TIME da biste prikazali vreme izvršavanja servera, raščlanjivanja i kompilacije, možete dobiti netačne vrednosti. Na primer, možda ćete primetiti da je proteklo vreme izvršavanja SQL Servera mnogo više od vremena procesora. Ovaj problem može uticati na tačnost podešavanja performansi. Do ovog problema dolazi kada koristite jednu od tehnologija koje su navedene u odeljku "Rezime" na serveru.

Uzrok

Do ovog problema dolazi zato što se frekvencije procesora menjaju kada koristite ove tehnologije. SQL Server 2005 koristi CPU brojač visoke rezolucije da bi obezbedio mogućnosti vremenskog rasporeda mikrosekunde. Ako se cpU frekvencije promene da bi se uštedela energija i smanjio izlaz toplote, izračunata trajanja mogu biti netačna.

Rešenje

Informacije o servisnom paketu

Da biste rešili ovaj problem, nabavite najnoviji servisni paket za SQL Server 2005. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

913089 Nabavljanje najnovijeg servisnog paketa za SQL Server 2005Napomena U sql Server 2005 servisnom paketu 3 i u kasnijim servisnim paketima ne koristi se vremenska oznaka procesora. Ove verzije sistema SQL Server 2005 koriste pouzdaniji tajmer koji ima maksimalnu preciznost od 1 milisekunde.

Status

Ovaj problem je prvi put ispravljen u SQL Server 2005 servisnom paketu 3.

Rešenje

SQL Server 2005 zahteva poznata i stabilna mesta podataka da bi se izvršilo precizno podešavanje performansi. Ako su na računaru omogućena dinamička podešavanja frekvencije procesora, možete ih onemogućiti tako da PROCESORI održavaju konstantnu brzinu učestalosti pre nego što počnete da nadgledate i poštitujete performanse SISTEMA Server. Da biste to uradili, koristite sledeće metode.

Konfigurišite šemu napajanja na računaru da biste primorali procesore da ostanu na maksimalnoj frekvenciji

Da biste to uradili, sledite ove korake:

  1. Kliknite na dugmeStart , pokreni, otkucajte Powercfg.cpl, a zatim kliknite na dugme U redu.

  2. U dijalogu Svojstva opcija napajanja kliknite na dugme Uvek na listi šema napajanja.

  3. Kliknite na dugme U redu.

Može doći do nanosa. Drift je razilaženje između vrednosti frekvencije PROCESORA. Više informacija potražite u odeljku "Drift". U tom slučaju, nakon promene šeme napajanja morate ponovo pokrenuti Microsoft Windows da biste ponovoronizovali frekvencije svih procesora. Ako ne možete ponovo da pokrenete računar, omogućite Afinitet procesora sistema SQL Server da biste sprečili pomeranje niti radnika sistema SQL Server između PROCESORA. Kada to uradite, ne morate ponovo da pokrećete računar čak i ako dođe do razilaženja između vrednosti CPU frekvencije. Da biste omogućili Afinitet PROCESORA sistema SQL Server za sve procesore na serveru, morate da koristite drugu masku, u zavisnosti od broja logičkih procesora koji se nađu na serveru. Sledeća tabela navodi primere scenarija.

BROJ PROCESORA

Izjave koje omogućavaju afinitet procesora

02 procesora

exec sp_configure 'affinity mask', 0x00000003GOreconfigureGO

04 procesora

exec sp_configure 'affinity mask', 0x0000000FGOreconfigureGO

08 procesora

exec sp_configure 'affinity mask', 0x000000FFGOreconfigureGO

16 procesora

exec sp_configure 'affinity mask', 0x0000FFFFGOreconfigureGO

32 procesora

exec sp_configure 'affinity mask', 0xFFFFFFFFGOreconfigureGO

Napomena To može biti nedovoljno za onemogućavanje funkcija varijacije CPU frekvencije na nivou BIOS-a. Razne uslužne usluge nezavisnih proizvođača mogu da menjaju CPU frekvencije. Neke implementacije omogućavaju podešavanja frekvencije čak i kada su procesori pod maksimalnim postavkama šeme napajanja. U tom slučaju, morate onemogućiti ove uslužne programe nezavisnih proizvođača kada vršite podešavanje performansi u sistemu SQL Server 2005.

Korišćenje uslužnih programa i upravljačkih programa nezavisnih proizvođača za sinhronizaciju CPU frekvencija i brojača CPU satova

U retkim prilikama, sistem može zahtevati ispravku od proizvođača da bi ispravio probleme sa frekvencijom procesora. Najbolje je da proverite da li u sistemu postoje najnovije ispravke BIOS-a, mikrokoda i firmvera ako sumnjate da sistem možda ima problem.

Više informacija

Microsoft SQL Server 2000 i starije verzije sistema SQL Server koriste Windows mehanizme vremenskog rasporeda. Mehanizmi vremenskog rasporeda koriste vrednosti milisekundne preciznosti. Ova preciznost obično je od 10 do 15 ms. Međutim, preciznost može biti veća od 55 ms. SQL Server upiti se često dovrše u jednocifrenom milisekundnom ili mikrosekundnom vremenskom razmaku. Ova preciznost zahteva tajmer visoke rezolucije. Zbog toga ove verzije sistema SQL Server izveštavaju o trajanju nekih upita kao 0 ms. Zbog toga je teško pratiti performanse i podesiti performanse sistema SQL Server u ranijim verzijama sistema SQL Server.SQL Server 2005 poboljšava tačnost korišćenjem CPU brojača visoke rezolucije za obezbeđivanje mogućnosti vremenskog rasporeda mikrosekunde. Kada koristite tehnologije navedene u odeljku "Rezime", prijavljene vrednosti vremenskog rasporeda mogu biti netačne. Ovaj problem može uticati na sledeće objekte i funkcije:

  • Prati događaje:

    • Događaj "Pažnja"

    • Događaji u ččmicima uskladištenih procedura

    • Događaji u TSQL čmigu

    • Događaji u ččmicima

    • Događaji u črajku transakcija

  • Dinamički prikazi upravljanja:

    • 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

  • Izjava "PODEŠAVANJE STATISTIČKOG VREMENA"

  • Sistemski sto sisprocesa

Kada instalirate SQL Server 2005 servisni paket 2 (SP2), SQL Server evidentira poruku o grešci u evidenciji grešaka kada SQL Server otkrije da tajmeri visoke rezolucije nisu sinhronizovani između PROCESORA. Poruka o grešci ukazuje na to da vremenski raspored performansi možda nije tačan i korisnici bi trebalo da oprezno koriste podatke o performansama. Tekst poruke o grešci je sličn jednoj od sledećih poruka o grešci:

Poruka o grešci 1

Brojač vremenskih oznaka CPU-a na id-u planera 2 nije sinhronizovan sa drugim procesorima.

Poruka o grešci 2

Frekvencija vremenskih oznaka CPU-a se promenila u periodu od 191469 do 1794177 krpelja po milisekundi. Koristiće se nova frekvencija

SQL Server koristi uputstvo za brojač žigova u realnom vremenu (RDTSC) za pribavljanje 64-bitnog CPU brojača krpelja. Ovu vrednost možete podeliti pomoću CPU frekvencije da biste vrednost konvertovali u milisekundne vrednosti. Do varijacija vremenskog rasporeda može doći kada dođe do promene ili nanosa CPU frekvencije.

CPU stepping

CPU stepping se definiše kao namerna promena frekvencije PROCESORA. CPU stepping može biti poznat i kao Intel SpeedStep tehnologija ili AMD PowerNow! Tehnologija. Kada dođe do koraka CPU-a, brzina procesora može da poveća ili smanji u koracima manjim od 50 MHz da bi se uštedela energija i smanjio toplotni izlaz. PROCESORI koji se nalaze u istom neodbramljivom numa pristupu memoriji (NUMA) ne podešavaju nezavisno frekvencije. Sledeća tabela ilustruje kako promene koraka CPU-a mogu da utiču na izračunavanje vremena.

Radnju

RDTSC krpelji

Krpelji po milisekundi (učestalost)

Vreme na zidu

Započni grupu

1

200

0

Učestalost odstupi

200

100

1ms

Završi grupu

500

3ms

Zbirove

500

4ms

SQL Server hvata RDTSC krpelje i na početnom i na kraju RDTSC krpelja. Zatim, SQL Server deli krpelje po vrednosti frekvencije. U ovom primeru, sledeće izračunavanje vremena se dešava kada koristite vrednost učestalosti od 200 ili 100:

  • Frekvencija 200: 500/200 = 2,5 ms

  • Frekvencija 100: 500/100 = 5 ms

Nijedno od izračunavanja vremena ne podudara se sa stvarnim vremenom na zidu od 4 ms. Ako se ovo izračunavanje koristi u događaju praćenja RPC:Dovršeno,kolone podatakao trajanju i vremenu završetka se pogrešno izveštavaju. Događaj RPC:Completed hvata vreme početnog zidnog sata i CPU broj krpelja. Da biste dobili veći vremenski raspored rezolucije od Windows duration zaliha u sistemu SQL Server 2005, kolone podataka o trajanju i vremenu završetka u sql Server tragu se izračunavaju pomoću proteklog broja podebljanih PROCESORA. Kolona vremena završetka se izračunava dodavanjem kolone trajanja u kolonu "Vreme početka". U ovom primeru, kolona vremena završetka se izračunava netačnim dodavanjem 2,5 ms ili 5 ms u vreme početka.

Drift

Drift je divergencija u vrednosti cpU sata. Sistemi koji imaju više procesora mogu da proizvedu različite vrednosti CPU sata za istu tačku u vremenu. Iako to nije uobičajeno, CPU-ovi vremenom mogu iskusiti razdvajanje sata. Sledeći primer pokazuje kako promene nanosa mogu da utiču na ishod kolone podataka trajanja u sql Server tragu. Primer pretpostavlja da frekvencija PROCESORA ostaje stabilna na 200 krpelja po milisekundi. Sledeća tabela ilustruje događaje iz ovog scenarija.

Radnju

Windows planirani CPU

CPU 1 RDTSC

CPU 2 RDTSC

Vreme na zidu

Započni grupu

1

100

1100

0

Završi grupu

2

900

1900

4 ms

Zbirove

4 ms

SQL Server hvata RDTSC podeljake i na početnim i na krajnjim tačkama. Zatim, SQL Server deli RDTSC podeljake po vrednosti učestalosti. U ovom primeru, Windows je zakazao nit radnika sistema SQL Server na dva različita procesora. Nit SQL Server radnika koja servisiљe grupu prvi put je poиela na prvom CPU-u (CPU 1). Međutim, grupno izvršavanje je prekinuto u nekom trenutku, a SQL Server je grupno izvršavanje poslao u red čekanja. Kada je SQL Server poslao nit radnika sistema SQL Server koja ponovo servisiše ovu grupu u redosledu koji se može pokrenuti, Windows je poslao nit da se pokrene na drugom CPU -u (CPU 2). Nit SQL Server radnog programa je dovršena pokretanjem na CPU 2. Zbog CPU drifta, krajnje vrednosti krpelja koja je uhvaćena iz CPU 2 bila je 1900 umesto 900. Ovo ponašanje možete da izbegnete ako omogućite Afinitet SQL Server procesora. U ovom primeru se koriste sledeća izračunavanja vremenskog rasporeda:

  • Netačna, ali prijavljena vrednost: (1900 – 100 = 1800) / 200 = 9 ms

  • Tačna vrednost: (900 – 100 = 800) / 200 = 4 ms

Vrednost kolone trajanja događaja RPC:Completed biće prijavljena kao 9 ms umesto 4 ms. Ovaj rezultat je više nego dvostruko veći od tačne vrednosti od 4 ms. Poruke upozorenja o driftu se dodaju u SQL Server 2005 da bi se ukazalo na to da izlazni podaci o performansama koji su ranije pomenuti možda nisu pouzdani. U nekim otkrivenim situacijama, SQL Server 2005 SP2 može da prijavi poruke upozorenja o sledećem:

  • Lažne poruke upozorenja

  • Drift može postati desetine milisekunde bez izazivanja primetnog efekta sistema

Morate biti oprezni kada procenjujete izlaze vezane za performanse i kada uporedite izlaze vezane za performanse sa vremenskim rasporedom na zidu. Ako nema znakova drugih problema sa performansama, obično možete da zanemarite poruke upozorenja o driftu. Na primer, obično možete da zanemarite poruke upozorenja o driftu u sledećim situacijama:

  • Procesi su pokrenuti na očekivani način.

  • SQL Server upiti nisu pokrenuti u čudnim obrascima trajanja.

  • Ne vidite znake drugih uska grla.

Međutim, pre nego što zanemarite poruke upozorenja o driftu, preporučujemo da se obratite proizvođaču da biste se uverili da ne postoje poznati RDTSC problemi. Možete da koristite zastavicu za praćenje 8033 (–T8033) da biste se vratili ponašanju izveštavanja u originalnoj verziji sistema SQL Server 2005 i SQL Server 2005 SP1. Originalna izdata verzija SQL Server 2005 i SQL Server 2005 SP1 ne izveštava o porukama upozorenja o driftu. Ako bez problema koristite originalnu verziju sistema SQL Server 2005 ili SQL Server 2005 SP1, obično možete da zanemarite poruke.

Zašto saopštenje WAITFOR DELAY-a ispravno funkcioniše? Šta je sa periodičnim sistemskim procesima?

Na vremensko vreme ne utiče dizajn visoke rezolucije. SQL Server ne koristi tajmer visoke rezolucije za aktivnosti zasnovane na tajmeru. Neke aktivnosti vremenskog perioda zasnivaju se na tajmeru smanjene rezolucije koji koristi funkciju GetTickCount. Ove aktivnosti vremenskog okvira uključuju vremensko odlaganje zaključavanja, saopštenje WAITFOR DELAY i otkrivanje zastoja.

Za više informacija kliknite na sledeće brojeve članaka da biste videli članke u Microsoft bazi znanja:

938448 Server zasnovan na operativnom sistemu Windows Server 2003 može iskusiti zanošenje brojača vremenskih oznaka ako server koristi AMD opteron procesore sa dva jezgra ili procesore AMD opterona sa više procesora

895980 Programi koji koriste funkciju QueryPerformanceCounter mogu loše da funkcionišu u operativnim sistemima Windows Server 2003 i Windows XPProizvode nezavisnih proizvođača o kojima se govori u ovom članku proizvela su preduzeća koja su nezavisna od korporacije Microsoft. Microsoft ne daje garanciju, podrazumevanu ili na neki drugi način, o performansama ili pouzdanosti ovih proizvoda.

Potrebna vam je dodatna pomoć?

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Microsoft insajdere

Da li su vam ove informacije koristile?

Hvala vam na povratnim informacijama!

Hvala za povratne informacije! Izgleda da će biti od pomoći ako vas povežemo sa našim agentima Office podrške.

×