Instrumente de acces la baze de date

Jeff a menționat într-unul din podcast-uri că unul dintre lucrurile pe care le face mereu este pus în instrumentație pentru apelurile de la baza de date, astfel încât el să poată spune ce interogări cauzează lentate etc. Acesta este ceva pe care l-am măsurat în trecut folosind SQL Profiler, dar Sunt interesat de ce strategii au folosit alte persoane pentru a include acest lucru ca parte a aplicației.

Este pur și simplu un caz de a include un cronometru în fiecare apel de bază de date și înregistrarea rezultatului, sau există o modalitate "mai puțin" de a face acest lucru? Poate că există un cadru care face acest lucru pentru dvs. deja, sau există un drapel pe care l-aș putea permite, de ex. Linq-to-SQL care ar oferi o funcționalitate similară.

Eu folosesc în principal C# dar ar fi, de asemenea, interesat în a vedea metode din diferite limbi, și aș fi mai interesat de un mod de "cod" de a face acest lucru printr-o metodă platformă db ca SQL Profiler.

0
fr hi bn

7 răspunsuri

Dacă vă aflați în Firebird, vă recomandăm să vizionați sinatica.com .
Vom lansa în curând un instrument de monitorizare în timp real pentru DBA-urile Firebird.

< /shameless plug>

0
adăugat

Dacă scrieți interogări în SQL Management Studio, puteți introduce: SET STATISTICS TIME ON și Serverul SQl vă va spune cât timp părțile individuale ale unei interogări au fost analizate, compilate și executate. S-ar putea să înregistrați aceste informații manipulând evenimentul InfoMessage din clasa SqlConnection (dar cred că folosind SQL Profiler este mult mai ușor.)

0
adăugat

Aș fi crezut că lucrul important de întrebat aici este "ce platformă de baze de date folosiți?"

De exemplu, în Sybase, instalarea tabelelor MDA ar putea rezolva problema dvs., acestea oferă o grămadă de statistici de la utilizarea apelurilor de procedură până la logica I/O logică, timpul procesorului și acoperirea indexului. Poate fi la fel de inteligent cum vrei tu să fie.

0
adăugat

Eu văd cu siguranță valoarea în utilizarea SQL Profiler în timp ce sunteți în curs de desfășurare și EXPLAIN sau SET STATISTICS vă va oferi informații despre interogările individuale, dar pune pe cineva în mod obișnuit punctele de măsurare în codul lor pentru a aduna informații despre interogările bazei de date în curs de desfășurare - ridicați, de exemplu, o interogare pe o tabelă care are o performanță fină inițială, dar pe măsură ce numărul de rânduri crește, devine mai lent și mai lent.

Dacă utilizați MySQL sau Postgre există diferite instrumente pentru a vedea activitatea de interogare în timp real, dar nu am găsit un instrument la fel de bun ca SQL Profiler pentru măsurarea performanței interogării în timp.

Mă întreb dacă există (sau ar trebui să fie?) Ceva similar cu ELMAH în modul în care se conectează și vă oferă informații fără prea mult efort suplimentar?

0
adăugat

Înregistrarea apelurilor bazei de date, calendarul brut și numărul de înregistrări (octeți) returnate în aplicație sunt utile, dar nu vă vor oferi toate informațiile de care aveți nevoie.

Ar putea să vă arate modele de utilizare pe care nu le așteptați. S-ar putea să se arate unde utilizați accesul "rând-pe-rând" în loc de operațiunile "bazate pe set".

Cel mai bun instrument de utilizat este SQL Profiler și analizați numărul de "Citiri" vs CPU și durata. Doriți să evitați interogările CPU, citirile mari și duratele lungi (duh!).

"Grupul citit" este o caracteristică utilă pentru a aduce în prim-plan cele mai nastice întrebări.

0
adăugat

Dacă o interogare este mai mult decât o simplă SELECT pe o singură masă, o rulați întotdeauna prin EXPLAIN dacă sunt pe MySQL sau PostgreSQL. Dacă utilizați SQL Server, Management Studio are un plan de execuție estimat de execuție care este în esență același. Este util să vezi cum motorul va accesa fiecare tabel și ce indexuri va folosi. Uneori te va surprinde.

0
adăugat

Dacă utilizați Hibernate (folosesc versiunea Java, aș imagina că NHibernate are ceva similar), puteți avea Hibernate să colecteze statistici despre multe lucruri diferite. Vezi, de exemplu:

http://www.javalobby.org/java/forums/t19807.html

0
adăugat