Jedes Mal stelle ich fest, dass die Datenwiederherstellung in meiner Datenbank nur langsam abläuft. Ich versuche herauszufinden, welcher Teil meiner SQL-Abfrage das Problem hat, und ich versuche, es zu optimieren, und füge auch einige Indizes zur Tabelle hinzu. Aber das löst das Problem nicht immer.
Meine Frage ist:
Gibt es noch andere Tricks, um die SQL Server-Leistung zu verbessern?
Was ist der andere Grund, der die SQL Server-Leistung verschlechtern kann?
oh und da könnten noch andere sein.
Wenn ich mit neuen Entwicklern spreche, die dieses Problem haben, finde ich normalerweise, dass es an einem der zwei Probleme liegt. Beide sind behoben, wenn Sie diese 2 Regeln befolgen.
Zunächst sollten Sie keine Daten abrufen, die Sie nicht benötigen. Wenn Sie beispielsweise einen Paging-Vorgang ausführen, sollten Sie nicht 100 Zeilen zurückgeben und dann berechnen, welche auf der Seite enthalten sind. Lassen Sie den gespeicherten Prozess herausfinden, dass er nur die 10 benötigt, die Sie benötigen.
Zweitens ist nichts schneller als Arbeit, die Sie nicht tun. Ich habe zum Beispiel an einem System gearbeitet, auf dem die vollständigen Rollen und Rechte für einen Benutzer mit jeder angeforderten Seite abgerufen wurden - das waren 100 Zeilen für einige Benutzer. Auch wenn Sie dies nur bei der ersten Anfrage in den Sitzungszustand speichern und dann von dort aus für nachfolgende Anfragen verwenden, nahm dies ein bedeutungsvolles Gewicht von der Datenbank.
Wenn Sie neu in der Datenbank sind und Zugriff auf den Datenbankmodul-Optimierungsratgeber haben, können Sie Ihre Datenbank heuristisch optimieren.
Sie erfassen grundsätzlich die SQL-Abfragen, die im SQL Profiler für Ihre Datenbank ausgeführt werden, und leiten diese dann an DETA weiter. DETA führt die Abfragen effektiv aus (ohne die Daten zu ändern) und ermittelt dann, welche Informationen in Ihrer Datenbank fehlen (Sichten, Indizes, Partitionen, Statistiken usw.), um die Abfragen besser durchzuführen.
Es kann sie dann für Sie anwenden und sie in Zukunft überwachen. Ich sage nicht, dass DETA immer recht hat oder Dinge ohne Verständnis tut, aber ich habe festgestellt, dass es definitiv ein guter Weg ist, um zu sehen, was Ihre Abfragen machen, wie lange sie dauern und wie Sie die DB indizieren können passend.
PS: Nach all dem ist es viel besser, zu Beginn eines Projekts in einen guten DBA zu investieren, damit Sie zunächst über gute Strukturen und Indexierung verfügen. Aber das ist nicht die Position, in der du dich gerade befindest ...
Schlagen Sie vor, Sie erhalten ein gutes Buch über Performance-Tuning für die von Ihnen verwendete Datenbank (dies ist sehr datenbankspezifisch). Dies ist ein sehr komplexes Thema und kann nicht wirklich anders beantwortet werden als im Internet.
Zum Beispiel sagt Dave Markle, dass ineffiziente Abfragen das Problem verursachen können und es gibt viele Möglichkeiten, ineffiziente Abfragen zu schreiben und viele weitere Möglichkeiten, diese zu beheben.
Das ist eine sehr weite Frage. Und es gibt schon eine Menge Antworten. Trotzdem möchte ich einen wichtigen Faktor hinzufügen - Page Split
. Das Problem ist - es gibt gute Splits und schlechte Splits. Im Folgenden finden Sie gute Artikel, die erklären, wie Sie das erweiterte Ereignis transaction_log
zum Identifizieren von Schlechten / Schlechten Seitenaufteilungen verwenden können
Sie haben erwähnt:
Ich versuche es zu optimieren und füge auch einige Indizes hinzu
Aber manchmal hilft das Entfernen nicht verwendeter nicht gruppierter Indizes, um die Leistung zu verbessern, da sie dabei hilft, Transaktionsprotokolle zu reduzieren. Lesen Sie Hauptgründe für Probleme bei der Protokollleistung
Warte Statistiken, oder bitte sag mir wo es tut weh gibt eine Idee über die Verwendung von Wartestatistiken für die Leistungsanalyse.
Um einige neue Ideen für die Leistung zu sehen, werfen Sie einen Blick auf Überlegungen zur Leistung - sqlmag.com
- Separate Tabellen in Joins zu verschiedenen Festplatten (für parallele Festplatten-E / A - Dateigruppen).
- Vermeiden Sie Joins in Spalten mit wenigen eindeutigen Werten.
Um JOIN
zu verstehen, lesen Sie Advanced JOIN Techniques
Tags und Links sql-server performance