Was sind die drei wichtigsten Leistungsprobleme bei Ihren SQL-Servern?


15

Ich bin Student an der Fontys-Universität in Eindhoven und führe derzeit eine Reihe von Interviews durch, um bei der Entwicklung eines SQL Server-Tools zu helfen. Außerdem möchte ich Feedback von Experten auf diesem Gebiet erhalten.

Eine meiner Fragen ist:

Was sind die drei wichtigsten Leistungsprobleme, die bei Ihren SQL Server-Instanzen auftreten, und wie identifizieren Sie diese Probleme?

Insbesondere interessieren mich die Skripte und die Werkzeuge, mit denen dies gemessen wird.

Antworten:


22

Aus dem Häuschen - Top-3-Abfrageprobleme:

  • Implizite Konvertierungen
  • Schlechte Indizierungsstrategien (zu viele oder nicht genug oder die falsche Art)
  • Verwenden Sie SELECT *, anstatt nur die Felder zu benennen, die Sie benötigen

Bei Konfigurationsproblemen auf Serverebene, Datenbankschemaproblemen, Hardwareproblemen usw. geht es um viel mehr. Ich habe ein Skript geschrieben, um Server schnell auf diese Art von Problemen hin zu analysieren:

http://www.brentozar.com/blitz/


15
  • Schlechtes Design / Abfragen / Indizierung
  • Es ist nicht erlaubt, korrekte Hardware zu kaufen
  • Braindead ORMs (auch bekannt als "SQL ist tot")

14

Nicht die Top 3, aber ich dachte, ich würde Dinge erwähnen, die noch nicht erwähnt wurden:

  1. SQL für virtuelle Maschinen ohne Angabe von Details / Transparenz für den DBA. Der Host-Server ändert dynamisch die Einstellungen des Gastcomputers, was zu Leistungseinbußen führt und den DBA ohne Anhaltspunkt lässt. Features wie Hypertreading, Network Teaming und Memory Ballooning machen die Leistungsindikatoren zu einem beweglichen Ziel, das überwacht werden muss.Tools: sysmon/perfmon, DMVs, maintaining a history of performance counters in tables.
  2. Ebenso keine Transparenz / Überprüfbarkeit der dem DBA bereitgestellten SAN-Einstellungen. Ich habe LUNs mit unterschiedlichen Lese- / Schreib-Cache-Einstellungen eingerichtet, habe aber festgestellt, dass sie alle gleich sind.Tools: IO DMVs, SQLIO.
  3. Schlechte DB-Architektur: wie Dimensionierung und Platzierung der Daten- und Protokolldateien und Tempdb. Unsachgemäße Verwendung von Parallelität. Erstellen mehrerer Dateigruppen auf denselben physischen Datenträgern.Tools: experience.

Ein weiteres Tool, das ich gerade auschecke, ist Project Lucy . Scheint ordentlich.


10
  • Fehlen geeigneter Indizes
  • Verwendung von with nolock im Produktionscode durch jemanden, der versucht, Leistungsprobleme zu lösen. Besonders schlecht, wenn der Code Daten in Tabellen ändert
  • Anwendung, die mehr Daten auswählt als benötigt, und zwar mehr als erforderlich. Es wird immer eine Binärdatei zurückgegeben, auch wenn Sie nur die Textdaten derselben Tabelle benötigen.

2
+1 für die Nolock Erwähnung. Jeder Entwickler, den ich kenne, hält es für eine gute Idee, es zu verwenden, weil "es die Tabelle nicht in Lesungen
sperrt

Hassen Sie es nicht einfach, wenn ein Kunde von Ihnen DIESES riesige System für viel Geld gekauft hat und es zum ersten Mal mit Nolock überall verwendet? Und dann ...: - /
Martin Sjöberg

9

Abfragen, die schlecht skaliert sind (alle Bestellungen für X Jahre für alle Kunden usw., einschließlich aller Bestellposten, einschließlich summierter Daten und anderer schlecht berechneter Durchschnittsdaten)

Einfach alles auf einmal abfragen.

Tabellen, die "beschreibende" Varchar- / Textfelder enthalten, die bei jeder Abfrage durchsucht werden müssen.


7
  • Unsachgemäße Wartung, dh keine Index-Reorgs, Statistiken, keine Log-Backups
  • Fehlende Indizes
  • Schlecht geschriebene Anfragen

7
  • Schlechtes Datenbank- und Anwendungsdesign
  • Schlechte Nutzung der Plattformvorteile (Entwickler wollten plattformunabhängigen Datenbankzugriffscode. Keine SPs, keine Funktionen usw.)
  • Natürlich schlechte Indizierung.

7
  • Ad-hoc-Abfragen zu Produktdaten - ja, Entwickler glauben, dass dies notwendig ist, und einige haben möglicherweise sogar Zugriff :-)
  • Schlechtes Design der App, die die Datenbank verwendet - z. B. zu viele Daten hinzugefügt und nie entfernt, auch wenn sie nicht mehr benötigt werden (was zu Leistungsproblemen führt, da die Backups größer werden, Wartungsaufgaben länger dauern usw.)
  • Alle Datenbankdateien auf demselben oder einem schlechteren RAID auf demselben Laufwerk (z. B .: System-DBS, TempDB, Benutzer-DBS alle zusammen auf demselben Laufwerk / RAID)

3
  • Schlechtes Datenbankdesign
  • Schlechte Indexierungsstrategie (einschließlich zu vieler Indizes, fehlender Indizes und mangelnder Indexpflege)
  • Schlechte Hardware-Architekturentscheidungen

2

Die Indizierung ist für die Leistung von entscheidender Bedeutung, aber ich habe festgestellt, dass die meisten Datenbankadministratoren dies wissen. Daher ist sie in der Regel eines der ersten Dinge, die durch die Abfrageoptimierung behoben werden. Die Bereiche, die oft nicht gut angesprochen werden:

  1. Zu viele DB-Hin- und Rückfahrten. Gesprächigkeit ist eines der Hauptprobleme bei der Leistung, die ich sehe.
  2. Die richtigen Transaktionsgrenzen finden. Das Durchführen von Transaktionen mit INSERT / UPDATE / DELETE kann ein großer Leistungskiller sein.
  3. Fehler beim Optimieren der Hardwareseite; Insbesondere, wenn das DB-Protokoll auf einem anderen Datenträger als die DB-Daten abgelegt wird.

Wenn ich der Liste ein viertes Element hinzufügen könnte, wäre dies eine übermäßige und unangemessene Verwendung von Triggern und / oder Cursorn. Scheint heutzutage nicht zu viel zu passieren, aber wenn doch, ist es aus Sicht der Leistung schmerzhaft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.