Wie schließe ich SQL Server als Grund für eine langsame Website aus?

7

Auf einer von uns gehosteten Website wurden kürzlich langsame Ladezeiten festgestellt. Es wurde ausgeschlossen, dass das Problem beim Webserver liegt und möglicherweise datenbankbezogen ist.

Welche Schritte oder Verfahren unternehme ich, um zu bestätigen oder auszuschließen, dass SQL Server der Grund für die langsamen Ladezeiten ist? Welche Verhaltensweisen / Merkmale von SQL Server, auf die Sie achten müssen, können ohne Baseline darauf hinweisen, dass ein Problem vorliegt?

jsauni
quelle

Antworten:

4

Ich würde vorschlagen, dass Sie eine endgültigere Problemstellung benötigen - sind das alles Webseiten? Wenn es nur einige sind, was machen diese Webseiten? Was ist die akzeptable Ladezeit und wie ist die aktuelle Ladezeit? Sind es alle Benutzer oder nur einige?

Ich war früher ein Webadministrator und meine erste Überprüfung wäre der Webserver gewesen - sind Speicher und CPU in Ordnung? Zeigen das Betriebssystem und die Weblogs etwas an? Können die Skripte ein Protokoll ausgeben, um zu zeigen, was los ist? zB habe ich das Datenbankmaterial in einen Abschnitt eingefügt und Zeiten / Dauer für jede Datenbankaktivität in ein Protokoll geschrieben, wenn es aktiviert wurde.

Wenn Sie den SQL Server überprüfen müssen, überprüfen Sie die SQL- und NT-Protokolle und erneut den Speicher, die Disc-E / A und den CPU - Task-Manager erhalten Sie ein Ideal von zwei davon (nicht die Disc-E / A). Im Idealfall sollte sich SQL Server auf einer dedizierten Box befinden und nicht für irgendetwas freigegeben werden.

Schauen Sie sich während der Nutzung der Website entweder Activity Monitor oder sp_who2 an. Können Sie sehen, wie die Abfrage trödelt? Gibt es eine Blockierung? Aktualisieren Sie weiter ... Wenn die Abfrage eine Weile ausgeführt / angehalten / ausgeführt werden kann, müssen Sie herausfinden, warum sie langsam ist. Wenn in diesen Zuständen keine Abfrage angezeigt wird, handelt es sich möglicherweise nicht um SQL Server.

Peter Schofield
quelle
4

Eine schnelle Möglichkeit besteht darin, den Profiler zu starten und nach Abfragen zu suchen, deren Ausführung einige Sekunden dauert. Sehen Sie sich dann die Wartezeiten an, die protokolliert werden, um die Ursache für die lang laufenden Abfragen zu ermitteln.

mrdenny
quelle
2

Starten Sie zuerst den Aktivitätsmonitor . Was sehen Sie in der Übersicht - warten viele Sitzungen? Schauen Sie sich jetzt Resource Waits an - kämpft der Server um Festplatten-E / A oder verbringt er viel Zeit damit, auf Sperren zu warten. Sie können auch die neuesten teuren SQL-Anweisungen anzeigen. Weitere Informationen finden Sie im Abschnitt "Aktivität" oder im SQL Profiler (mit der Einschränkung, dass die Profilerstellung selbst eine teure Aktivität ist - machen Sie eine schlechte Situation nicht noch schlimmer!).

Die Leistungsoptimierung bietet natürlich noch viel mehr - dies zeigt Ihnen jedoch schnell, was SQL Server tatsächlich tut. Und eine wichtige Tatsache, an die Sie sich erinnern sollten: Die Datenbank wird versuchen, die Arbeit zu erledigen, die Sie ihr geben, aber sie kann Ihre Absicht nicht immer erraten. Wenn die App fehlerhaftes SQL sendet (z. B. viel mehr Zeilen als nötig AUSWÄHLEN und in der App filtern, habe ich dies schon oft gesehen) oder das Schemadesign fehlerhaft ist (z. B. fehlende Indizes), liegt die Lösung für das wahrgenommene Datenbankproblem außerhalb der Datenbank. Der Tuning Advisor kann Ihnen bei der Diagnose dieser Art von Problemen helfen.

Gaius
quelle
2

Wenn Sie alles Unmögliche beseitigt haben, muss alles, was noch so unwahrscheinlich ist, die Wahrheit sein. - Sherlock Holmes

Erwägen Sie der Vollständigkeit halber zu beweisen, dass alles andere nicht das Problem sein kann. Beseitigen Sie Hardware, einschließlich RAM, Netzwerkkarten, Router, Kabel. Serverprozesse eliminieren; Entfernen Sie andere Software wie den Webserver, den Proxyserver usw.

Für viele Unternehmen kann es schon ein Augenöffner sein, herauszufinden, was "alles außer der Datenbank" ist.

Mike Sherrill 'Cat Recall'
quelle
-1

Alle Serverkonfigurationen und Webdienste sind unterschiedlich. Der beste Weg, dies zu tun, ist nicht so sehr zu sehen, ob Ihr SQL Server Ihre Website verlangsamt, sondern zu erkennen, dass es immer die beste Vorgehensweise ist, sicherzustellen, dass Ihr SQL in einer gut optimierten Weise geschrieben ist, gespeicherte Prozeduren für alles zu verwenden und Vermeiden Sie Pass-Through-Abfragen. Pass-Through-Abfragen sind seit Anfang der 90er Jahre Legacy-Code und bei weitem nicht so effizient wie gespeicherte Prozeduren.

Wenn Sie Kreuztabellenabfragen speziell für große Tabellen geschrieben haben, sollten Sie außerdem Daten wiederholen, um die Verwendung von Kreuztabellenabfragen (in Verknüpfungen oder Doppelverknüpfungen verschachtelte Abfragen) zu vermeiden. Wenn Sie viele Kreuztabellenabfragen haben und die Wiederholung von Daten in zusätzlichen Feldern keine Option ist, überprüfen Sie, ob Ihre Kreuztabellenabfragen die Mindestanzahl von Zeilen zurückgeben. Versuchen Sie nicht, Kreuztabellen durch den Filter DISTINCT / DISTINCTROW zu filtern. Vermeiden Sie auch die Verwendung von Triggern, da dies eine DML-Ebene öffnet. Die zusätzliche DML-Schicht in den meisten Datenbank-Engines kann die Effizienz der DB-Engine leicht halbieren. Der beste Weg, um Kreuztabellen zu optimieren, besteht darin, mit den Verknüpfungsfeldern herumzuspielen, bis Sie die Mindestanzahl von Zeilen erhalten, die die Anzahl der Zeilen in der Tabelle ganz links (für eine Verknüpfung links) oder in der Tabelle ganz rechts (in einer Verknüpfung ganz rechts) widerspiegeln ).

Vermeiden Sie am besten auch viele bis viele Fragen. Viele bis viele Abfragen werden nur für Berichte oder die Integration in Datenquellen von Drittanbietern verwendet, für die das System ursprünglich nicht entwickelt wurde.

Abgesehen von diesen Ausnahmen Wenn eine Datenbank ordnungsgemäß normalisiert ist, sollten niemals viele bis viele Verknüpfungen angezeigt werden.

Obwohl ich respektiere, dass dies Ihre Frage nicht direkt beantwortet, wenn Sie diesen Rat in diesem Beitrag befolgt haben, besteht das Problem darin, dass Sie einen leistungsstärkeren Webdienst benötigen, möglicherweise einen Cloud-Server.

Hoffe dieser Rat hilft.

user2288580
quelle