LINQ und Leistung SQL Server Tuning der Server 2008 Datenbank best practice SQL?

stimmen
1

Meine Frage ist, was am beste Praxis ist die Leistung zu optimieren mithilfe von LINQ für SQL und Leistung ist Reaktionszeit aus in der Benutzeroberfläche.

Im Moment habe ich einige Verkäufe Daten in einer SQL Server 2008-Datenbank und ich zeigen diese Daten (MAT, jährlich, in verschiedenen Segmenten, Wachstum in Segment Prozent des Marktwachstums ,,,,) in Diagrammen in einer ASP.NET-Anwendung mit LINQ für SQL Iquerable Ausdrücke konstruiert, die ausgeführt werden

Ich sehe die Herausforderung, dass ich eine Datenbank und verwendet LINQ, alle Fragen zu konstruieren, und ich habe keine Kontrolle, was SQL erstellt wird (ich kann es verfolgen aber ,,,,) und Ich benutze keine Stored Procedures so wie meine Daten abgerufen Blackbox ist wie.

Im Moment habe ich laufen einige Unit-Tests und manuellen Test der Anwendung und verwenden Sie die Databasse Motor Tuning Advisor, welche Indizes etc zu erstellen ....

Veröffentlicht am 30/12/2009 um 04:15
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Zusätzlich zu diesem, werde ich sowohl in der Regel SQL Profiler und CLR-Profiler mit manchen simulierten Benutzern auf einem groß ish Datensatz, und achten Sie auf Langlauf Abfragen und / oder Langlauf Anrufe über das Datacontext (welche mehrere bedeuten kann Rundreisen unter der Decke geschieht). Meine persönliche Präferenz ist auch verzögertes Laden zu deaktivieren und Objekt auf alle meine Datacontexts von Standard-Tracking, also muss ich Opt-In für mehrere Umläufe in den meisten Fällen. Sie können zwar nicht direkt die SQL beeinflussen kann, die erzeugt ist, können Sie mit Loadwith / AssociateWith und stellen Sie sicher, vorsichtig sein, dass Sie nicht schrecklich groß / ineffizient Ergebnismengen zu holen, und Abfragen brechen, die viel haben, teuer (manchmal mehrere Runde schließt sich -trips ist billiger als mondo auf große Tabellen verknüpft).

Es ist alles über Messungs nutzen alle Werkzeuge, die Sie Ihre Hände bekommen.

Beantwortet am 30/12/2009 um 04:22
quelle vom benutzer

stimmen
1

Profilieren, Profilieren, Profilerstellung. :)

Messen Sie nicht nur Timings, aber achten Sie auf I / O als auch. Eine häufig ausgeführte Abfrage, die I / O-intensive ist, kann aufgrund Caching schnell ausführen, aber wiederum einen negativen Effekt auf die Gesamt db-Server-Leistung können, da weniger Ressourcen für weitere Fragen zur Verfügung stehen wird.

Wie Sie sagen, kann L2S ein bisschen eine Blackbox sein, so müssen Sie versuchen, alle Szenarien zu replizieren und / oder Profil, während die App im Gebrauch von echten Benutzern ist. Verwenden Sie dann das zu 1) zwicken Abfragen 2) hinzufügen Indizes 3) weitere Änderungen vornehmen notwendig, um die Leistung, die Sie brauchen.

Ich habe ein Profilierungswerkzeug speziell für Linq-to-SQL machte es ein wenig ‚weniger Black Box‘ zu machen - es erlaubt Ihnen , Runtime - Profilierung zu tun , während die generierten Abfragen an den Code zu binden (Call - Stack) , die in einer bestimmten Abfrage ergab wird ausgeführt. Sie können es herunterladen und eine kostenlose Testlizenz erhalten http://www.huagati.com/L2SProfiler/

Der Hintergrund Grund für meinen Profiler ist in etwas mehr Detail hier beschrieben: http://huagati.blogspot.com/2009/06/profiling-linq-to-sql-applications.html

... und einige erweiterte Profilierungsmöglichkeiten sind hier abgedeckt: http://huagati.blogspot.com/2009/08/walkthrough-of-newest-filters-and.html


Eine andere Sache, die helfen können, wenn Sie eine Menge von Tabellen mit vielen Spalten ist indizieren Info in den Code-Editor zu erhalten. Dies wird durch Hinzufügen xml doc-Kommentare mit dieser Info an die Entitätsklassen und Elementeigenschaften getan; dass Informationen werden dann in dem VS-Code-Editor des Tooltips angezeigt:

Code-Editor Tooltips xml DocComments für L2S Entitätsklassen zeigt, Elementeigenschaften usw.

... auf diese Weise Sie bereits sehen können , während Abfragen eingeben , wenn ein Index ist die Spalte abdeckt (n) verwendet , in denen Klauseln usw. Um zu vermeiden , dass alle in den Typ, ich habe ein Werkzeug für das auch erstellt. Siehe ‚Update - Dokumentation‘ -Funktion in http://www.huagati.com/dbmltools/

Beantwortet am 30/12/2009 um 04:38
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more