
Einführung inLeistungsoptimierung für SQL Server
Techniken zur Verbesserung der SQL Server-Leistung
Abfrageoptimierung (Query optimization) ist eine kritische Technik zur Verbesserung der SQL Server-Leistung. Die Optimierung von SQL-Abfragen umfasst die Identifizierung der effizientesten und effektivsten Methoden zur Verbesserung der Abfrageleistung. Es gibt verschiedene Strategien zur Abfrageoptimierung, die eingesetzt werden können, um dieses Ziel zu erreichen. Ein gängiger Ansatz ist die Erstellung geeigneter Indizes für Spalten, die in WHERE-, JOIN- und ORDER BY-Klauseln verwendet werden, um den Datenabruf zu beschleunigen. Darüber hinaus kann auch die Auswahl nur der erforderlichen Felder anstelle der Verwendung von SELECT * und die Vermeidung der Verwendung von DISTINCT in SELECT-Anweisungen zur Optimierung der Abfrageleistung beitragen. Durch den Einsatz dieser Techniken können SQL Server-Benutzer die Geschwindigkeit und Effizienz ihrer Abfragen erheblich verbessern, was zu einer besseren Gesamtleistung führt.
Indizierung (Indexing) ist eine weitere wichtige Technik zur Verbesserung der SQL Server-Leistung. SQL Server-Indizes tragen zur Beschleunigung des Datenabrufs bei, indem sie eine schnellere Möglichkeit bieten, Daten innerhalb einer Tabelle zu lokalisieren. Es gibt verschiedene Best Practices für die Indizierung in SQL Server, wie z.B. die Erstellung relevanter Indizes und die Vermeidung von Über-Indizierung. Darüber hinaus können Performance-Tuning-Tools verwendet werden, um Indizierungsprobleme zu identifizieren und zu beheben, wie z.B. die Empfehlung zur Erstellung neuer Indizes oder zur Entfernung nicht benötigter Indizes. Durch die ordnungsgemäße Implementierung von Indizierungstechniken können SQL Server-Benutzer sicherstellen, dass ihre Datenbanken auf höchstem Leistungsniveau laufen.
Serverkonfiguration ist ebenfalls ein kritischer Faktor beim SQL Server Performance Tuning. Die ordnungsgemäße Konfiguration der SQL Server-Instanz und der Hardware kann dazu beitragen, dass der Server effizient und effektiv läuft. Beispielsweise kann die Konfiguration der Speichereinstellungen und der Prozessoraffinität des Servers zur Leistungsoptimierung beitragen. Darüber hinaus können Überwachungs- und Performance-Tuning-Aufgaben helfen, Leistungsprobleme wie Engpässe oder Probleme mit der Datenbankleistung zu identifizieren und zu isolieren. Durch die Befolgung von Best Practices für die Serverkonfiguration und -überwachung können SQL Server-Benutzer die Leistung ihres Servers optimieren und sicherstellen, dass er mit maximaler Effizienz läuft.
Datenbank perf_querystore

Datenbank perf_neartime
Die Datenbank sammelt Echtzeitdaten, indem sie Systemaktivitäten erfasst und in verschiedenen Tabellen speichert. Diese Daten werden alle 5 Minuten gespeichert, um eine aktuelle Aufzeichnung der Systemleistung zu gewährleisten. Der Prozess der Datenspeicherung wird durch einen Job namens "Performance_Neartime" initiiert, der eine gespeicherte Prozedur namens "StorePerformanceData" ausführt. Dieser Job und die gespeicherte Prozedur arbeiten zusammen, um die erforderlichen Informationen aus dem System abzurufen und in den entsprechenden Tabellen innerhalb der Datenbank zu speichern.
Die gesammelten Daten bieten wertvolle Einblicke in die Leistung des Systems und ermöglichen es den Benutzern, verschiedene Aspekte der Systemaktivitäten zu analysieren und zu überwachen. Durch das Sammeln von Daten in regelmäßigen Abständen können Änderungen verfolgt und Trends im Laufe der Zeit identifiziert werden. Diese Informationen sind für Systemadministratoren und Analysten von entscheidender Bedeutung, um die Systemleistung zu optimieren, Probleme zu beheben und fundierte Entscheidungen bezüglich der Ressourcenzuweisung und Systemkonfiguration zu treffen.
Die erfassten Daten umfassen Serverinformationen wie Servername, Version, Anmeldezeit und Sitzungsdetails. Sie erfassen auch aktive Anforderungen, Ausführungspläne, Datenbankgrößen, blockierende Sitzungen, Workload-Gruppenstatistiken, verbundene Benutzer, Seiten-Zuweisungs- und -Freigabeaktivitäten, Speicherzuweisungen, ausgeführte Abfragen, den Status des Ressourcenpools, offene Transaktionen, den Wartestatus, geplante Jobs und die aktuelle Speichernutzung. Jede dieser Tabellen enthält spezifische Spalten, die relevante Informationen zur jeweiligen Datenkategorie enthalten.
SQL Server Verbindungsfluss

(including internal SQL Server sessions
that have no connection)SELECT *
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_connections c
ON s.session_id = c.session_id;
system sessionsSELECT *
FROM sys.dm_exec_sessions;
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_connections c
ON s.session_id = c.session_id
LEFT JOIN sys.dm_exec_requests r
ON s.session_id = r.session_id
ORDER BY s.session_id;
- Verbindung (Connection) ist der physische Kommunikationskanal und Sitzung (Session) ist ein Zustand des Informationsaustauschs. Eine Verbindung kann mehrere Sitzungen haben. Eine Anforderung ist lediglich die Anfrage an den Server nach irgendeiner Art von Ressource. Sie können eine Ressource anfordern, sobald eine Sitzung zwischen Ihnen und dem Server hergestellt wurde.
Die DMV sys.dm_exec_sessions umfasst sowohl Benutzersitzungen als auch interne SQL Server-Sitzungen, die zum Ausführen von Hintergrundaufgaben verwendet werden.
sys.dm_exec_connections enthält zusätzliche Informationen zu Sitzungen, die von externen Clients eingerichtet wurden, einschließlich Protokolldetails.
sys.dm_exec_requests enthält Informationen über aktive SQL Server-Anforderungen (z. B. ausführende Abfragen).
Zugeordnete Speicheransicht

Bietet detailliertere Informationen über die Top-20-Speicherzuweisungen und die Nutzung spezifischer Datenbankabfragen, zusammen mit zusätzlichen Feldern für Datenverwaltungszwecke.
Quelltabellen der Datenbank perf_querystore, aus denen Daten bezogen werden:
- perfsys.dm_exec_sessions – liefert Informationen über alle aktiven Benutzerverbindungen und internen Aufgaben. Dies umfasst Client-Informationen wie Anwendungs- und Hostnamen, Sicherheitseinstellungen, Konfigurationseinstellungen und andere sitzungsspezifische Daten.
- perfsys.dm_exec_requests – liefert Informationen über jede Anforderung, die innerhalb von SQL Server ausgeführt wird. Dies schließt Anforderungen von Benutzersitzungen, Systemsitzungen und internen Prozessen ein.
- perfsys.dm_exec_query_memory_grants – liefert Informationen über alle Abfragen, die eine Speicherzuweisung angefordert haben und darauf warten oder eine Speicherzuweisung erhalten haben.
- perfsys.dm_exec_sql_text – Informationen zum Text der SQL-Abfrage anhand des sql_handle der Abfrage.
- dbo.tbl_query_store_plan_handle – stellt den Bezeichner für den Speicherort dar, an dem der tatsächliche Ausführungsplan für eine bestimmte Abfrage gespeichert ist.
Performance Tuning Übersicht Gesamtdatenbank perf_neartime

Performance Tuning Übersicht Gesamtdatenbank perf_querystore

Das Skript WhoTheFuckIsWrong.sql ist ein leistungsfähiges Tool zur Leistungsanalyse von SQL Server.
Mit dem Skript WhoTheFuckIsWrong.sql können Sie einfach und in Echtzeit überprüfen, welche problematischen Abfragen auf dem SQL Server laufen.
Als Ergebnis der Ausführung dieses Skripts sehen Sie alle Metriken, um problematische Abfragen zu identifizieren, die die meisten Ressourcen des SQL Servers beanspruchen.
Einige der wichtigsten Metriken, die Sie in den Ergebnissen der Ausführung von WhoTheFuckIsWrong.sql analysieren können:
- Granted memory (Zugewiesener Speicher) – dem Server für die Abfrage zugewiesener Speicher
- Used memory (Verwendeter Speicher) – tatsächlich verwendeter Speicher während der Abfrageausführung
- Reads (Lesevorgänge) – Anzahl der von der Abfrage durchgeführten Lesevorgänge
- Writes (Schreibvorgänge) – Anzahl der von der Abfrage durchgeführten Schreibvorgänge
- CPU time (CPU-Zeit) – zeigt in Millisekunden an, wie lange die CPU durch die Abfrage ausgelastet war
- Total elapsed time (Gesamte verstrichene Zeit) - zeigt die Dauer der Abfrageausführung in Millisekunden an
- SQL Statement (SQL-Anweisung) – ist der SQL-Text der Abfrage
- SQL Plan (SQL-Plan) – zeigt den Ausführungsplan der Abfrage an
Sie können auch sehen, von welchem Server und welcher Anwendung die Abfrage gestartet wurde und welcher Benutzer die Abfrage ausgeführt hat.
Das Skript WhoTheFuckIsWrong.sql ist ein leistungsstarkes Tool zur Leistungsanalyse auf dem SQL Server.
Optimierung der Abfrageleistung für bessere Ergebnisse
SQL Server Performance Tuning
SQL Server ist ein leistungsstarkes Datenbankverwaltungssystem, das von Unternehmen und Organisationen verwendet wird, um große Datenmengen zu speichern und abzurufen. Wenn jedoch die Größe der Datenbanken und die Komplexität der Abfragen zunehmen, können Leistungsprobleme auftreten, die zu einer langsamen Abfrageausführung und verringerter Produktivität führen. Um diese Herausforderungen zu bewältigen, ist es unerlässlich, SQL-Abfragen zu optimieren und die Abfrageleistung zu verbessern. In diesem Artikel untersuchen wir effektive Tipps und Techniken zur Optimierung von SQL-Abfragen, um die Leistung Ihrer SQL Server-Datenbank zu steigern.
Grundlagen der Abfrageoptimierung verstehen
Die Abfrageoptimierung ist ein kritischer Prozess, der darauf abzielt, die Leistung von SQL-Abfragen zu verbessern, indem Systemressourcen effizient genutzt und Leistungsmetriken optimiert werden. Das Ziel des Query Tunings ist es, die Antwortzeit zu reduzieren, den Ressourcenverbrauch zu minimieren und eine schlechte Abfrageleistung zu identifizieren und zu beheben. Durch die Analyse der Ausführungsschritte einer Abfrage, die Anwendung von Optimierungstechniken und die Berücksichtigung anderer Faktoren wie Indizes und Ausführungspläne können Sie die Leistung Ihrer SQL Server-Abfragen erheblich steigern.
SQL Server Performance Tuning ist ein komplexer und mühsamer Prozess. Vertrauen Sie diese Arbeit Profis an.
Gerne unterstütze ich Sie bei der Optimierung und Einrichtung der Datenbank Ihres Unternehmens.
Rufen Sie einfach unter +41 (0)56 511 60 17 an oder kontaktieren Sie mich auf jedem für Sie bequemen Weg.

























































































































