Was kann die SQL Server-Leistung beeinträchtigen?

7

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?

    
pang 10.08.2009, 01:23
quelle

5 Antworten

20
  • Ineffizienter Abfrageentwurf
  • Automatisch wachsende Dateien
  • Zu viele zu wartende Indizes in einer Tabelle
  • Zu wenige Indizes für eine Tabelle
  • Ihren gruppierten Index nicht richtig auswählen
  • Indexfragmentierung aufgrund schlechter Wartung
  • Heap-Fragmentierung aufgrund von keinem Clustered-Index
  • Zu hohe FILLFACTORs, die für Indizes verwendet werden, verursachen übermäßige Seitenaufteilung
  • Zu wenig FILLFACTOR für Indizes, was zu übermäßigem Speicherplatzverbrauch und erhöhter Scanzeit führt
  • Gegebenenfalls keine gedeckten Indizes verwenden
  • Nichtselektive Indizes werden verwendet
  • Unsachgemäße Pflege von Statistiken (veraltete Statistiken)
  • Datenbanken sind nicht ordnungsgemäß normalisiert
  • Transaktionsprotokolle und Daten, die sich die gleichen Laufwerkspindeln teilen
  • Die falsche Speicherkonfiguration
  • Zu wenig Speicher
  • Zu wenig CPU
  • Langsame Festplatten
  • Fehlgeschlagene Festplatten oder andere Hardware
  • Ein 3D-Bildschirmschoner auf Ihrem Datenbankserver, der Ihre CPU in Mitleidenschaft zieht
  • Den Datenbankserver mit anderen Prozessen teilen, die um CPU und Speicher konkurrieren
  • Sperrung zwischen Abfragen sperren
  • Abfragen, die ganze große Tabellen scannen
  • Front-End-Code, der Daten ineffizient sucht (verschachtelte Schleifen, Zeile für Zeile)
  • CURSORS, die nicht notwendig sind und / oder nicht FAST_FORWARD
  • sind
  • NOCOUNT wird nicht gesetzt, wenn große Tabellen durchsucht werden.
  • Verwenden einer Transaktionsisolationsstufe, die zu hoch ist (z. B. Verwenden von SERIALIZABLE, wenn dies nicht erforderlich ist)
  • Zu viele Rundreisen zwischen dem Client und dem SQL Server (eine gesprächige Schnittstelle)
  • Eine unnötige verknüpfte Serverabfrage
  • Eine Verbindungsserverabfrage, die auf eine Tabelle auf einem Remote-Server abzielt, ohne dass ein Primär- oder Kandidatentaste definiert ist
  • Zu viele Daten auswählen
  • Übermäßige erneute Kompilierung von Abfragen

oh und da könnten noch andere sein.

    
Dave Markle 10.08.2009, 01:38
quelle
2

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.

    
JBrooks 10.08.2009 02:19
quelle
0

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 ...

    
Spence 10.08.2009 02:01
quelle
0

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.

    
HLGEM 10.08.2009 15:03
quelle
0

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

  1. Nachverfolgen problematischer Seitenaufteilungen in erweiterten Ereignissen von SQL Server 2012 - Jonathan Kehayias
  2. Tracking-Seite teilt sich das Transaktionsprotokoll - Paul Randal

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

  
  1. Separate Tabellen in Joins zu verschiedenen Festplatten (für parallele Festplatten-E / A - Dateigruppen).
  2.   
  3. Vermeiden Sie Joins in Spalten mit wenigen eindeutigen Werten.
  4.   

Um JOIN zu verstehen, lesen Sie Advanced JOIN Techniques

    
Lijo 26.09.2016 15:18
quelle

Tags und Links