Trenutno ste van mreže; čekamo da se ponovo povežete na internet

KAKO DA: Rešavanje problema sa performansama aplikacije sa SQL serverom

REZIME
Ovaj postepeni članak opisuje kako se rešavaju problemi sa performansama SQL servera. Rešavanje problema sa performansama uključuje upotrebu grupe koraka za izolovanje i utvrđivanje uzroka sporog rada aplikacije. Mogući uzroci obuhvataju:
  • Blokiranje.
  • Sukob sistemskih resursa.
  • Probleme u dizajnu aplikacije.
  • Poseban skup upita ili uskladištenih procedura sa dugim vremenima izvršavanja.
Ovaj članak opisuje kako se utvrđuje izvor problema sa performansama. On takođe daje reference na druge članke u Microsoft bazi znanja koji pokrivaju detalje posebnih problema sa performansama radi dodatnog rešavanja problema.nazad na vrh

SQL Profiler


SQL Profiler je moćna alatka za rešavanje problema sa performansama aplikacije za SQL Server 7.0 ili noviji. SQL Profiler vam omogućava da lako hvatate sve događaje koji se dešavaju na serveru pod tipičnim opterećenjem i obezbeđuje informacije o njima. Upotreba alatke SQL Profiler sa Microsoft Windows NT nadgledanjem performansi i nekim jednostavnim upitima za identifikovanje toga da li dolazi do blokiranja pružiće vam informacije koje morate imati da biste rešili većinu problema sa performansama.

nazad na vrh

Šta treba nadgledati

1. Podesite alatku SQL Profiler da hvata praćenje. Da biste to uradili, sledite ove korake:
  1. Otvorite alatku SQL Profiler.
  2. U meniju Alatke izaberite stavku Opcije.
  3. Uverite se da su izabrane opcije Sve klase događaja i Sve kolone podataka.
  4. Kliknite na dugme U redu.
  5. Kreirajte novo praćenje.
  6. U meniju Datoteka postavite pokazivač na stavku Novo, a zatim izaberite stavku Praćenje.
  7. Na kartici Opšte postavke navedite ime praćenja i datoteku u kojoj ćete hvatati podatke.
  8. Na kartici Događaji dodajte sledeće tipove događaja u praćenje:

    NaslovDogađaj koji treba dodatiOpis
    KursoriPriprema kursoraOvaj događaj ukazuje na to da je kursor u SQL instrukciji pripremljen pomoću ODBC, OLEDB ili DB biblioteke.
    Greška i upozorenjeNedostaju statistike koloneOvaj događaj ukazuje na to da statistike kolone koje su mogle biti korisne za optimizator nisu dostupne. Kolona Tekst pokazuje listu kolona sa statistikama koje nedostaju. Ovaj događaj, zajedno sa događajem Razno: automatsko ažuriranje statistika, ukazuje na to da je pokrenuta opcija Automatsko kreiranje statistika.
    RaznoPažnjaOvaj događaj ukazuje na to da je klijent poslao signal za pažnju.
    RaznoAutomatsko ažuriranje statistikaOvaj događaj ukazuje na to da je pokrenuta opcija Automatsko ažuriranje statistika.
    RaznoIzvršni pripremljeni SQLOvaj događaj ukazuje na to da je ODBC, OLE DB ili DB biblioteka izvršila prethodno pripremljenu Transact-SQL instrukciju ili instrukcije.
    RaznoPlan izvršenjaOvaj događaj prikazuje stablo plana Transact-SQL instrukcije koja je izvršena.
    RaznoSQL pripremaOvaj događaj ukazuje na to da je aplikacija ODBC, OLE DB ili DB biblioteke pripremila Transact-SQL instrukciju ili instrukcije za upotrebu.
    RaznoSQL opoziv pripremeOvaj događaj ukazuje na to da je aplikacija ODBC, OLE DB ili DB biblioteke opozvala pripremu Transact-SQL instrukcije ili instrukcija za upotrebu.
    SesijePovezivanjeOvaj događaj ukazuje na to da je napravljena nova veza.
    SesijePrekid vezeOvaj događaj ukazuje na to da je veza sa klijentom prekinuta.
    SesijePostojeća vezaOvaj događaj ukazuje na to da je postojala veza kada je praćenje alatke SQL Profiler započeto.
    Uskladištene procedureSP: DovršenoOvaj događaj ukazuje na to kada je dovršeno izvršavanje uskladištene procedure.
    Uskladištene procedureSP: Ponovno prevođenjeOvaj događaj ukazuje na to da je uskladištena procedura ponovo prevedena tokom izvršavanja.
    Uskladištene procedureSP: PokretanjeOvaj događaj ukazuje na to kada je započeto izvršavanje uskladištene procedure.
    Uskladištene procedureSP: Instrukcija je dovršenaOvaj događaj ukazuje na to kada je dovršeno izvršavanje instrukcije u uskladištenoj proceduri.
    TSQL:SQL: grupa je dovršenaOvaj događaj ukazuje na to da je Transact-SQL grupa dovršena. Kolona Tekst pokazuje instrukciju koja je izvršena.
    TSQL:SQL: instrukcija je dovršenaOvaj događaj ukazuje na to da je Transact-SQL instrukcija dovršena. Kolona Tekst pokazuje instrukciju koja je izvršena.
    TSQL:RPC: dovršenoOvaj događaj ukazuje na to da je poziv udaljene procedure (RPC) dovršen.
  9. Ako u aplikaciji dolazi do grešaka isteka, ona prestaje da se odaziva (zastaje) ili dolazi do drugih događaja koji dovode do toga da se problematične instrukcije nikada ne dovršavaju, uključite i sledeće događaje:

    TSQL:SQL: grupa počinjeOvaj događaj ukazuje na početak Transact-SQL grupe. Kolona Tekst pokazuje instrukciju koja se izvršava.
    TSQL:SQL: instrukcija počinjeOvaj događaj ukazuje na početak Transact-SQL instrukcije. Kolona Tekst pokazuje instrukciju koja se izvršava.
    TSQL:RPC: počinjeOvaj događaj ukazuje na početak poziva udaljene procedure (RPC).
    Uskladištene procedureSP: Instrukcija počinjeOvaj događaj ukazuje na to kada započinje izvršavanje instrukcije u uskladištenoj proceduri.


    Ovo će vam pomoći da se uverite da možete da vidite instrukciju koja se izvršavala kada je došlo do isteka
  10. Na kartici Kolone podataka uverite se da su uključene sledeće kolone:

    Za SQL Server 2000

    Vreme početka

    Vreme završetka

    Sid prijavljivanja

    SPID

    Klasa događaja

    Tekstualni podaci

    Celobrojni podaci

    Binarni podaci

    Trajanje

    CPU

    Čitanja

    Pisanja

    Ime aplikacije

    Ime NT korisnika

    Ime DB korisnika


    Za SQL Server 7.0

    Vreme početka

    Vreme završetka

    ID veze

    SPID

    Klasa događaja

    Tekst

    Celobrojni podaci

    Binarni podaci

    Trajanje

    CPU

    Čitanja

    Pisanja

    Ime aplikacije

    Ime NT korisnika

    Ime SQL korisnika

Za informacije o upotrebi alatke SQL Profiler pogledajte knjige o sistemima SQL Server 7.0 i SQL Server 2000 na mreži.


2. Koristite nadgledanje performansi za hvatanje Windows NT i SQL Server brojača. Da biste to uradili, sledite ove korake:
  1. Pokrenite Windows NT nadgledanje performansi.
  2. U meniju Prikaz izaberite stavku Evidencija.
  3. U meniju Opcije izaberite stavku Evidencija.
  4. Navedite ime datoteke i lokaciju za evidentiranje brojača performansi. Interval ažuriranja možete prilagoditi kako vam odgovara.
  5. U meniju Uređivanje izaberite stavku Dodaj u evidenciju.
  6. Dodajte sve objekte. Windows NT i SQL Server objekte.
  7. Da biste pokrenuli evidenciju, u meniju Opcije izaberite stavku Evidencija, a zatim kliknite na dugme Pokreni evidenciju.

Za dodatne informacije kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
150934 Kreiranje evidencije nadgledanja performansi za rešavanje problema sa NT sistemom (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)

3. Provera blokiranja

Da biste videli da li dolazi do blokiranja, pokrenite uskladištenu instrukciju sistema sp_who:
exec sp_who
Ovaj izlaz će sadržati kolonu blk. Ispitajte izlaz za sve stavke koje nemaju vrednost nula koje ukazuju na to da je došlo do blokade. Povremeno pokrećite ovu proceduru kroz vremenski okvir kada dolazi do usporenja performansi.

Napomena Pokretanje uskladištene procedure sistema sp_who jeste provera da bi se videlo da li postoji blokada. To obično nije dovoljno informacija za potpuno rešavanje problema blokiranja. Za dodatne informacije kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
251004 INF: Nadgledanje blokiranja u sistemu SQL Server 7.0 (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)

nazad na vrh

Pokretanje aplikacije pod tipičnim opterećenjem

Najbolje je hvatati informacije alatke SQL Profiler, nadgledati performanse i blokirati izlaz u istom vremenskom okviru. Ovaj vremenski okvir mora obuhvatati vreme kada su se performanse aplikacije pogoršale. Kombinacija ovih informacija će vam pomoći da dobijete jasniju sliku toga gde dolazi do usporenja performansi.

nazad na vrh

Tumačenje rezultata

  1. Provera blokiranja

    Ako vrednost kolone blk u sp_who izlazu nije nula, to pokazuje da na sistemu dolazi do blokiranja. Ako se procesi međusobno blokiraju, procesima koji su blokirani može biti potrebno više vremena za izvršavanje. Za dodatne informacije kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
    224453 INF: Razumevanje i rešavanje problema sa blokiranjem u sistemu SQL Server 7.0 ili 2000 (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)
  2. Ispitajte izlaz alatke SQL Profiler.

    Efikasno prikazivanje podataka alatke SQL Profiler veoma je vredno pri rešavanju problema sa performansama. Najvažnija stvar koju je potrebno razumeti jeste da ne morate da gledate sve informacije koje ste dobili. Izaberite ono što je važno. SQL Profiler obezbeđuje mogućnosti koje vam pomažu da efikasno prikažete uhvaćene podatke. Na karticama Svojstva (u meniju Datoteka izaberite stavku Svojstva) SQL Profiler vam omogućava da ograničite prikazane podatke uklanjajući kolone podataka ili događaje, grupišući (sortirajući) po kolonama podataka i primenjujući filtere. Možete pretražiti kompletno traganje ili samo određenu kolonu tražeći određene vrednosti (u meniju Uređivanje izaberite stavku Pronađi). Takođe možete sačuvate podatke alatke SQL Profiler u SQL Server tabeli (u meniju Datoteka postavite pokazivač na stavku Sačuvaj kao, izaberite stavku Tabela praćenja), a zatim pokrenite SQL upite za nju.

    Budite pažljivi da izvršite filtriranje samo u prethodno sačuvanoj datoteci praćenja. Ako izvršite ove korake u aktivnom praćenju, postoji rizik da ćete izgubiti podatke koji su uhvaćeni od početka praćenja. Aktivno praćenje prvo sačuvajte u datoteci ili tabeli (u meniju Datoteka izaberite stavku Sačuvaj kao), a zatim ga ponovo otvorite (u meniju Datoteka izaberite stavku Otvori) pre nego što nastavite. Kada radite sa sačuvanom datotekom praćenja, filtriranje ne uklanja trajno podatke koji su filtrirani, samo ih ne prikazuje. Po potrebi možete dodati i ukloniti događaje i kolone podataka da biste lakše fokusirali pretrage.

    Prvi korak u ispitivanju datoteka praćenja alatke SQL Profiler za slučajeve performansi jeste utvrđivanje toga gde se na serveru dešavaju različiti tipovi događaja.

    Grupisanje praćenja po klasi događaja:

    a. U meniju Datoteka izaberite stavku Svojstva.

    b. Na kartici Kolone podataka koristite dugme „NAGORE“ da biste premestili klasu događaja u okvir zaglavlja Grupe i dugme „NADOLE“ da biste uklonili sve druge kolone u okviru zaglavlja Grupe.

    c. Kliknite na dugme U redu.

    Grupisanje po koloni klase događaja pokazuje do kojih događaja dolazi na sistemu SQL Server i koliko često. Potražite sledeće događaje u ovoj koloni:

    SP: PONOVNO PREVOĐENJE

    Ovaj događaj ukazuje na to da je uskladištena procedura ponovo prevedena tokom izvršavanja. Nekoliko događaja ponovnog prevođenja ukazuju na to da SQL Server troši resurse na prevođenje upita umesto na izvršavanje upita.

    Za dodatne informacije o rešavanje problema sa ponovnim prevođenjem uskladištene procedure kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
    243586 INF: Rešavanje problema sa ponovnim prevođenjem uskladištene procedure (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)


    Pažnja

    Signal za pažnju ukazuje na to da je klijent otkazao upit. Do ovoga najčešće dolazi iz jednog od dva razloga:

    Korisnik je izričito otkazao upit ili završio aplikaciju.

    -ili-

    Vreme isticanja upita je prekoračeno.

    Ako vidite signale za pažnju, oni mogu ukazivati na to da se neki upiti sporo izvršavaju.

    Za dodatne informacije kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
    243589 KAKO DA: Rešavanje problema sa upitima koji se sporo izvršavaju u sistemu SQL Server 7.0 ili novijem (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)
    Da biste lakše identifikovali upit koji je dobio signal za pažnju, korigujte praćenje tako da ne bude grupisano po koloni podataka i filtrirajte ID sistemskog procesa (SPID) koji ga je dobio (na kartici Filteri postavite vrednost SPID = x). SQL: pokretanje instrukcije, SQL: pokretanje grupe ili SP: pokretanje instrukcije događaj odmah pre signala za pažnju predstavlja upit kod kojeg je došlo do isteka ili otkazivanja. U koloni Klasa događaja možete potražiti događaj pažnje da biste ga lako pronašli (u meniju Uređivanje izaberite stavku Pronađi).

    SQL PRIPREMA i IZVRŠNI PRIPREMLJENI SQL

    Događaj SQL priprema ukazuje na to da je aplikacija ODBC, OLE DB ili DB biblioteke pripremila Transact-SQL instrukciju ili instrukcije za upotrebu. Događaj Izvršni pripremljeni SQL ukazuje na to da je aplikacija upotrebila postojeću pripremljenu instrukciju za pokretanje komande.

    Uporedite koliko je puta došlo do ova dva događaja. U savršenom slučaju, aplikacija mora pripremiti SQL instrukciju jednom i pokrenuti je nekoliko puta. Zahvaljujući tome, optimizator ne mora da prevodi novi plan svaki put kada se instrukcija izvršava. Zbog toga bi broj Izvršni pripremljeni SQL događaja trebalo da bude mnogo veći od broja SQL priprema događaja. Ako je broj SQL priprema događaja približno jednak broju Izvršni pripremljeni SQL događaja, to može ukazivati na to da aplikacija ne koristi dobro model pripreme/izvršenja. Najbolje je ne pripremati instrukciju koja će biti izvršena samo jednom. Za više informacija o pripremi SQL instrukcija pogledajte temu „Priprema SQL instrukcija“ u knjigama za SQL Server 7.0 na mreži.

    Ako broj Izvršni pripremljeni SQL događaja nije tri do pet puta veći od broja SQL priprema događaja, aplikacija možda ne koristi dobro model pripreme/izvršenja. Za dodatne informacije kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
    243588 KAKO DA: Rešavanje problema sa performansama ad-hoc upita (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)

    U sistemu SQL Server 2000 suvišna zaobilaženja po pripremi/izvršenju biće uklonjena tako da odnos 3-5 nije obavezan. Međutim, i dalje je dobro pravilo da pokušate da ponovo koristite unapred pripremljeni plan više od jednog puta.

    Nedostaju statistike kolone

    Ovaj događaj ukazuje na to da statističke informacije koje je optimizator mogao da iskoristi za generisanje boljeg plana upita nisu dostupne. Ovo ukazuje na to da upit nema korisne indekse na najmanje jednoj uključenoj tabeli. Pored toga što nema koristan indeks, SQL Server nema čak ni statističke podatke o kolonama koje su uključene za donošenje obaveštene odluke za plan upita. Zbog svega toga generisani plan upita možda neće biti najbolji mogući. Ako vidite ove događaje, pogledajte upit i generisani plan izvršenja, a zatim pogledajte sledeći članak u Microsoft bazi znanja za korake koje treba preduzeti da bi se poboljšale performanse ovog upita:
    243589 KAKO DA: Rešavanje problema sa upitima koji se sporo izvršavaju u sistemu SQL Server 7.0 ili novijem (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)

    Kada prikažete Nedostaju statistike kolone događaje, prvo se usredsredite na one do kojih dolazi u vezi sa upitima koji se dugo izvršavaju. Neke događaje SQL Server može automatski generisati i rešiti pomoću automatske statistike i možda neće biti potrebna intervencija korisnika. Zbog toga je najbolja strategija da se prvo usredsredite na upite koji dugo traju kao što je prikazano kasnije u ovom članku i da obratite pažnju na to da li postoje povezani Nedostaju statistike kolone događaji.

    Ako ne vidite instance ovih klasa događaja, sledeći korak je da utvrdite gde se to vreme troši.

    Grupisanje izlaza praćenja po trajanju:

    a. U meniju Datoteka izaberite stavku Svojstva.

    Na kartici Kolone podataka koristite dugme „NAGORE“ da biste premestili trajanje u okvir zaglavlja Grupe i dugme „NADOLE“ da biste uklonili sve druge kolone u okviru zaglavlja Grupe.

    c. Na kartici Događaji uklonite sve grupe osim grupa TSQL i Uskladištene procedure.

    d. Kliknite na dugme U redu.

    Grupišući po trajanju, možete lako videti koje se SQL instrukcije, grupe ili procedure najsporije izvršavaju. Veoma je važno da ne gledate samo vreme kada je došlo do problema već i da uočite osnovu vremena kada su performanse dobre radi poređenja. Možete filtrirati po vremenu početka da biste podelili praćenje na delove kada su performanse dobre i poseban deo kada su performanse loše. Potražite upite sa najdužim trajanjem u periodu kada su performanse dobre. Oni su najverovatnije uzrok problema. Ako su ukupne performanse sistema umanjene, čak i dobri upiti mogu pokazati duga trajanja jer čekaju na sistemske resurse.

    Ako vidite mali broj upita sa dugim trajanjem, pogledajte sledeći članak u Microsoft bazi znanja:
    243589 KAKO DA: Rešavanje problema sa upitima koji se sporo izvršavaju u sistemu SQL Server 7.0 ili novijem (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)
    Ako vidite da je trajanje pojedinačnih upita kratko, ali ih ima nekoliko i SQL kompilacije/sec brojač u izlazu nadgledanja performansi (opisano kasnije) je visok, pogledajte sledeći članak u Microsoft bazi znanja:
    243588 KAKO DA: Rešavanje problema sa performansama ad-hoc upita (Ova veza može da vodi do sadržaja koji je delimično ili u potpunosti nepreveden.)
    Ispitivanje preostalih kolona podataka:

    Dodatni uvid u prirodu problema sa performansama može se dobiti prikazivanjem drugih kolona podataka u podacima praćenja. Evo nekih stavki koje treba razmotriti:

    Ako je upotreba procesora visoka, grupišite po procesoru da biste videli koji upiti najviše troše procesorsko vreme. U koloni Tekst potražite stavke „hash“ ili „objedinjavanje“ da biste otkrili koji plan izvršenja upita koristi ove tipove pridruživanja. Oni više troše procesorske resurse i memoriju od ugnežđene petlje pridruživanja koja uopšteno troši dosta IO resursa.

    Ako je IO diska usko grlo, grupišite po pisanjima i čitanjima. Prikažite polja Ime aplikacije, Ime NT korisnika i Ime SQL korisnika da biste lakše izolovali uzrok upita koji se dugo izvršava.

    Kolona događaja izuzetka sa celobrojnim podacima ukazaće na greške koje su vraćene klijentu. Tekst poruke o grešci možete pronaći ako potražite broj u knjigama za SQL Server 7.0 na mreži.

    Polje ID veze je korisno da biste se uverili da gledate iste sesije za određeni klijent. SPID ovo ne može da garantuje jer je veza korisnika možda prekinuta i povezan je novi korisnik koji je dobio isti SPID.

    Korisnost ovih polja može se razlikovati u zavisnosti od slučaja, ali ih treba ispitati ukoliko očigledna polja navedena ranije u ovom članku ne pruže odgovor.
  3. Ispitajte izlaz nadgledanja performansi.

    Nadgledanje performansi će vam pokazati opšta uska grla u sistemu. Možda SQL Server i aplikacija funkcionišu kao što bi trebalo, ali računar nema dovoljno napajanje, nedostaje mu memorija ili drugi resursi. Neki brojači mogu ukazati na probleme sa načinom na koji aplikacija i SQL Server funkcionišu. Kao minimum, proverite sledeće brojače:

  • Objekat: Proces

    Brojač: Procesor

    Instanca: SQL Server

  • Objekat: Procesor

    Brojač: %Procesorsko vreme

    Instanca: Proverite svaku instancu procesora

  • Objekat: Fizički disk

    Brojač: Pros. Dužina reda diska

    Instanca: Proverite svaku instancu fizičkog diska

  • Objekat: SQL Server:SQL statistika

    Brojač: SQL kompilacije/sec
Pogledajte kada su se u vremenskom okviru performanske pogoršale: šta se prvo povećalo? Da li je računar zasnovan na procesoru ili na DISK IO-u? Ove informacije, zajedno sa izlazom alatke Profiler navedenim ranije u ovom članku, pomoći će vam da suzite oblasti problema. Problemi sa procesorom mogu ukazati na veliki broj ponovnih prevođenja uskladištenih procedura, prevođenja ad-hoc upita ili intenzivnu upotrebu hash i objedinjenih pridruživanja. Moraju se slediti članci za koje su date reference ranije u ovom članku da bi se odredio ispravan tok radnji. Velike dužine reda diskova mogu ukazivati na potrebu za više sistemske memorije ili na poboljšani podsistem diska.

nazad na vrh
BOL slow down worse perf mon perfmon tshoot trouble shoot troubleshooting tshooting machine
Svojstva

ID članka: 224587 - Poslednji pregled: 12/29/2007 11:19:27 - Verzija: 4.1

  • Microsoft SQL Server 7.0 Standard Edition
  • kbproductlink kbhowtomaster kbhowto kbinfo KB224587
Povratne informacije