3 Stimmen

Auffinden von Leistungsengpässen in einer klassischen asp/sql-Server-Website

Ich habe eine alte klassische asp/sql-Server-App, die ständig 500 Fehler/Zeitüberschreitungen wirft, obwohl die Last nicht massiv ist. Einige der DB-Abfragen sind ziemlich intensiv, aber nichts, was es verursachen sollte, um umzufallen.

Gibt es irgendeine gute Software, die ich auf meinem Server installieren kann und die mir genau zeigt, wo die Engpässe entweder im Asp oder in der DB liegen?

2voto

Patrick Cuff Punkte 27220

Einige Tools können Sie ausprobieren:

2voto

Espen Punkte 2113

Wo tritt die Zeitüberschreitung auf? Tritt sie bei Zeilen auf, wenn ASP eine Verbindung herstellt/eine SQL ausführt? Wenn ja, liegt das Problem entweder bei der Verbindung zum Datenbankserver oder bei der Datenbank selbst. Laden Sie den SQL Profiler in MSSQL, um zu sehen, wie lange die Abfragen dauern. Vielleicht liegt es an den Sperren in der Datenbank.

Verwenden Sie Transaktionen? Wenn ja, stellen Sie sicher, dass sie Ihre Datenbank nicht für lange Zeit sperren. Stellen Sie sicher, dass Sie Transaktionen in ADO und nicht auf der gesamten ASP-Seite verwenden. Sie können auch Sperren in SQL Selects ignorieren, indem Sie den WITH (NOLOCK)-Hinweis für Tabellen verwenden.

Stellen Sie sicher, dass Ihre Datenbank mit Indizes optimiert ist.

Stellen Sie außerdem sicher, dass Sie so kurz wie möglich mit der Datenbank verbunden sind, z.B. (Beispiel, kein funktionierender Code): conn.open; set rs = conn.execute(); rs.close; conn.close. Speichern Sie also Datensätze in einer Variablen, anstatt eine Schleife zu durchlaufen, während Sie die Verbindung zur DB offen halten. Eine gute Möglichkeit ist die Verwendung der Funktion GetRows() in ADO.

Schließen Sie ADO-Objekte immer explizit und setzen Sie sie auf Null. Dies kann dazu führen, dass die Verbindung zur DB offen bleibt.

Aktivieren Sie das Pooling von Verbindungen.

Laden Sie ADO-Konstanten in global.asa, wenn Sie sie verwenden

Speichern Sie keine Objekte in Sitzungs- oder Anwendungsbereichen.

Aktualisierung auf die neuesten Versionen von ADO, MDac, SQL Server Service Packs usw.

Sind Sie sicher, dass der Server die Last bewältigen kann? Vielleicht sollten Sie ihn aufrüsten? Ist es ein gemeinsam genutztes Hosting? Vielleicht ist Ihre Anwendung nicht das Problem.

Es ist recht einfach, die Leistung eines Skripts zu messen, indem man es von der ersten bis zur letzten Zeile zeitlich einordnet. Auf diese Weise können Sie langsam laufende Seiten identifizieren.

1voto

Rich Andrews Punkte 4138

Haben Sie versucht, den SQL Server Profiler auf dem Server auszuführen? Dadurch werden unerwartete Aktivitäten, die von der Anwendung aus auf die Datenbank einwirken, hervorgehoben und schlecht funktionierende Abfragen können identifiziert werden.

1voto

AnthonyWJones Punkte 182582

Wenn Sie zufrieden sind, dass die DB-Abfragen unnötig intensiv sind, müssen Sie vielleicht angemessenere Timeouts für die Seiten festlegen, die diese Abfragen verwenden.

Setzen Sie das Server.ScriptTimeout auf einen größeren Wert. Möglicherweise müssen Sie auch das Timeout für die vom Skript verwendeten ADO-Befehlsobjekte festlegen.

0voto

John Rose Punkte 1915

Ich würde folgendermaßen vorgehen.

  1. Sehen Sie sich die laufenden Aufgaben auf dem Server an. Welche Aufgabe beansprucht mehr CPU-Zeit - SQL-Server oder IIS? In den meisten Fällen wird es der SQL-Server sein, und nach Ihrem Beitrag klingt es auch so. Es ist sehr selten, dass eine ASP-Anwendung tatsächlich einen Großteil der Verarbeitung auf der ASP-Seite im Gegensatz zu den COM- oder SQL-Seiten durchführt.

  2. Verwenden Sie SQL Profiler, um alle Abfragen zu überprüfen, die auf den Datenbankserver zugreifen.

  3. Kümmern Sie sich zuerst um die niedrig hängenden Früchte. In der Regel werden Sie einige "problematische" Abfragen haben, die die Datenbank häufig belasten und viel Zeit in Anspruch nehmen. Kümmern Sie sich um diese. (Eine Binsenweisheit in der Softwareentwicklung besagt, dass 10 % des Codes 90 % der Ausführungszeit verschlingt...)

Neben der Untersuchung der Abfragekosten mit SQL Profiler und Query Analyzer/SQL Studio und der normalen SQL-Leistungsermittlung sollten Sie auch prüfen, ob Ihre Datenbankaufrufe übermäßige Datenmengen an Ihren ASP-Code zurückgeben. Ich habe Fälle gesehen, in denen harmlos aussehende Abfragen riesige Mengen nicht benötigter Daten an ASP zurückgegeben haben - die klassische ("select * from tablename") Art von Abfrage, die von faulen/unerfahrenen Programmierern geschrieben wurde und 10.000 riesige Zeilen zurückgibt, obwohl der Programmierer eigentlich nur ein Feld aus einer Zeile benötigte. Ich erwähne diesen Sonderfall, weil diese Art von Abfragen oft niedrige Ausführungszeiten und niedrige Abfragekosten auf der SQL-Seite haben und daher unter dem Radar durchrutschen können.

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