Frage

ich zur Zeit mache einige GUI-Tests auf einer ASP.net 2.0-Anwendung. Das RDBMS ist SQL Server 2005. Der Host wird Windows Server 2003 / IIS 6.0.

Ich habe nicht den Quellcode der Anwendung, weil es von einem externen Unternehmen programmiert wurde, die den Code nicht hat freigegeben wird.

Ich habe bemerkt, dass die Anwendung gut funktioniert, wenn ich IIS neu starten, aber nach einigen Tests, nachdem ich geöffnet und geschlossen mein Browser für ein paar Stunden, die Anwendung gestartet werden langsamer und langsamer zu bekommen. Ich frage mich, ob dieses Verhalten von den Programmierern zu einer schlechten Schlussverbindung Praxis zurückzuführen ist. Ich bin hier, um ein offene Verbindung Leck auf der Datenbank Verdacht

Ich denke, das .Net Garbage Collector sie schließlich geschlossen wird, aber ... das kann eine Weile dauern, nicht wahr?

Ich habe SQL Server Management Studio, und ich aus dem Aktivitätsmonitor Sie feststellen, dass es ziemlich viele Verbindungen auf die Datenbank geöffnet wird.

Nach allem, was oben gesagt wird, sind hier einige auf die Hauptfrage Fragen:

  1. Gibt es eine Möglichkeit in SQL zu wissen Server 2005, wenn Verbindungen öffnen, weil sie warten zu sein in einem Verbindungspool verwendet oder wenn sie sind offen, weil sie durch eine Verwendung von Anwendung?

  2. Kennt somone gute Online / Papier Ressourcen, wo ich kann, lernen, wie man die Leistung verwenden Zähler oder eine andere Art von Werkzeugen die Spur zu helfen, diese Art von Fragen?

  3. Wenn die Leistungsindikatoren sind die besten Lösung: Was sind die Variablen, die ich sehen sollte?

War es hilfreich?

Lösung

Sie können jederzeit überprüfen Sie die Verbindungszeichenfolgen von web.config (vor allem, wenn sie Spooling-Verbindung aktiviert haben, wenn sie irgendwelche Verbindungslimits aktiviert haben).

Auch wenn Sie IIS 6 verwenden, können Sie Ihre Web-Anwendung einstellen könnten einen separaten Anwendungspool zu verwenden, und setzten andere Option für das Recycling des Speichers und Prozesse.

Über die Leistungsindikatoren können Sie überprüfen, wie lange der Garbage Collector läuft, wie viel Speicher die Anwendung verwendet, etc.

Wenn Sie den Zugriff auf SQL Server haben, können Sie die aus Ihrer Anwendung hergestellten Verbindungen überwachen könnten (es gibt Leistungsindikatoren für jede installierte Instanz von SQL Server definiert).

Es gab einige Artikel in MSDN Magazine . Auch Sie konnten die SOS-Debugging-Bibliothek verwenden, um die Anwendung des Prozess anhängen und überprüfen Sie es manuell.

Und wenn Sie den Quellcode nicht haben, versuchen Reflektor die Quellen der Anwendung zu bekommen (sie würden für das Debuggen sehr nützlich sein)

@Later bearbeiten: Sie können diese Frage prüfen hier auf stackoverflow.com zu

Andere Tipps

Wir haben dieses Themas ein ähnliches Problem untersucht. Ich kam mit der folgenden SQL als eine gute Möglichkeit auf undichte Verbindungen in SQL Server zu debuggen:

SELECT S.spid, login_time, last_batch, status, hostname, program_name, cmd,
(
      select text from sys.dm_exec_sql_text(S.sql_handle)
) as last_sql
FROM sys.sysprocesses S
where dbid > 0
and DB_NAME(dbid) = '<my_database_name>'
and loginname = '<my_application_login>'
order by last_batch asc

Was gibt Ihnen alle offenen Verbindungen auf eine bestimmte Datenbank und Anmeldung, zusammen mit dem letzten SQL auf dieser Verbindung ausgeführt , von der Zeit sortiert, zu dem die SQL ausgeführt wurde.

Aufgrund der Connection-Pooling können Sie nicht auf die Tatsache verlassen, nur, dass es eine Menge von Verbindungen sind rumhängen, Ihnen zu sagen, dass Sie eine Verbindung Leckage haben, da Connection Pooling Verbindungen halten um, auch wenn sie von richtig geschlossen sind Code. Wenn Sie jedoch haben Sie eine Verbindung Leckage, was Sie sehen, ist, dass einige Verbindungen „eingefroren“ werden wird -sie in der obigen Abfrage angezeigt und die „last_batch“ Zeitstempel wird sich nie ändern. Die anderen Verbindungen werden auch hängen herum, aber jedes Mal neue SQL auf ihnen laufen, so wird der „last_batch“ Zeitstempel aktualisiert. So ist der Effekt, dass die gefrorenen Verbindungen zum Anfang der Abfrage schwimmen.

Wenn Sie den Quellcode der Anwendung in Frage haben, die Tatsache, dass diese Ihnen die letzte SQL auf der verwaiste Verbindung ausgeführt gibt, ist sehr wertvoll für die Fehlersuche.

ich dieses Problem konfrontiert und fand SQL Server Profiler ein großes Werkzeug zu sein, überwachte ich die Website in einem kurzen Testlauf und bemerkte, viele Verbindungen (Sp_who) erstellt werden, die nicht von Connection Pool wiederverwendet wurde, so dass ich SQL gerade geöffnet Server Profiler und dann prüfen, ob alle Anrufe von Code auf trad wurde von einem „sp_reset_connection“ Aufruf gefolgt. Wenn der Anruf dort nicht vor dem Beginn einer neuen Charge Sie fehlen nur die erste Verbindung.

Die MSDN-Referenz über ( ADO.NET Leistungsindikatoren ) ziemlich klar ist, was Sie für, wenn Profilieren der Anwendung aussehen kann. Sie können die Zähler überwachen die perfmon Anwendung in Windows integriert.

Other than that, würde ich vorschlagen, das Lernen über ADO.NET Connection Pooling. Wenn Sie wirklich einen Fehler in ihrem Code vermuten, können Sie einen Blick auf sie nehmen mit Red Gate Reflector (gratis), die die MSIL in C # auseinanderbauen.

Ich würde beginnen, indem man die Verbindungen suchen und Aktivitätszeiten suchen, und sehen, ob Sie Einzelteile finden können, die die Verbindungen offen halten.

Ich würde sagen, dachte, dass, wenn die Lösung IIS neu zu starten ist, können Sie auch auf der Speichernutzung der Anwendung aussehen könnte, um zu sehen, ob es einen Speicherverlust oder etwas ist es, die wirklich seine Präsenz führt zu wachsen.

Wenn offene Verbindungen ein Problem sind, in Aktivitätsmonitor würden Sie eine sehr große Anzahl von Verbindungen ohne Aktivität.

Für die Leistungsindikatoren erhalten Sie bei der Suche beginnen könnten „SQL Server: Allgemeine Statistik“. Leistungsobjekt

Todd Denlinger hat eine fantastische Klasse http://www.codeproject.com/KB/ Datenbank / connectionmonitor.aspx , die SQL Server-Verbindungen und Berichte über solche Uhren, die nicht innerhalb einer Frist ordnungsgemäß entsorgt worden. Verkabeln Sie ihn auf Ihrer Website, und es wird Sie wissen lassen, wenn es ein Leck vorhanden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top