Resurse: Depanarea problemelor de performanță a aplicațiilor cu SQL Server

Traduceri articole Traduceri articole
ID articol: 224587 - View products that this article applies to.
Măriți totul | Reduceți totul

În această pagină

REZUMAT

Acest articol descrie etapă cu etapă cum se depanează problemele de performanță ale SQL Server. Depanarea problemelor de performanță implică utilizarea unei serii de pași pentru a izola și determina cauza funcționării lente a unei aplicații. Printre cauzele posibile se numără:
  • Blocarea.
  • Probleme privind împărțirea resurselor de sistem.
  • Probleme de proiectare a aplicației.
  • Un anumit set de interogări sau proceduri stocate cu timpi lungi de execuție.
Acest articol descrie cum se determină sursa unei probleme de performanță. De asemenea, face referire la alte articole din Baza de cunoștințe Microsoft care tratează în detaliu anumite probleme specifice de performanță, pentru depanare suplimentară.

SQL Profiler


SQL Profiler este un instrument puternic pentru depanarea problemelor de performanță a aplicațiilor SQL Server 7.0 sau versiuni mai recente. SQL Profiler vă permite să capturați cu ușurință toate evenimentele care se produc pe server în situații de încărcare tipică și furnizează informații despre acestea. Dacă utilizați SQL Profiler împreună cu Microsoft Windows NT Performance Monitor și cu unele interogări simple pentru a identifica dacă se produce blocarea, atunci veți dispune de informațiile necesare pentru a rezolva marea majoritate a problemelor de performanță.

Elemente de monitorizat

1. Configurați SQL Profiler pentru a captura o urmă. Pentru aceasta, parcurgeți următorii pași:
  1. Deschideți SQL Profiler.
  2. În meniul Tools, faceți clic pe Options.
  3. Asigurați-vă că sunt selectate opțiunile All Event Classes și All Data Columns.
  4. Face?i clic pe OK.
  5. Creați o urmă nouă.
  6. În meniul File, indicați spre New, apoi faceți clic pe Trace.
  7. Pe fila General, specificați un nume de urmă și un fișier în care să se captureze datele.
  8. Pe fila Events, adăugați următoarele tipuri de eveniment la urmă:

    Reduceți tabelulMăriți tabelul
    HeadingEvent to addDescription
    CursorsCursorPrepareAcest eveniment indică faptul că un cursor dintr-o instrucțiune SQL a fost pregătit utilizând ODBC, OLEDB sau DB-Library.
    Error and WarningMissing Column StatisticsAcest eveniment indică dacă statisticile de coloane, care pot să fie utile pentru Optimizer, nu au fost disponibile. Coloana Text afișează lista de coloane cu statistici lipsă. Acest eveniment, împreună cu un eveniment Misc: Auto-UpdateStats, indică faptul că s-a declanșat opțiunea Auto Create Statistics.
    Misc.AttentionAcest eveniment indică faptul că s-a trimis un semnal de atenție de către un client.
    Misc.Auto-UpdateStatsAcest eveniment indică faptul că s-a declanșat opțiunea Auto Update Statistics.
    Misc.Exec Prepared SQLAcest eveniment indică faptul că ODBC, OLE DB, sau DB-Library au executat o instrucțiune sau mai multe instrucțiuni Transact-SQL pregătite anterior.
    Misc.Execution PlanAcest eveniment afișează arborele de plan al instrucțiunii Transact-SQL care s-a executat.
    Misc.Prepare SQLAcest eveniment indică faptul că o aplicație ODBC, OLE DB sau DB-Library a pregătit o instrucțiune sau mai multe instrucțiuni Transact-SQL pentru utilizare.
    Misc.Unprepare SQLAcest eveniment indică faptul că o aplicație ODBC, OLE DB sau DB-Library a eliminat pregătirea unei instrucțiuni sau a mai multor instrucțiuni Transact-SQL pentru utilizare.
    SessionsConnectAcest eveniment indică faptul că s-a creat o conexiune nouă.
    SessionsDisconnectAcest eveniment indică faptul că un client s-a deconectat.
    SessionsExisting ConnectionAcest eveniment indică faptul că a existat o conexiune când s-a pornit o urmă SQL Profiler.
    Stored ProceduresSP: CompletedAcest eveniment arată când s-a terminat execuția unei proceduri stocate.
    Stored ProceduresSP: RecompileAcest eveniment arată că o procedură stocată s-a recompilat în timpul execuției.
    Stored ProceduresSP: StartingAcest eveniment arată când a început execuția unei proceduri stocate.
    Stored ProceduresSP: StmtCompletedAcest eveniment arată când s-a terminat execuția unei instrucțiuni dintr-o procedură stocată.
    TSQL:SQL:BatchCompletedAcest eveniment arată că s-a terminat un batch Transact-SQL. Coloana Text arată instrucțiunea care a fost executată.
    TSQL:SQL:StmtCompletedAcest eveniment arată că s-a terminat o instrucțiune Transact-SQL. Coloana Text afișează instrucțiunea executată.
    TSQL:RPC:CompletedAcest eveniment arată că s-a terminat o apelare de procedură la distanță (RPC).
  9. Dacă aplicația primește erori de expirare, nu mai răspunde (se blochează) sau manifestă alte evenimente care determină ca instrucțiunile problemă să nu se termine deloc, includeți și următoarele evenimente:

    Reduceți tabelulMăriți tabelul
    TSQL:SQL:BatchStartingAcest eveniment arată că s-a pornit un batch Transact-SQL. Coloana Text afișează instrucțiunea în execuție.
    TSQL:SQL:StmtStartingAcest eveniment arată că s-a pornit o instrucțiune Transact-SQL. Coloana Text afișează instrucțiunea în execuție.
    TSQL:RPC:StartingAcest eveniment arată începutul unei apelări de procedură la distanță (RPC).
    Stored ProceduresSP: StmtStartingAcest eveniment arată când începe execuția unei instrucțiuni dintr-o procedură stocată.


    Astfel, vă va ajuta să vă asigurați că aveți posibilitatea să vedeți instrucțiunea care se executa când s-a produs eroarea
  10. În fila Data Columns, asigurați-vă că sunt incluse următoarele coloane:

    Pentru SQL Server 2000

    Start Time

    End Time

    LoginSid

    SPID

    Event Class

    TextData

    IntegerData

    BinaryData

    Duration

    CPU

    Reads

    Writes

    Application Name

    NT User Name

    DBUserName


    Pentru SQL Server 7.0

    Start Time

    End Time

    Connection ID

    SPID

    Event Class

    Text

    Integer Data

    Binary Data

    Duration

    CPU

    Reads

    Writes

    Application Name

    NT User Name

    SQL User Name

Pentru informații despre utilizarea SQL Profiler, consultați SQL Server 7.0 și SQL Server 2000 Books Online.


2. Utilizarea Performance Monitor pentru a captura contoarele Windows NT și SQL Server. Pentru aceasta, parcurgeți următorii pași:
  1. Porniți Windows NT Performance Monitor.
  2. În meniul View, faceți clic pe Log.
  3. În meniul Options, faceți clic pe Log.
  4. Specificați un nume de fișier și o locație pentru înregistrarea în jurnal a contoarelor de performanță. Aveți posibilitatea să actualizați intervalul după cum este necesar:
  5. În meniul Edit, faceți clic pe Add To Log.
  6. Adăugați toate obiectele. Atât obiectele Windows NT, cât și obiectele SQL Server.
  7. Pentru porni jurnalul, în meniul Options, faceți clic pe Log, apoi pe butonul Start Log.

Pentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
150934 Cum se creează un jurnal de monitorizare a performanțelor pentru depanarea NT (articolul poate să fie în limba engleză)

3. Verificați dacă s-au produs blocări.

Pentru a vedea dacă se produc blocări, executați procedura de sistem stocată sp_who:
exec sp_who
Aceste rezultate vor conține o coloană blk. Examinați rezultatele pentru orice intrări diferite de zero care indică faptul că se produce o blocare. Executați această procedură periodic în intervalul de timp când se produce încetinirea performanțelor.

Notă Executarea procedurii de sistem stocate sp_who este o verificare pentru a vedea dacă există elemente blocate. De obicei, aceste informații nu sunt suficiente pentru a depana complet o problemă de blocare. Pentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
251004 INF: Cum se monitorizează blocarea SQL Server 7.0 (articolul poate să fie în limba engleză)

Executați aplicația în condiții de încărcare tipică

Ideal ar fi să capturați SQL Profiler, Performance Monitor și rezultatele blocării în aceeași perioadă de timp. Perioada de timp trebuie să cuprindă momentul când se schimbă performanțele aplicației, de la normal la lent. Combinația acestor informații vă va ajuta să aveți o imagine mai clară a locului în care se produce încetinirea performanțelor.


Interpretarea rezultatelor

  1. Verificați dacă s-au produs blocări.

    În cazul în care coloana blk din rezultatul sp_who nu este zero, acest lucru indică faptul că se produce o blocare în sistem. Dacă procesele se blochează între ele, procesele care sunt blocate pot genera timpi mai mari de execuție. Pentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
    224453 INF: Înțelegerea și rezolvarea problemelor de blocare din SQL Server 7.0 sau 2000 (articolul poate să fie în limba engleză)
  2. Examinați rezultatul SQL Profiler.

    Vizualizarea eficientă a datelor SQL Profiler este foarte importantă pentru rezolvarea problemelor de performanță. Cel mai important lucru de reținut este că nu trebuie să verificați tot ce ați capturat. Fiți selectiv. SQL Profiler furnizează capacități pentru a vă ajuta să vizualizați eficient datele capturate. În filele Properties (faceți clic pe Properties în meniul File), SQL Profiler vă permite să limitați datele afișate, prin eliminarea coloanelor de date sau de evenimente, prin gruparea (sortarea) după coloane de date și prin aplicarea de filtre. Aveți posibilitatea să căutați valori specifice în toată urma sau numai într-o anumită coloană (în meniul Edit, faceți clic pe Find). De asemenea, aveți posibilitatea să salvați datele SQL Profiler într-un tabel SQL Server (în meniul File, indicați spre Save As, faceți clic pe Trace Table), apoi executați interogări SQL pe acesta.

    Rețineți că filtrarea se poate efectua numai pentru un fișier de urmă salvat anterior. Dacă efectuați acești pași pentru o urmă activă, riscați să pierdeți datele care s-au capturat de la pornirea urmei. Salvați mai întâi urma activă într-un fișier sau într-un tabel (în meniul File, faceți clic pe Save As) apoi redeschideți-o (în meniul File, faceți clic pe Open) înainte să continuați. Când lucrați cu un fișier de urmă salvat, filtrarea nu elimină permanent datele care se filtrează; ele doar nu se afișează. Aveți posibilitatea să adăugați și să eliminați coloane de evenimente și date pentru a restrânge căutările dvs.

    Primul pas în examinarea fișierelor de urmă SQL Profiler pentru cazuri de performanță este să determinați unde pe server se produc diferitele tipuri de evenimente.

    Gruparea urmei în funcție de clasa evenimentului:

    a. În meniul File, faceți clic pe Properties.

    b. În fila Data Columns, utilizați butonul UP pentru a muta Event Class sub titlul Groups, apoi butonul DOWN pentru a elimina toate celelalte coloane de sub titlul Groups.

    c. Faceți clic pe OK.

    Gruparea după coloana cu clasa evenimentelor afișează ce tipuri de evenimente se produc pe SQL Server și cât de frecvent. Căutați în această coloană următoarele evenimente:

    SP:RECOMPILE

    Acest eveniment arată că o procedură stocată s-a recompilat în timpul execuției. Mai multe evenimente de recompilare arată că SQL Server consumă resursele la compilarea de interogări în loc de executarea de interogări.

    Pentru informații suplimentare privind recompilarea procedurilor stocate, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
    243586 INF: Depanarea problemelor privind recompilarea procedurilor stocate (articolul poate să fie în limba engleză)


    Attention

    Un semnal de atenție indică faptul că s-a revocat o interogare de către un client. Acest lucru se datorează de obicei uneia dintre următoarele două cauze:

    Utilizatorul a revocat explicit interogarea sau a închis aplicația.

    - sau -

    S-a depășit un timp de expirare de interogare.

    Dacă vedeți semnalele de atenție, acest lucru poate indica faptul că anumite interogări se execută lent.

    Pentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
    243589 Resurse: Depanarea interogărilor care se execută lent în SQL Server versiunea 7.0 sau o versiune mai recentă (articolul poate să fie în limba engleză)
    Pentru a vă ajuta să identificați interogarea care a primit semnalul de atenție, revizuiți urma astfel încât să nu fie grupată după coloane de date și filtrați după ID-ul de proces de sistem care a primit semnalul (în fila Filters, setați SPID = x). Evenimentele SQL:StmtStarting, SQL:BatchStarting sau SP:StmtStarting care se află imediat înaintea semnalului de atenție reprezintă interogarea care a expirat sau care a fost revocată. Aveți posibilitatea să căutați în coloana Event Class pentru a găsi cu ușurință evenimentul Attention (în meniul Edit, faceți clic pe Find).

    PREPARE SQL și EXEC PREPARED SQL

    Evenimentul Prepare SQL indică faptul că o aplicație ODBC, OLE DB sau DB-Library a pregătit pentru utilizare o instrucțiune sau mai multe instrucțiuni Transact-SQL. Evenimentul Exec Prepared SQL indică faptul că aplicația a utilizat o instrucțiune pregătită existentă pentru a executa o comandă.

    Comparați numărul de aparții al celor două evenimente. În mod ideal, o aplicație trebuie să pregătească o instrucțiune SQL o dată și să o execute de mai multe ori. Acest lucru economisește costul de compilare în Optimizer a unui nou plan la fiecare execuție a instrucțiunii. De aceea, numărul de evenimente Exec Prepared SQL ar trebui să fie mult mai mare decât numărul de evenimente Prepare SQL. Dacă numărul de evenimente Prepare SQL este aproximativ egal cu numărul de evenimente Exec Prepared SQL, acest lucru poate indica faptul că aplicația nu utilizează bine modelul pregătire/executare. Se recomandă să nu pregătiți o instrucțiune care va fi executată doar o singură dată. Pentru mai multe informații despre pregătirea instrucțiunilor SQL, consultați subiectul „Preparing SQL Statements” în SQL Server 7.0 Books Online.

    Dacă numărul de evenimente Exec Prepared SQL nu este de aproximativ trei până la cinci ori mai mare decât numărul de evenimente Prepare SQL, acest lucru poate indica faptul că aplicația nu utilizează bine modelul pregătire/executare. Pentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
    243588 Resurse: Depanarea problemelor privind funcționarea interogărilor ad-hoc (articolul poate să fie în limba engleză)

    În SQL Server 2000, se vor elimina operațiunile dus-întors excesive pentru pregătire/executare, astfel încât rata de 3-5 să nu fie așa de necesară. Însă, poate fi încă o regulă bună să încercați să reutilizați planul pregătit de mai multe ori.

    Missing Column Statistics

    Acest eveniment arată că nu au fost disponibile informațiile statistice pe care Optimizer ar fi avut posibilitatea să le utilizeze pentru a genera un plan mai bun de interogare. Acest lucru arată că interogarea nu are indexuri utile pentru cel puțin unul dintre tabelele implicate. Pe lângă lipsa unui index util, SQL Server nu are nici măcar date statistice despre coloanele implicate, pentru a lua o decizie în cunoștință de cauză pentru un plan de interogare. Drept urmare, planul de interogare generat poate să nu fie cel optim. Dacă vedeți aceste evenimente, căutați în interogare și în planul de executare generat și vedeți următorul articol în Baza de cunoștințe Microsoft pentru pași de a îmbunătăți performanțele acestei interogări:
    243589 Resurse: Depanarea interogărilor care se execută lent în SQL Server versiunea 7.0 sau o versiune mai recentă (articolul poate să fie în limba engleză)

    Când vizualizați evenimentele Missing Column Statistics, concentrați-vă mai întâi pe cele care se produc în asociere cu interogări de execuție lungă. Unele evenimente pot fi generate și rezolvate automat de SQL Server cu porniri automate și pot să nu necesite intervenția utilizatorului. De aceea, cea mai bună strategie este să vă concentrați mai întâi pe interogările cu durată lungă, după cum se arată mai târziu în acest articol, și să notați dacă există evenimente Missing Column Statistics asociate.

    Dacă nu vedeți instanțe ale acestor clase de evenimente, următorul pas este să determinați unde se consumă timp.

    Grupați rezultatul urmei în funcție de durată:

    a. În meniul File, faceți clic pe Properties.

    În fila Data Columns, utilizați butonul UP pentru a muta Duration sub titlul Groups, apoi butonul DOWN pentru a elimina toate celelalte coloane de sub titlul Groups.

    c. În fila Events, eliminați toate grupurile, cu excepția TSQL și Stored Procedures.

    d. Faceți clic pe OK.

    Grupând după durată, aveți posibilitatea să vedeți cu ușurință care instrucțiuni, fișiere batch sau proceduri SQL se execută cel mai lent. Este foarte important să vă uitați nu numai la ora când apare problema, ci să și vă faceți o impresie despre cum arată performanțele bune, pentru a avea un grad de comparație. Aveți posibilitatea să filtrați după timpul de începere pentru a împărți urma în secțiuni când performanța era bună și o secțiune separată pentru performanța lentă. Căutați interogările cu cea mai lungă durată atunci când performanțele sunt bune. Acestea sunt, cel mai probabil, sursa problemei. Dacă performanța generală a sistemului este lentă, chiar și interogările bune pot să afișeze durate lungi în timp ce așteaptă resurse de sistem.

    Dacă vedeți un număr mic de interogări cu durate mari, consultați următorul articol din Baza de cunoștințe Microsoft:
    243589 Resurse: Depanarea interogărilor care se execută lent în SQL Server versiunea 7.0 sau o versiune mai recentă (articolul poate să fie în limba engleză)
    Dacă vedeți că durata interogărilor individuale este mică, dar că există câteva interogări și contorul SQL Compilations/sec din rezultatele Performance Monitor (descris mai jos) este mare, consultați următorul articol din Baza de cunoștințe Microsoft:
    243588 Resurse: Depanarea problemelor privind funcționarea interogărilor ad-hoc (articolul poate să fie în limba engleză)
    Examinați restul de coloane de date:

    Aveți posibilitatea să obțineți informații suplimentare privind natura unei probleme de performanță dacă vizualizați și celelalte coloane de date din rezultatele urmei. Iată câteva lucruri de luat în considerare:

    Dacă gradul de utilizare CPU este ridicat, grupați după CPU pentru a vedea care interogări utilizează cel mai mult timp CPU. Căutați în coloana Text pentru „hash” sau „merge”, pentru a găsi ce plan de execuție de interogări utilizează aceste tipuri de asociere. Acestea consumă mai multe resurse de memorie și CPU decât o asociere de buclă imbricată, care consumă de obicei resurse IO.

    Dacă intrările și ieșirile de disc constituie zona de blocaj, grupați după citiri și scrieri. Vizualizați câmpurile Application Name, NT User Name și SQL User Name pentru a izola sursa unei interogări cu timp mare de execuție.

    Coloana de date întregi a evenimentului excepție va indica orice erori care au fost returnate clientului. Aveți posibilitatea să găsiți textul mesajului de eroare căutând după număr în SQL Server 7.0 Books Online.

    Câmpul Connection ID este util pentru a vă asigura că priviți aceleași sesiuni pentru un anumit client. Un SPID nu poate garanta aceasta, deoarece este posibil ca un utilizator să se fi deconectat și să se fi conectat alt utilizator, care a primit același SPID.

    Avantajele acestor câmpuri pot varia în funcție de scenariu, dar ele trebuie să fie examinate în cazul în care câmpurile evidente de mai sus din acest articol nu oferă un răspuns.
  3. Examinați rezultatele din Performance Monitor.

    Performance Monitor vă va afișa zonele de blocaj din sistem. Este posibil ca SQL Server și aplicația să funcționeze după cum este așteptat, dar computerul nu are suficientă putere, memorie și alte resurse. Sau, unele contoare pot indica probleme în legătură cu modul în care funcționează aplicația și SQL Server. Verificați cel puțin următoarele contoare:

  • Object: Process

    Counter: Processor

    Instance: SQL Server

  • Object: Processor

    Counter: %Processor Time

    Instance: Check each processor instance

  • Object: Physical Disk

    Counter: Avg. Disk Queue Length

    Instance: Check each physical disk instance

  • Object: SQL Server:SQL Statistics

    Counter: SQL Compilations/sec
Căutați tendințe în intervalul de timp în care performanțele au devenit lente: ce a crescut mai întâi? Computerul este limitat în privința puterii de procesare sau a scrierilor/citirilor pe disc? Aceste informații, împreună cu rezultatele din Profiler afișate mai sus în acest articol, vă vor ajuta să restrângeți zonele cu probleme. Problemele de grad de folosire ridicată a procesorului pot indica un număr mare de recompilări de proceduri stocate, compilări de interogări ad-hoc sau utilizarea intensivă a asocierilor „hash” și „merge”. Articolele la care se face referire mai sus trebuie să fie consultate pentru a determina metoda corectă de acționare. Lungimile mari ale cozii de disc pot indica nevoia de mai multă memorie de sistem sau nevoia unui subsistem de disc îmbunătățit.

Proprietă?i

ID articol: 224587 - Ultima examinare: 29 decembrie 2007 - Revizie: 4.1
SE APLICĂ LA
  • Microsoft SQL Server 7.0 Standard Edition
Cuvinte cheie: 
kbhowto kbhowtomaster kbinfo kbproductlink KB224587

Trimite?i feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com