6 Stimmen

SQL-Abfrage dauert zu bestimmten Zeiten sehr lange

Ich führe eine wirklich einfache Abfrage auf einer wirklich kleinen Tabelle (<10 Zeilen, 5 Spalten) auf SQL Server 2005 aus, und normalerweise werden die Ergebnisse sofort zurückgegeben, aber manchmal dauert es sehr lange, bis sie abgeschlossen sind (etwa 5-10 Sekunden). Ich bin mir bewusst, dass unser Server ziemlich stark belastet ist und dies wahrscheinlich die Ursache ist (da ich nicht glaube, dass es aufgrund von Sperren passieren kann - niemand schreibt in diese Tabelle) - aber ich muss den Engpass irgendwie finden.

Irgendwelche Vorschläge, wie ich die genaue Server-Ressource finden kann, die solche einfachen Abfragen so lange dauern lässt?

8voto

MadBender Punkte 1418

Klicken Sie in SSMS mit der rechten Maustaste auf den verbundenen Server im Objekt-Explorer und wählen Sie Aktivitätsmonitor.

Dort können Sie die letzten teuren Abfragen und andere Leistungsdaten sehen.

4voto

SQLMenace Punkte 128184

Neben der Ausführung des Profilers und der Überprüfung auf page life expectancy und auch buffer cache hit ratio Siehe: Verwenden Sie sys.dm_os_performance_counters, um die Zähler für die Buffer Cache Hit Ratio und die Page Life Expectancy zu erhalten

es könnte auch sein (aber Sie müssen testen), dass die Daten, nach denen Sie suchen, aus dem Cache im RAM gestoßen wurden, jetzt muss es sie von der Festplatte holen und das dauert länger, wenn Sie es eine Sekunde später erneut ausführen, wird es wieder schnell sein

können Sie überprüfen, indem Sie mit Statistik io auf

SET STATISTICS IO ON

select * ..your query

sollten Sie etwa Folgendes sehen

Tabelle "TabelleNAme". Anzahl der Scans 1, logische Lesungen 4, physische Lesungen 2

wenn Sie sehen physical reads über 0, wurde es von der Festplatte geholt

Sie können dies überprüfen (nicht in der Produktion)

durch Ablegen der Daten aus dem RAM

DBCC freeproccache
DBCC DROPcleanbuffers

Wenn Sie nun eine Abfrage zweimal ausführen, sehen Sie etwa so aus, wobei der erste Durchlauf von der Festplatte und der zweite aus dem RAM erfolgt

Tabelle "TabelleNAme". Scan count 1, logische Lesungen 4, physisch liest 2

Tabelle "TabelleNAme". Scan count 1, logische Lesungen 4, physisch liest 0

3voto

Ali Punkte 3358

Das Einzige, was Sie brauchen, ist ein Profiling. Sie müssen eine Vorstellung von Speicher, Eingabe/Ausgabe und Prozessor haben. Sie müssen wissen, welcher dieser 3 Faktoren die Verlangsamung des Servers verursacht. Es gibt viele Produkte, die das können (es gibt sogar einen guten Leistungsmonitor, der mit Windows installiert wird).

Denken" Sie nicht darüber nach, sondern sehen Sie sich die Daten an, um das grundlegende Problem zu verstehen.

1voto

openshac Punkte 4647

Sie müssen nicht in die Tabelle schreiben, um eine Sperre zu erhalten. Sie könnten versuchen, eine Ihrer SELECT-Anweisungen so zu ändern, dass sie WITH (NOLOCK) Eine andere Anweisung (Einfügen/Aktualisieren/Löschen), die sehr langsam ist, und die Verknüpfungen mit dieser Tabelle könnten sie sperren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X