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