piektdiena, 2010. gada 17. septembris

Rīks: SQL Server Profiler

Ļoti noderīgs rīks SQL Server monitorēšanai. Ar SQL Server profiler var redzēt kādas komandas tiek izpildītas SQL Server, var reģistrēt dažādu notikumu datus (piemēram, resursu bloķēšanas notikumi, strupsaķeres, utt)

SQL Server Profiler

Ar šī rīka palīdzību galvenokārt tiek „ķertas” komandas, kas izpildītas uz SQL Serveri. Rīka lietotājam ir iespēja norādīt, kāda tipa komandas tas vēlas redzēt. Ir iespēja filtrēt pēc konkrētiem parametriem- piemēram, komandas, kas izpildās ilgāk par 10 sekundēm, vai komandas, kas veic vairāk kā 10 000 lasīšanas operācijas (1 lasīšanas operācija = 8 kb). Ir iespēja filtrēt pēc programmas, kas izpilda komandu. Noderīgi, ja izstrādātāji norāda programmas nosaukumu Programmas nosaukuma norādīšana.

Bez jau pieminētajām filtrēšanas operācijām, rīka lietotājam ir iespēja norādīt arī katrā brīdī aktuālās lietas (kolonnas), ko tas vēlas redzēt- piemēram, lietotājam filtrējot konkrētas programmas sūtītos vaicājumus uz datu bāzi, programmas nosaukumu pie katras komandas nav būtiski redzēt.

Lai arī vairumā gadījumu tieši izpildītās SQL komandas ir svarīgākais vērojamais objekts, bez tā ir iespējams vērot arī praktiski visas pārējās darbības SQL Serverī- piemēram, skatīties datu bāzes slēgšanas (lock) darbības. Subjektīvi ērtāk liekas izmantot storēto procedūru sp_lock, kas atgriež konkrētajā brīdī esošās slēgtos objektus (Attēls 5 sp_lock izpildes rezultāti), tomēr, ja ir nepieciešams noķert brīdi, kad objekti tiek slēgti (locked), tad Profiler ir īstais rīks, ar ko to paveikt.

sp_lock izpildes rezultāti

Strādājot ar šo rīku jāņem vērā, ka komandu „ķeršana” rada papildu slodzi SQL Serverim un produkcijas vidē tas var kavēt darbu. SQL Server Profiler nevajadzētu darbināt no datora, uz kura ir uzinstalēts SQL Server.

Kā jau minēts- rīka lietošana nozīmē, ka tā lietotājam ir iespēja redzēt visas komandas, kas tiek izpildītas uz SQL Server (kas var saturēt jūtīgu informāciju), tādēļ pat datu bāžu īpašniekiem (db_owner) pēc noklusējuma nav tiesību šo rīku darbināt. Ar rīku var strādāt sysadmin lietotāja lomai piederoši cilvēki, vai arī tiesības var piešķirt speciāli kādam konkrētam lietotājam informācijas redzēšanai. Attēlā redzams, kā ar caur grafisko interfeicu (SQL Management Studio) lietotājam tiek piešķirtas „Alter trace” tiesības. Pēc šīs komandas izpildes (OK nospiešanas), var pieslēgties ar SQL Server Profiler un redzēt, kādas komandas tiek izpildītas uz šā servera (Serveris->Security->Logins-> labā poga->Properties->Securables->Search, kur norādām serveri->pretī "Alter trace" izvēlamies "Grant"). View Server State tiesības arī nodrošina trace redzēšanu. Tomēr papildus tam ļauj redzēt servera konfigurāciju. Par tiesībām smuks aprakstiņš šeit.

Tiesību piešķiršana


SQL Server profiler lietošana ne vienmēr ir vienkārša un ir nepieciešama samērā liela pieredze, lai varētu „ķert” konkrētajā problēmsituācijā vajadzīgo informāciju, tomēr rīku ieteicams lietot pēc iespējas agrāk- jo ar šī rīka palīdzību iespējams vērot precīzi kādas komandas tiek izpildītas uz servera katrā konkrētajā brīdī, cik lielu noslodzi rada šās komandas, redzēt daudzu lietotāju savstarpējo konkurenci, pētīt likumsakarības, risināt strupsaķeres (dead-lock) problēmas.

Rezultātus ir iespējams saglabāt failā un pēc tam ar Data Base Engine Tuning Advicer analizēt datu bāzes iespējamos optimizācijas variantus. Subjektīvi gan noderīgāk liekas pētīt, kuri vaicājumi izpildās īpaši bieži vai rada vislielāko noslodzi, un tad jau risināt konkrētā vaicājuma ātrdarbības problēmas. Šim viedoklim ir vairāki pamatojumi:
  • Produkcijas vidē parasti nav vienmērīga datu bāzes noslodze- mēneša sākumā lietotāji vairāk vada datus, mēneša beigās savukārt vairāk darbina pārskatus. Gada beigās lietotāji vairāk labo datus. Tādēļ iegūt kvalitatīvu noslodzes ‘ierakstu’ (trace) īsā laika posmā ir grūti, pat neiespējami. Savukārt ilgstoši darbināt SQL Profiler produkcijas vidē nav ieteicams.
  • Automātiskie datu bāzes optimizēšanas rīki strādā pēc noslodzes kādā brīdī, bet parasti vislielāko optimizācijas rezultātu sniedz tieši loģiska vaicājumu optimizēšana, kā izdarīšanai bieži nepieciešamas zināšanas par problēmsfēru, kas šim rīkam, diemžēl, nepiemīt. Tiesa, ir gadījumi kad nav uzlikts kāds indekss, kas ļoti paātrinātu darbu, bet arī šīs situācijas parasti var vislabāk redzēt tieši analizējot ilgi izpildāmos vaicājumus.

Nav komentāru:

Ierakstīt komentāru