Salt la conținutul principal
Asistență
Conectare

Valorile de temporizare SQL Server pot fi incorecte atunci când utilizați utilitare sau tehnologii care modifică frecvențele PROCESORului

Lucrați de oriunde de pe orice dispozitiv cu Microsoft 365

Faceți upgrade la Microsoft 365 pentru a lucra oriunde cu cele mai recente caracteristici și actualizări.

Faceți upgrade acum

Rezumat

Microsoft SQL Server 2005 utilizează Counter-ul CPU de înaltă rezoluție pentru a furniza capacități de temporizare microsecunde. O microsecundă este de o milionime de secundă (sau de o mie de milisecunde). Cu toate acestea, valorile de temporizare SQL Server pot fi incorecte dacă utilizați tehnologii care modifică frecvențele PROCESORului. De exemplu, această problemă poate apărea atunci când utilizați oricare dintre următoarele tehnologii:

  • Intensificarea CPU

  • Tehnologia AMD Cool'n'Quiet

  • Diverse scheme de alimentare

Acest articol conține metode și informații suplimentare pentru a vă ajuta să soluționați această problemă.

Simptome

Atunci când utilizați instrucțiunea SET TIME STATISTICs pentru a afișa orele de execuție, analiză și compilare a serverului, este posibil să obțineți valori incorecte. De exemplu, este posibil să observați că timpul scurs din timpul execuției SQL Server este mult mai mult decât timpul CPU. Această problemă poate afecta acuratețea ajustării performanței. Această problemă apare atunci când utilizați una dintre tehnologiile listate în secțiunea "Rezumat" de pe server.

Cauză

Această problemă apare deoarece frecvențele CPU sunt modificate atunci când utilizați aceste tehnologii. SQL Server 2005 utilizează contor CPU de înaltă rezoluție pentru a furniza capacități de temporizare microsecunde. Dacă frecvențele CPU sunt modificate pentru a conserva energia și a reduce ieșirea din căldură, durata calculată poate fi incorectă.

Rezolvare

Informații despre pachetul de servicii

Pentru a rezolva această problemă, obțineți cel mai recent pachet Service Pack pentru SQL Server 2005. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:

913089 Cum se obține cel mai recent pachet Service Pack pentru SQL Server 2005Notă În SQL Server 2005 Service Pack 3 și în pachetele de servicii mai recente, marca de timp a procesorului nu este utilizată. Aceste versiuni de SQL Server 2005 folosesc un cronometru mai fiabil care are o precizie maximă de 1 milisecundă.

Stare

Această problemă a fost corectată prima dată în SQL Server 2005 Service Pack 3.

Soluție de evitare

SQL Server 2005 necesită puncte de date cunoscute și stabile pentru a efectua un reglaj precis al performanței. Dacă ajustările dinamice ale frecvenței CPU sunt activate pe computer, le puteți dezactiva, astfel încât procesoarele să mențină o frecvență constantă înainte de a începe să monitorizați și să reglați performanța SQL Server. Pentru a face acest lucru, utilizați următoarele metode.

Configurați schema de alimentare pe computer pentru a impune ca procesoarele să rămână la frecvența maximă

Pentru a face acest lucru, urmați acești pași:

  1. Faceți clic pe Start, pe rulare, tastați puternic. cpl, apoi faceți clic pe OK.

  2. În caseta de dialog Proprietăți Opțiuni alimentare , faceți clic pe întotdeauna în lista scheme Power .

  3. Faceți clic pe OK.

Poate apărea un drift. Un Drift este o diferență între valorile frecvenței CPU. Pentru mai multe informații, consultați secțiunea "Drift". În acest caz, trebuie să reporniți Microsoft Windows pentru a resincroniza frecvențele tuturor procesoarelor după ce modificați schema de alimentare. Dacă nu puteți reporni computerul, activați afinitatea procesorului SQL Server pentru a împiedica firele de lucrător SQL Server să se mute între procesoare. Atunci când procedați astfel, nu trebuie să reporniți computerul, chiar dacă apare o diferență între valorile frecvenței CPU. Pentru a activa afinitatea procesorului SQL Server pentru toate procesoare pe server, trebuie să utilizați o altă mască, în funcție de numărul de procesoare logice care se află pe server. Următorul tabel listează exemple de scenarii.

Număr CPU

Declarații pentru a activa afinitatea procesorului

02 procesoare

exec sp_configure "mască de afinitate", 0x00000003GOreconfigureGO

04 procesoare

exec sp_configure "mască de afinitate", 0x0000000FGOreconfigureGO

08 procesoare

exec sp_configure "mască de afinitate", 0x000000FFGOreconfigureGO

16 procesoare

exec sp_configure "mască de afinitate", 0x0000FFFFGOreconfigureGO

Procesoare 32

exec sp_configure "mască de afinitate", 0xFFFFFFFFGOreconfigureGO

Notă Este posibil să nu fie suficient să dezactivați caracteristicile de variație a frecvenței CPU la nivelul BIOS. Diverse utilitare de la terți pot altera frecvențele CPU. Unele implementări permit ajustările de frecvență chiar și atunci când procesoarele se află sub Setări de schemă Power maximă. În acest caz, trebuie să dezactivați aceste utilitare de la terți atunci când efectuați ajustarea performanței în SQL Server 2005.

Utilizați utilitare și drivere de la terți pentru a sincroniza frecvențele CPU și contoare de ceas CPU

În ocazii rare, un sistem poate necesita o actualizare de la producător pentru a corecta problemele cu frecvența CPU. Este o practică optimă să verificați sistemul pentru cele mai recente actualizări de BIOS, microcod și firmware, dacă suspectați că sistemul poate avea o problemă.

Mai multe informații

Microsoft SQL Server 2000 și versiunile anterioare de SQL Server utilizează mecanismele de temporizare Windows. Mecanismele de temporizare utilizează valori de precizie de milisecunde. De obicei, această precizie este de 10 până la 15 MS. Cu toate acestea, precizia poate fi la fel de mare ca 55 MS. Interogările SQL Server se finalizează frecvent într-o singură cifră, în milisecunde sau în microsecunde. Această precizie necesită un cronometru de înaltă rezoluție. Prin urmare, aceste versiuni de SQL Server raportează durata unor interogări ca 0 ms. Prin urmare, este dificil să monitorizați performanța și să reglați performanța SQL Server în versiunile anterioare de SQL Server. SQL Server 2005 îmbunătățește acuratețea utilizând Counter-ul CPU de rezoluție înaltă pentru a furniza capacități de temporizare microsecunde. Atunci când utilizați tehnologiile listate în secțiunea "Rezumat", valorile de temporizare raportate pot fi incorecte. Această problemă poate afecta următoarele obiecte și caracteristici:

  • Urmărirea evenimentelor:

    • Evenimentul atenție

    • Evenimente din nodul proceduri stocate

    • Evenimente în nodul TSQL

    • Evenimente din nodul obiecte

    • Evenimente din nodul tranzacții

  • Vizualizări de gestionare dinamică:

    • 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

  • Instrucțiunea SET TIME STATISTICs

  • Tabelul sistem sysprocesses

După ce instalați SQL Server 2005 Service Pack 2 (SP2), SQL Server înregistrează un mesaj de eroare în Jurnalul de erori atunci când SQL Server detectează că cronometrele de înaltă rezoluție sunt nesincronizate între procesoare. Mesajul de eroare indică faptul că temporizarea performanței poate să nu fie corectă, iar utilizatorii trebuie să utilizeze date de performanță cu precauție. Textul mesajului de eroare seamănă cu unul dintre următoarele mesaje de eroare:

Mesaj de eroare 1

Counter-ul de marcă de timp al CPU-ului pentru programator ID 2 nu este sincronizat cu alte procesoare.

Mesaj de eroare 2

Frecvența de timp a CPU-ului s-a schimbat de la 191469 la 1794177 de căpușe pe milisecunde. Noua frecvență va fi utilizată

SQL Server utilizează instrucțiunea real time Stamp Counter (RDTSC) pentru a obține numărul de căpușe CPU 64-bit. Aveți posibilitatea să împărțiți această valoare la frecvența PROCESORului pentru a efectua conversia valorii la valori milisecunde. Variațiile de temporizare pot apărea atunci când se modifică frecvența CPU sau se produce Drift.

Intensificarea CPU

Intensificarea CPU este definită ca o modificare deliberată a frecvenței CPU. Intensificarea PROCESORului poate fi cunoscută și ca tehnologie Intel SpeedStep sau AMD PowerNow! tehnologie. Atunci când apare intensificarea CPU, viteza PROCESORului poate mări sau micșora incremente mici de 50 MHz pentru a conserva energia și a reduce producția de căldură. Procesoare care se află în același nod non-uniformă de acces la memorie (NUMA) nu ajustează în mod independent frecvențele. Următorul tabel ilustrează modul în care progresele efectuate de CPU pot afecta calculele de temporizare.

Acțiune

RDTSC căpușele

Căpușe per milisecundă (frecvență)

Timp de ceas de perete

Grup de pornire

1

200

0

Pas de frecvență în jos

200

100

1ms

Sfârșitul lotului

500

3ms

TOTALURI

500

4ms

SQL Server capturează căpușele RDTSC atât la început, cât și la sfârșitul RDTSC. Apoi, SQL Server împarte căpușele după valoarea de frecvență. În acest exemplu, se produc următoarele calcule de temporizare atunci când utilizați o valoare de frecvență de 200 sau 100:

  • Frecvență 200: 500/200 = 2,5 ms

  • Frecvență 100: 500/100 = 5 ms

Niciuna dintre calculele de temporizare nu se potrivește cu ora efectivă a ceasului de perete de 4 MS. Dacă acest calcul este utilizat într-un eveniment RPC: finalizat Trace, coloanele date durată și oră de sfârșit sunt raportate incorect. Evenimentul RPC: finalizat captează ora de început a ceasului de perete și numărul de căpușe CPU. Pentru a obține un timp de rezoluție mai mare decât livrările Windows în SQL Server 2005, coloanele de date durată și oră de sfârșit într-o urmărire SQL Server se calculează utilizând numărul de căpușe CPU scurs. Coloana oră de sfârșit este calculată adăugând coloana durată la coloana oră de început . În acest exemplu, coloana ora de sfârșit se calculează prin adăugarea incorectă a 2,5 ms sau 5 ms la ora de început.

Drift

Drift este o diferență în valorile ceasului CPU. Sistemele care au mai multe procesoare pot genera valori diferite ale ceasurilor CPU pentru același punct în timp. Deși nu este obișnuit, procesoarele pot avea o separare a ceasului în timp. Următorul exemplu arată modul în care modificările de Drift pot afecta rezultatul coloanei date durată într-o urmărire SQL Server. Exemplul presupune că frecvența PROCESORului rămâne constantă la 200 căpușe pe milisecunde. Următorul tabel ilustrează evenimentele din acest scenariu.

Acțiune

CPU programat pentru Windows

CPU 1 RDTSC

CPU 2 RDTSC

Timp de ceas de perete

Grup de pornire

1

100

1100

0

Sfârșitul lotului

2

900

1900

4 MS

TOTALURI

4 MS

SQL Server captează căpușele RDTSC atât la punctele de început, cât și la punctele finale. Apoi, SQL Server împarte căpușele RDTSC la valoarea de frecvență. În acest exemplu, Windows a programat firul de lucrător SQL Server pe două procesoare diferite. Firul de lucrător SQL Server care a rulat mai întâi primul procesor (CPU 1). Cu toate acestea, execuția lotului a fost întreruptă la un moment dat, iar SQL Server a trimis execuția lotului în coada așteptată. Atunci când SQL Server a trimis firul SQL Server Worker care Services acest lot la coada runnable din nou, Windows a expediat firul pentru a-l executa pe al doilea procesor (CPU 2). Firul de lucrător SQL Server s-a finalizat în execuție pe CPU 2. Din cauza driftului CPU, valoarea Tick de sfârșit care a fost capturată din CPU 2 a fost 1900 în loc de 900. Puteți evita acest comportament dacă activați afinitatea pentru procesoare SQL Server. Următoarele calcule de temporizare sunt utilizate în acest exemplu:

  • Valoarea incorectă, dar raportată: (1900 – 100 = 1800)/200 = 9 MS

  • Valoare corectă: (900 – 100 = 800)/200 = 4 MS

Valoarea coloanei durată pentru Evenimentul RPC: finalizat va fi raportată ca 9 MS în loc de 4 MS. Acest rezultat depășește valoarea corectă de 4 MS. Mesajele de avertizare pentru Drift sunt adăugate la SQL Server 2005 pentru a indica faptul că rezultatele performanței care sunt menționate anterior pot să nu fie fiabile. În unele situații nedescoperite, SQL Server 2005 SP2 poate raporta mesaje de avertizare despre următoarele:

  • Mesaje de avertizare pentru Drift false

  • Deriva poate deveni zeci de milisecunde fără a determina un efect de sistem observabil

Trebuie să fiți atent atunci când evaluați ieșirile legate de performanță și când Comparați ieșirile legate de performanță la calendarul ceasurilor de perete. Dacă nu există semne ale altor probleme de performanță, puteți ignora de obicei mesajele de avertizare în Drift. De exemplu, puteți ignora de obicei mesajele de avertizare în Drift în următoarele situații:

  • Procesele sunt în execuție conform așteptărilor.

  • Interogările SQL Server nu se execută în modele de durată necunoscute.

  • Nu vedeți semne ale altor blocaje.

Cu toate acestea, înainte să ignorați mesajele de avertizare pentru Drift, vă recomandăm să contactați producătorul pentru a vă asigura că nu există probleme RDTSC cunoscute. Puteți utiliza Trace Flag 8033 (– T8033) pentru a reveni la comportamentul de raportare din versiunea inițială de SQL Server 2005 și în SQL Server 2005 SP1. Versiunea originală a versiunii SQL Server 2005 și SQL Server 2005 SP1 nu raportează mesaje de avertizare în Drift. Dacă rulați versiunea originală de SQL Server 2005 sau SQL Server 2005 SP1 fără probleme, puteți ignora de obicei mesajele.

De ce instrucțiunea DELAY aștept funcționează corect? Ce se întâmplă cu procesele de sistem periodice?

Mecanismele de expirare nu sunt afectate de designul cu rezoluție înaltă. SQL Server nu utilizează cronometrul de rezoluție înaltă pentru activitățile bazate pe temporizator. Unele activități de expirare se bazează pe cronometrul de rezoluție redusă care utilizează funcția GetTickCount . Aceste activități de expirare includ expirarea blocărilor, instrucțiunea DELAY aștept și detectarea blocajelor.

Pentru informaţii suplimentare, faceţi clic pe următoarele numere de articole pentru a le vizualiza în Baza de cunoştinţe Microsoft:

938448 Un server bazat pe Windows Server 2003 poate avea un timp de contorizare a marcajelor temporale dacă serverul utilizează procesoare AMD Opteron Dual-Core sau procesoare AMD Opteron multiprocesor

895980 Programele care utilizează funcția QueryPerformanceCounter pot funcționa slab în Windows Server 2003 și în Windows XPProdusele de la terți pe care le discută acest articol sunt fabricate de firme independente de Microsoft. Microsoft nu face nicio garanție, implicită sau altfel, despre performanța sau fiabilitatea acestor produse.

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

V-a fost de ajutor această informație?

Vă mulțumim pentru feedback!

Vă mulțumim pentru feedback! Se pare că ar fi util să luați legătura cu unul dintre agenții noștri de asistență Office.

×