Sporadische Performanceprobleme in großerAnwendung - wie debuggen?

10/02/2009 - 11:03 von Heinrich Moser | Report spam
Hallo!

Wir haben das Problem, dass bei einem unserer Kunden (und nur dort)
bei unserer Anwendung komische Performanceprobleme auftreten: Mal
braucht eine Abfrage 2-3 Sekunden (= so, wie es sein sollte), das
nàchste Mal (direkt danach, der gleiche SELECT) eine halbe Minute,
etc.

Unsere erste Idee wàre, zu versuchen, wàhrend der Situation, wo der
SELECT lange braucht, mit dem SQL Server Aktivitàtsmonitor einen
"Snapshot" zu machen, und zu prüfen, ob sich da irgendwelche
Transaktionen gegenseitig sperren. Der Kunde meint zwar, dass das
Verhalten auch dann auftritt, wenn nur wenig User im System sind, aber
trotzdem scheint mir das einmal die naheliegendste Ursache zu sein.

Da ich aber aus schmerzhafter Erfahrung befürchte, dass dabei nichts
hilfreiches herauskommt (sprich: Blockierung = 0 bei allen Prozessen
oder der Aktivitàtsmonitor bekommt einen Timeout beim Refresh), wollte
ich fragen, ob es sonst Tipps gibt, wie man an so ein Problem
herangeht; vielleicht gibt's ja irgendwelche einschlàgigen HOWTOs
(gerne auch auf englisch).

Erschwerend kommt natürlich hinzu, dass es hier nicht um einen
Problem-SQL geht, den man vielleicht optimieren könnte, sondern darum,
dass bei dem Kunden (und nur dort) sehr viele Anwendungsteile dieses
Verhalten (mal schnell, mal langsam, ohne erkennbares Muster) zeigen.

Um sachdienliche Hinweise wird gebeten. :-)

Danke, lG,
Heinzi
 

Lesen sie die antworten

#1 Klaus-Dieter Gundermann
10/02/2009 - 14:48 | Warnen spam
Hallo Heinzi,

wie du schon beschrieben hast, können solche "komischen" Effekte
auftreten, wenn es zu Konflikten beim Zugriff auf gemeinsame Ressourcen
kommt. Das können SQL Serverinterne Ressourcen sein (Locks, Buffer) aber
auch Rechnerressourcen (Festplatte, CPU, Netzwerk) sein.

Der Aktivitàtsmonitor ist jedoch nicht das richtige Tool dafür, da er
nur einen Snapshot darstellt. Ihr solltet einmal den SQL Server Profiler
nutzen, um zu sehen, welche Abfragen welche Ressourcen nutzen.
Parallel dazu lasst den Windows Leistungsmonitor laufen und überwacht
z.B.
- SQLServer:AllgemeineStatistik:Blockierte Prozesse
- SQLServer:AllgemeineStatistik:Transaktionen
- SQLServer:Datenbanken:Aktive Transaktionen nur für eure DB
- SQLServer:Sperren:Sperrtimeouts
- SQLServer:SQL-Statistik:Batchanforderungen/sek

- Physikalischer Datentràger:Lesevorgànge/s
- Physikalischer Datentràger:Schreibvorgànge/s
- Physikalischer Datentràger:Mittlere Sek./Lesevorgànge
- Physikalischer Datentràger:Mittlere Sek./Schreibvorgànge

- Prozessor:Benutzerzeit %
- Prozessor:Prozessorzeit %

Hth

Klaus

Ähnliche fragen