Frage

Gibt es eine gute Möglichkeit, SQL-Abfragen zu Zeit, wenn Linq verwenden, um zu SQL? Ich mag Protokollierungsfunktion wirklich, aber es wäre schön, wenn Sie könnten irgendwie Zeit auch die Abfrage. Irgendwelche Ideen?

War es hilfreich?

Lösung

SQL Profiler die Abfrage und die Zeit zu bekommen, und auch Ausführungspfad in Query Analyzer, um zu sehen, wo die Engpässe sind.

Andere Tipps

Wie zwei Menschen schon gesagt, ist SQL Profiler das out-of-the-Box-Tool für das verwenden. Ich will nicht, ein Echo sein, aber ich wollte ein bisschen mehr im Detail erarbeiten: Nicht nur, dass sie die tatsächlichen Timings von SQL Server zur Verfügung stellen (wie aus der App-Seite Timing Gegensatz wo Netzwerk-I / O-Verbindung und Anschluss Pool-Timings werden den Kuchen hinzugefügt), aber es gibt Ihnen auch die [oft wichtiger] I / O-Statistiken Zahlen, Info Sperren (je nach Bedarf) etc.

Der Grund, I / O-Statistiken sind wichtig ist, dass eine sehr teuere Abfrage schnell laufen kann, während übermäßige Mengen von Server-Ressourcen verbrauchen. Wenn zum Beispiel eine Abfrage, die häufig ausgeführt wird, große Tabellen trifft und es gibt keine passenden Indizes resultierenden Tabellen-Scans, die betroffenen Tabellen im Speicher von SQL Server zwischengespeichert werden (wenn das möglich ist). Dies kann manchmal die gleiche Abfrage verursacht unglaublich schnell auszuführen, während in der Tat ist es durch den Verzehr auf Server-Ressourcen den Rest des System / app / db zu schaden.

info Sperre ist fast so wichtig -> kleine Abfragen PK-Lookups für einen einzelnen Datensatz zu tun schlechte Timings wegen Sperren und Blockierungen haben können. Ich habe irgendwo gelesen, dass dies sehr Website von Deadlocks in seiner frühen Beta Tagen geplagt wurde. SQL Profiler ist dein Freund für die Identifizierung und Lösung von Problemen durch zu sperren.

Um es zusammenzufassen; ob Sie L2S verwenden, EF, plain ADO - wenn Sie sicher, dass Ihre App machen wollen in Richtung der Datenbank „nice verhält sich“ immer bereit, SQL Profiler bei der Entwicklung und Erprobung haben. Es zahlt sich aus!

Edit: Da ich die Antwort oben geschrieben habe ich eine neue Laufzeit Profilierungswerkzeug für L2S entwickelt habe, die das Beste aus beiden Welten zusammen zu bringen; E / A-Statistiken und serverseitige Timings von SQL Server, SQL Server-Ausführungsplan, SQL Server „fehlenden Index“ Warnungen, mit dem verwalteten Call-Stack kombiniert, um es einfach zu finden, welcher Code eine bestimmte Abfrage generiert, und einige erweiterte Filteroptionen nur Abfragen zu protokollieren, die bestimmte Kriterien erfüllen. Zusätzlich kann die Protokollierungskomponente mit Anwendungen verteilt werden, um Laufzeitabfrage Profilierung in Live-Kundenumgebungen zu erleichtern. Das Tool kann von folgenden Website heruntergeladen werden:

http://www.huagati.com/L2SProfiler/ wo Sie auch eine bekommen kostenlose 45-Tage-Testlizenz.

Eine längere Hintergrundbeschreibung und Einführung in das Werkzeug auch hier gepostet:
http://huagati.blogspot.com/2009/ 06 / Profilieren-Linq-to-sQL-applications.html

... und eine Probe / Komplettlösung von einigen der erweiterten Filter-Optionen ist hier verfügbar:
http://huagati.blogspot.com/2009/ 08 / Komplettlösung-of-neueste-Filter-and.html

Sie könnten einen System.Diagnostics.Stopwatch verwenden es erlaubt Ihnen, die Zeit zu verfolgen, die Abfrage ausgeführt wird. Denken Sie daran, dass Linq-> SQL-Abfragen nicht ausgeführt werden, bis Sie über sie aufzuzählen. Beachten Sie auch, dass, wenn Sie Console.Out protokollieren wird es eine erhebliche Leistungseinbußen sein.

Was Sie tun können, ist eine benutzerdefinierte Textwriter Implementierung der DataContext.Log hinzufügen, die die generierten SQL in eine Datei oder Speicher schreiben. Dann Schleife durch diese Abfragen, so dass sie mit rohem ADO.NET Code ausgeführt wird, um jede mit einer Stoppuhr.

Ich habe vor eine ähnliche Technik verwendet, weil es schien, wenn ich einige Code entwickle ich nie Profiler geöffnet hatte, und es war wirklich einfach, diese Ergebnisse in einer HTML-Seite ausgegeben wird. Sie sicher, dass die Ausführung sie zweimal pro Website Anfrage, aber sein hilfreich Ausführungszeiten so schnell wie möglich, anstatt zu warten, um zu sehen, bis Sie etwas in Profiler fangen.

Auch wenn Ihr auf die SQL-Tool Weg gehen würde ich empfehlen, eine gespeicherte Prozedur googeln „langsamste Abfrage DMV“ und erhalten, die Statistiken zu den langsamsten Abfragen in Ihrer db geben kann. Es ist nicht immer einfach durch Profiler Ergebnisse zu blättern, die schlechten Abfragen zu finden. Auch mit den richtigen Abfragen über SQL 2005 DMV können Sie auch tun Bestellung können sagen, CPU-Zeit-und so weiter.

Wir verwenden SQL Profiler unsere Fragen mit LLBLGen Pro zu testen.

Das Beste ist, die Abfragen in einer Datei zu protokollieren und sie SQL Profiler verwenden, um sie Zeit und die Indizes für die Abfragen zu optimieren.

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