Rezime
Microsoft SQL Server 2005 koristi brojač procesora visoke rezolucije da bi obezbedio mogućnosti podešavanja vremena u mikrosekundama. Mikrosekunda je milioniti deo sekunde (ili hiljaditi deo milisekunde). Međutim, vrednosti za vremenski raspored za SQL Server mogu biti netačne ako koristite tehnologije koje menjaju učestalost CPU. Na primer, do ovog problema može doći kada koristite bilo koju od sledećih tehnologija:
- Korak po CPU-u
- AMD Cool'n'Kuiet tehnologija
- Različite š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 za prikaz vremena izvršavanja, raščlanjivanja i kompajliranja sa servera, možete dobiti netačne vrednosti. Na primer, možda ćete primetiti da je proteklo vreme izvršavanja sistema SQL Server mnogo duže od vremena CPU. Ovaj problem može da utiče na tačnost podešavanja performansi. Ovaj problem se javlja kada koristite neku od tehnologija navedenih u odeljku "Rezime" na serveru.
Uzrok
Do ovog problema dolazi zato što se frekvencije procesora menjaju kada koristite ove tehnologije. SQL Server 2005 koristi brojač procesora visoke rezolucije da bi obezbedio mogućnosti podešavanja vremena u mikrosekundama. Ako se frekvencije procesora promene radi uštede energije i smanjenja toplotne snage, 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. Više informacija potražite u sledećem broju članka da biste videli članak u Microsoft bazi znanja:
913089 Kako da nabavite najnoviji servisni paket za SQL Server 2005
Napomena: U sistemu SQL Server 2005 sa servisnim paketom 3 i novijim servisnim paketima, vremenska oznaka procesora se ne koristi. Ove verzije sistema SQL Server 2005 koriste pouzdaniji tajmer sa maksimalnom preciznošću od 1 milisekunde.
Status
Ovaj problem je prvi put ispravljen u sistemu SQL Server 2005 servisni paket 3.
Privremeno rešenje
SQL Server 2005 zahteva poznate i stabilne tačke podataka radi preciznog podešavanja performansi. Ako su na računaru omogućena dinamička podešavanja frekvencije CPU-a, možete ih onemogućiti kako bi procesori održavali stabilnu frekvenciju pre nego što počnete da nadgledate i podešavate performanse sistema SQL Server. Da biste to uradili, koristite sledeće metode.
Konfigurišite šemu napajanja na računaru kako biste primorali procesore da ostanu na maksimalnoj frekvenciji
Pratite ove korake da biste to uradili:
Kliknite na dugme "Start", izaberite stavku "Pokreni", otkucajte Powercfg.cpl, a zatim kliknite na dugme "U redu".
U dijalogu " Svojstva opcija napajanja " izaberite stavku "Uvek uključeno" sa liste šeme napajanja .
Kliknite na dugme U redu.
Može doći do zanošenja. Drift je divergencija između vrednosti frekvencije CPU. Više informacija potražite u odeljku "Drift". U tom slučaju morate ponovo pokrenuti Microsoft Windows da biste ponovo sinhronizovali frekvencije svih procesora nakon promene šeme napajanja.
Ako ne možete ponovo da pokrenete računar, omogućite SQL Server afinitet procesora da biste sprečili SQL Server radne niti da se premeštaju između CPU-ova. Kada to uradite, ne morate ponovo da pokrenete računar, čak i ako dođe do odstupanja između vrednosti frekvencije CPU. Da biste omogućili afinitet SQL Server procesora za sve CPU procesore na serveru, morate da koristite drugačiju masku, u zavisnosti od broja logičkih procesora koji postoje na serveru.
Sledeća tabela navodi primere scenarija.
| Broj CPU-a | Izjave za omogućavanje afiniteta procesora |
|---|---|
| 02 procesora | Exec sp_configure 'Affinity Mask', 0x00000003 GO Ponovno konfigurisanje GO |
| 04 CPU-a | Exec sp_configure 'Affinity Mask', 0x0000000F GO Ponovno konfigurisanje GO |
| 08 procesora | Exec sp_configure 'Affinity Mask', 0x000000FF GO Ponovno konfigurisanje GO |
| 16 procesora | Exec sp_configure 'Affinity Mask', 0x0000FFFF GO Ponovno konfigurisanje GO |
| 32 procesora | Exec sp_configure 'Affinity Mask', 0xFFFFFFFF GO Ponovno konfigurisanje GO |
Napomena: Onemogućavanje funkcija varijacija frekvencije CPU-a na nivou BIOS-a možda nije dovoljno. Razni uslužni programi nezavisnih proizvođača mogu da izmene frekvencije CPU-a. Neke implementacije omogućavaju podešavanje frekvencije čak i kada su procesori pod postavkama šeme maksimalne snage. U tom slučaju, morate da onemogućite ove uslužne programe nezavisnih proizvođača kada vršite podešavanje performansi u sistemu SQL Server 2005.
Koristite uslužne programe i upravljačke programe nezavisnih proizvođača da biste sinhronizovali frekvencije i brojače časova CPU-a
U retkim prilikama, sistem može zahtevati ažuriranje od proizvođača da bi rešio probleme sa frekvencijom CPU. Najbolja praksa je da proverite da li sistem sadrži najnovije ispravke BIOS-a, mikrokoda i firmvera ako sumnjate da sistem ima problem.
Više informacija
Microsoft SQL Server 2000 i starije verzije sistema SQL Server koriste Windows mehanizam za podešavanje vremena. Mehanizmi za podešavanje vremena koriste vrednosti preciznosti u milisekundama. Obično je ova preciznost od 10 do 15 ms. Međutim, preciznost može da bude i do 55 ms. SQL Server upiti se često dovršavaju u vremenskom rasponu od jednocifrenih milisekundi ili mikrosekundi. Ova preciznost zahteva tajmer visoke rezolucije. Stoga, ove verzije SQL Server prijavljuju trajanje nekih upita kao 0 ms. Zbog toga je teško nadgledati performanse i podesiti performanse sistema SQL Server u starijim verzijama sistema SQL Server.
SQL Server 2005 poboljšava tačnost pomoću brojača procesora visoke rezolucije da bi se obezbedile mogućnosti podešavanja vremena u mikrosekundama. Kada koristite tehnologije navedene u odeljku "Rezime", prijavljene vrednosti vremena mogu biti netačne.
Ovaj problem može uticati na sledeće objekte i funkcije:
Praćenje događaja:
Događaj "Pažnja"
Događaji u čvoru uskladištenih procedura
Događaji u TSQL čvoru
Događaji u čvoru "Objekti"
Događaji u čvoru "Transakcije"
Prikazi dinamičkog 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
Naredba SET STATISTICS TIME
Tabela sistema sysprocesses
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 rasporedi performansi možda nisu precizni i da korisnici treba da koriste podatke o performansama sa oprezom.
Tekst poruke o grešci liči na neku od sledećih poruka o grešci:
Poruka o grešci 1
Napomena
Brojač vremenske oznake CPU-a na ID-u planera 2 se ne sinhronizuje sa drugim procesorima.
Poruka o grešci 2
Napomena
Frekvencija vremenske oznake CPU-a se promenila sa 191469 na 1794177 otkucaja u milisekundi. Koristiće se nova učestalost
SQL Server koristi instrukciju Real Time Stamp Counter (RDTSC) za dobijanje 64-bitnog CPU broja krpelja. Ovu vrednost možete podeliti sa učestalošću procesora da biste je konvertovali u vrednosti u milisekundama. Do promena vremena može doći kada se promeni frekvencija CPU-a ili dođe do zanošenja.
Korak po CPU-u
Korak CPU-a definisan je kao namerna promena frekvencije CPU-a. Korak CPU-a može biti poznat i kao Intel SpeedStep tehnologija ili AMD PoverNov! tehnologija. Kada dođe do koraka CPU-a, brzina procesora može da se poveća ili smanji u pomacima od samo 50 MHz radi uštede energije i smanjenja toplotne snage. CPU-ovi koji se nalaze unutar istog čvora nejednolikog pristupa memoriji (NUMA) ne podešavaju nezavisno frekvencije.
Sledeća tabela ilustruje kako promene koraka CPU-a mogu da utiču na izračunavanja vremena.
| Radnja | RDTSC krpelji | Otkucaji po milisekundi (frekvencija) | Vreme sata na zidu |
|---|---|---|---|
| Pokreni paket | 1 | 200 | 0 |
| Frequency Step Down | 200 | 100 | 1ms |
| Kraj grupe | 500 | 3ms | |
| UKUPNE VREDNOSTI | 500 | 4ms |
SQL Server snima RDTSC krpelje i na početku i na kraju RDTSC krpelja. Zatim, SQL Server deli krpelje sa vrednošću frekvencije.
U ovom primeru, sledeća izračunavanja vremena se dešavaju kada koristite vrednost učestalosti 200 ili 100:
Frekvencija 200: 500/200 = 2,5 ms
Frekvencija 100: 500/100 = 5 ms
Nijedan od vremenskih proračuna ne odgovara stvarnom vremenu zidnog sata od 4 ms.
Ako se ovo izračunavanje koristi u događaju praćenja RPC:Completed, kolone sa podacima o trajanju i vremenu završetka se pogrešno prijavljuju. Događaj RPC:Completed snima vreme sata početnog zida i broj podeljka CPU. Da bi se dobila veća rezolucija od opcija za snabdevanje operativnim sistemom Windows u sistemu SQL Server 2005, kolone sa podacima o trajanju i vremenu završetka u SQL Server praćenju izračunavaju se pomoću proteklog broja krpelja CPU. Kolona "Vreme završetka" izračunava se dodavanjem kolone "Trajanje" koloni "Vreme početka". U ovom primeru, kolona sa vremenom završetka se izračunava tako što se vremenu početka neispravno dodaje 2,5 ms ili 5 ms.
Drift
Drift je divergencija u vrednostima CPU takta. Sistemi koji imaju više procesora mogu da proizvode različite vrednosti takta CPU-a za istu vremensku tačku. Iako to nije uobičajeno, procesori mogu iskusiti razdvajanje sata tokom vremena.
Sledeći primer pokazuje kako promene prelaska mogu da utiču na ishod kolone sa podacima o trajanju u SQL Server praćenju. U primeru se pretpostavlja da je frekvencija procesora konstantna na 200 otkucaja u milisekundi. Sledeća tabela ilustruje događaje u ovom scenariju.
| Radnja | Planirani procesor u operativnom sistemu Windows | CPU 1 RDTSC | CPU 2 RDTSC | Vreme sata na zidu |
|---|---|---|---|---|
| Pokreni paket | 1 | 100 | 1100 | 0 |
| Kraj grupe | 2 | 900 | 1900 | 4 ms |
| UKUPNE VREDNOSTI | 4 ms |
SQL Server snima RDTSC tikove i na početnim i na krajnjim tačkama. Zatim, SQL Server deli RDTSC otkucaje sa vrednošću frekvencije. U ovom primeru, Windows je planirao SQL Server radnu nit na dva različita CPU-a. SQL Server radna nit koja servisira paket prvi put je pokrenuta na prvom CPU-u (CPU 1).
Međutim, masovno izvršavanje je prekinuto u nekom trenutku i SQL Server je poslao grupno izvršavanje u red na čekanju. Kada je SQL Server poslao SQL Server radnu nit koja ponovo servisira ovu seriju u redosled koji se može pokrenuti, Vindovs je poslao nit da se pokrene na drugom CPU-u (CPU KSNUMKS). SQL Server radna nit je dovršena pokretanjem na CPU 2. Zbog zanošenja CPU-a, krajnja vrednost krpelja koja je zarobljena iz CPU 2 bila je 1900 umesto 900. Ovo ponašanje možete izbeći ako omogućite afinitet SQL Server procesora.
U ovom primeru koriste se sledeća izračunavanja vremena:
- Netačna, ali prijavljena vrednost: (1900 – 100 = 1800) / 200 = 9 ms
- Tačna vrednost: (900 – 100 = 800) / 200 = 4 ms
Vrednost kolone "Trajanje" za događaj 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 zanošenju se dodaju u SQL Server 2005 da bi ukazale na to da izlazi performansi koji su pomenuti ranije možda nisu pouzdani. U nekim nepokrivenim situacijama SQL Server 2005 SP2 može da prijavi poruke upozorenja o sledećem:
- False drift warning messages
- Drift može postati desetine milisekundi bez izazivanja primetnog efekta sistema
Morate biti pažljivi kada procenjujete izlaze vezane za performanse i kada poredite izlaze vezane za performanse sa vremenskim rasporedom zidnih satova. Ako nema znakova drugih problema sa performansama, obično možete zanemariti poruke upozorenja o zanošenju. Na primer, poruke upozorenja o zanošenju obično možete zanemariti u sledećim situacijama:
- Procesi se odvijaju prema očekivanjima.
- SQL Server upiti se ne izvršavaju po čudnim obrascima trajanja.
- Ne vidite znakove drugih uskih grla.
Međutim, pre nego što zanemarite poruke upozorenja o zanošenju, preporučujemo da se obratite proizvođaču kako biste se uverili da ne postoje poznati RDTSC problemi.
Možete da koristite zastavicu praćenja 8033 (–T8033) da biste se vratili na ponašanje izveštavanja u originalnoj verziji izdanja sistema SQL Server 2005 i sistemu SQL Server 2005 SP1. Originalne verzije SQL Server 2005 i SQL Server 2005 SP1 ne prijavljuju poruke upozorenja o zanošenju. Ako bez problema koristite originalnu verziju programa SQL Server 2005 ili SQL Server 2005 SP1, obično možete da zanemarite poruke.
Zašto instrukcija WAITFOR DELAY ispravno funkcioniše? Šta je sa periodičnim sistemskim procesima?
Dizajn visoke rezolucije ne utiče na mehanizme isteka vremena. SQL Server ne koristi tajmer visoke rezolucije za aktivnosti zasnovane na tajmeru. Neke aktivnosti isteka vremena zasnovane su na tajmeru smanjene rezolucije koji koristi funkciju GetTickCount. Ove aktivnosti isteka vremena uključuju istek vremena za zaključavanje, izjavu WAITFOR DELAY i otkrivanje mrtve tačke.
Više informacija potražite u sledećim brojevima članaka da biste videli te članke u Microsoft bazi znanja:
938448 Server zasnovan na sistemu Windows Server 2003 može da naiđe na pomeranje brojača vremenske oznake ako server koristi dual-core AMD Opteron procesore ili višeprocesorske AMD Opteron procesore
895980 Programi koji koriste funkciju QueryPerformanceCounter mogu imati loše performanse u operativnim sistemima Windows Server 2003 i Windows XP
Proizvodi nezavisnih proizvođača opisani u ovom članku proizveli su proizvođači nezavisni od korporacije Microsoft. Korporacija Microsoft ne pruža nikakve garancije, podrazumevane ili neke druge, u vezi sa performansama ili pouzdanošću ovih proizvoda.