Wissen

Praxis-Artikel und Buchkapitel zu SQL-Performance, Sicherheit und Hochverfügbarkeit – alle frei verfügbar.

Beratung

Festpreis-Analyse mit Bericht und Handlungsempfehlung – oder strategische Begleitung bei Architektur, Migration und Hochverfügbarkeit.

Fachbücher

Die fünfbändige Reihe „Ulis SQL-Bibliothek“ – Band 1 verfügbar. Leseprobe herunterladen!

Tools

UB.SimSQL: SQL-Server-Lastsimulator mit regelbasierten Konfigurationsempfehlungen. Lokal, ohne Cloud, ohne Abo.

Schulungen

Online-Workshops zu Performance, Sicherheit und Entwicklung – kompakt, hands-on, ohne MOC-Folienschlacht.

Collect-SqlPerf.ps1: – SQL Server Performance

von

Dieser Artikel ist ein Kapitel aus:
SQL Server Performance & Troubleshooting
Praxisleitfaden, ca. 600 Seiten

[ Hier bei Amazon bestellen ]
[ Mehr zum Buch ]

Collect-SqlPerf.ps1:

Das Sammel-Werkzeug des Autors — Beschreibung und Einsatzhinweise

Was ist Collect-SqlPerf.ps1?

Collect-SqlPerf.ps1 ist ein PowerShell-Script, das Ulrich B. Boddenberg für seine eigene Arbeit als IT-Consultant entwickelt hat. Seit 2018 wird es in Kundenprojekten eingesetzt, wenn es darum geht, den Gesundheitszustand eines SQL Servers schnell und strukturiert zu erfassen — ohne, dass man sich vorher durch ein halbes Dutzend DMV-Abfragen durchhangeln du dutzende Performance-Counter raussuchen muss.

Das Script ist kein Monitoring-Tool und kein dauerhaft laufender Agent. Es ist ein Sammel-Werkzeug für den gezielten Einsatz: Du fährst beim Kunden vor, startest das Script, und hast bald eine ausführliche Datensammlung zur Performance-Situation —für spätere Analysen.

 

Hinweis: Werkzeug statt Ersatz

Collect-SqlPerf.ps1 ist als Hilfsmittel gedacht, nicht als Ersatz für das Verständnis der zugrundeliegenden DMVs. Wer die DMVs aus Anhang E kennt und versteht, weiß auch, was das Script im Hintergrund macht — und kann den die erfassten Daten richtig interpretieren. Ein Tool das du nicht verstehst, kann dich auch in die falsche Richtung schicken.

 

Was erhebt das Script?

Das Script sammelt Konfigurationsdaten, fragt DMVs ab und misst Performance-Daten (Standard: drei Messungen im Abstand von je 60 Sekunden) für die folgenden Kennzahlen:

 

Bereich

Was wird erfasst

Wait Statistics

Top 20 nach kumulativer Wait-Zeit und nach aktuellen Delta-Waits zwischen den Snapshots

IO-Latenzen

Alle Datenbankdateien mit durchschnittlichen Lese- und Schreib-Latenzen aus sys.dm_io_virtual_file_stats

Memory

PLE (Page Life Expectancy), Buffer Pool-Nutzung, Memory Clerks nach Verbrauch

CPU

Compilations/sec, Batch Requests/sec, Signal Wait Ratio — die drei wichtigsten CPU-Indikatoren

Top Queries

Top 20 nach CPU-Verbrauch, nach logischen Reads und nach Ausführungsdauer (aus sys.dm_exec_query_stats)

Blocking

Blocking-Historie, wenn eine Extended Events Session aktiv ist; sonst aktuelle Blockierungen aus sys.dm_exec_requests

Index-Nutzung

Fehlende Indizes aus sys.dm_db_missing_index_details sowie ungenutzte Indizes nach sys.dm_db_index_usage_stats

Konfiguration

Relevante sp_configure-Einstellungen: Max Server Memory, MAXDOP, Cost Threshold, Priority Boost und weitere

Datenbankeinstellungen

Kompatibilitätslevel, Recovery Model, RCSI-Status, Auto-Close, Auto-Shrink für alle Datenbanken

Tabelle F.1: Erfasste Kennzahlen in Collect-SqlPerf.ps1

 

DSGVO-Konformität

Ein explizites Design-Ziel des Scripts ist die DSGVO-konforme Datenerfassung. Im Standard-Modus werden keine personenbezogenen Daten erhoben:

  • Keine Query-Texte — nur Query-Hashes als anonymisierte Kennungen
  • Keine Login-Namen — nur aggregierte Statistiken nach Session-Typ
  • Keine IP-Adressen oder Hostnamen von Client-Systemen
  • Keine Tabellen- oder Spaltennamen aus Benutzerdatenbanken
  • Nur technische Performance-Metadaten aus DMVs der Systemdatenbank
  •  

    Wer Query-Texte für die Analyse benötigt, kann per Parameter -IncludeQueryText das Opt-in aktivieren. Das Script gibt dann einen expliziten Datenschutzhinweis aus und verlangt eine manuelle Bestätigung — damit ist dokumentiert, dass die Entscheidung bewusst getroffen wurde.

     

    Tipp: Vor dem Einsatz beim Kunden

    Kläre vor dem ersten Einsatz kurz ab, ob der Kunde eine interne Richtlinie für Analyse-Tools hat. In vielen Unternehmen reicht es, den Standard-Modus (ohne Query-Texte) zu verwenden — das fällt unter normale Systemüberwachung. Mit Opt-in für Query-Texte empfiehlt sich eine kurze schriftliche Freigabe.

     

    Bezug und Installation

    Das Script ist auf Anfrage verfügbar. Kontakt: ulrich@boddenberg.de.

    Voraussetzungen

  • PowerShell 5.1 oder höher (Windows PowerShell oder PowerShell 7)
  • SQL Server 2016 oder höher (ältere Versionen fehlen bestimmte DMVs)
  • VIEW SERVER STATE Berechtigung auf dem Ziel-Server
  • Netzwerkzugang zum SQL Server (Named Pipes oder TCP/IP)
  •  

    Ausführung

    # Basis-Aufruf — Standard-Modus ohne Query-Texte
    .\Collect-SqlPerf.ps1 -Server "SERVERNAME" -Database "master"

     

    # Mit Windows-Authentifizierung (Standard)
    .\Collect-SqlPerf.ps1 -Server "SERVERNAME\INSTANZNAME"

     

    # Mit SQL-Authentifizierung
    .\Collect-SqlPerf.ps1 -Server "SERVERNAME" -User "sa" -Password "geheim"

     

    # Mit Opt-in für Query-Texte (verlangt manuelle Bestätigung)
    .\Collect-SqlPerf.ps1 -Server "SERVERNAME" -IncludeQueryText

     

    # Ausgabeverzeichnis angeben (Standard: aktuelles Verzeichnis)
    .\Collect-SqlPerf.ps1 -Server "SERVERNAME" -OutputPath "C:\Analyse\Kunde01"

     

    Die Ausgabe besteht aus einem HTML-Report (Collect-SqlPerf-SERVERNAME-DATUM.html) und mehreren CSV-Dateien für die Einzelbereiche. Die CSV-Dateien eignen sich für Trendanalysen — wenn du das Script über mehrere Wochen täglich laufen lässt, siehst du wie sich Wait-Muster und IO-Latenzen entwickeln.

    Typischer Einsatz in der Praxis

    Ein typischer Einsatz vor Ort beim Kunden läuft so ab:

  • Script starten, während es läuft: Gespräch mit dem DBA über bekannte Symptome und Geschichte des Servers
  • Erste Daten nach ca. 5-10 Minuten: grobe Übersicht über Wait Types und IO-Latenzen sichtbar
  • Weitere Daten sammeln: Delta-Waits zeigen was gerade aktiv passiert, nicht nur historische Akkumulation
  • Erfasste Daten analysieren
  • Auffälligkeiten notieren und mit den Kapiteln dieses Buchs in Verbindung bringen
  •  

    Das Script läuft typischerweise zwischen zehn Minuten und drei Stunden, je, nachdem welchen Zeitraum man betrachten möchte.

     

    Praxisbeispiel: Sparfuchs & Partner — das Script als Augenöffner

    Bei Sparfuchs (Kapitel 33) hat das Script in weniger als drei Minuten den zentralen Befund geliefert: 847 Autogrowth-Events in 120 Minuten, IO-Latenz p95 von 312 ms auf Schreibzugriffen, und PAGEIOLATCH_SH als dominanter Wait Type mit 61% Anteil. Ohne das Script hätte man das durch manuelle DMV-Abfragen herausarbeiten können — aber es hätte deutlich länger gedauert und die Zusammenhänge wären weniger sofort sichtbar gewesen.

     

    Zusammenfassung

    Collect-SqlPerf.ps1 ist ein pragmatisches Werkzeug für strukturierte SQL Server Performance-Analysen. Es erhebt die wichtigsten Kennzahlen aus DMVs, erfasst die Performance und prüft etliche Einstellungen. Und tut das DSGVO-konform ohne unnötige Datensammlung von Personendaten. Download und aktuelle Dokumentation: boddenberg.de