Automatisierte Gesundheitspruefung - von MaxMemory bis Orphaned Files
# Einzelne Instanz
Get-sqmDatabaseHealth -ComputerName "SRV-SQL01"
# Gesamtflotte per AD-OU
Get-sqmDatabaseHealth -Remote \`
-SearchOU "OU=DB,DC=corp,DC=de"
# HTML-Report oeffnen
Get-sqmDatabaseHealth -ComputerName "SRV-SQL01" \`
-OutputFormat HTML
Test-sqmMaxMemory -ComputerName "SRV-SQL01"
RecommendedMB : 12288
CurrentMB : 2147483647
Status : WARN
Message : Kein Limit gesetzt
Empfehlung: RAM minus 2 GB fuer OS, bei NUMA pro Node berechnet
Test-sqmMaxDop -ComputerName "SRV-SQL01"
RecommendedDop : 4
CurrentDop : 0
NUMANodes : 2
LogicalCores : 16
Status : WARN
Berechnet nach Microsoft Best Practice (Kerne / NUMA, max. 8)
# Dateianzahl vs. CPU-Kerne pruefen
Test-sqmTempDbFileCount -ComputerName "SRV-SQL01"
# Empfehlung + Skript generieren
Get-sqmTempDbRecommendation -ComputerName "SRV-SQL01"
Test-sqmCostThreshold -ComputerName "SRV-SQL01"
CurrentValue : 5
RecommendedValue : 50
Status : WARN
Message : Wert zu niedrig
Cost Threshold steuert, ab welchen Plankosten SQL Server parallele Ausfuehrung einsetzt.
Wert 5: Fast jede komplexe Query laeuft parallel → hohe CPU-Last
Wert 50: Nur wirklich aufwendige Queries nutzen Parallelismus
# Alle Datenbanken einer Instanz
Invoke-sqmUpdateStatistics -ComputerName "SRV-SQL01"
# Nur bestimmte DBs
Invoke-sqmUpdateStatistics -ComputerName "SRV-SQL01" \`
-DatabaseList "AdventureWorks","Sales"
UPDATE STATISTICS WITH FULLSCAN - loggt Dauer pro DB
# WhatIf - zeigt was verkleinert wuerde
Invoke-sqmLogShrink -ComputerName "SRV-SQL01" -WhatIf
# Mit Mindestgroesse
Invoke-sqmLogShrink -ComputerName "SRV-SQL01" \`
-MinShrinkMB 500
Shrink nur bei Full-Backup-Modell + freiem Log-Space
Get-sqmOrphanedFiles -ComputerName "SRV-SQL01"
FilePath : D:\MSSQL\DATA\OldDB.mdf
SizeGB : 24.5
LastWrite : 2025-03-15
Status : Orphaned
Find-sqmDatabaseObject -ComputerName "SRV-SQL01" \`
-ObjectName "sp_GetKunden"
# Mit Typ-Filter
Find-sqmDatabaseObject -ComputerName "SRV-SQL01" \`
-ObjectName "tbl_Orders%" \`
-ObjectType "TABLE"
# Gesamte Flotte per AD-OU
Get-sqmDatabaseHealth -Remote \`
-SearchOU "OU=SQLServer,DC=corp,DC=de" -OutputFormat HTML
# CSV-Export fuer alle Server
Get-Content "server-liste.txt" | ForEach-Object {
Get-sqmDatabaseHealth -ComputerName $_ -OutputFormat CSV
} | Export-Csv "health-report.csv"
CIM-Sessions parallel - 50 Server in unter 2 Minuten
Alle Checks als flache Tabelle fuer Excel oder SIEM
Farb-codierter Report, oeffnet direkt im Browser
| Funktion | Kategorie | Beschreibung | Remote |
|---|---|---|---|
| Get-sqmDatabaseHealth | Report | Gesamtbericht aller Health-Checks | Ja |
| Test-sqmMaxMemory | Config | MaxMemory-Empfehlung vs. aktuell | Ja |
| Test-sqmMaxDop | Config | MaxDop-Empfehlung nach Best Practice | Ja |
| Test-sqmCostThreshold | Config | Cost Threshold for Parallelism pruefen | Ja |
| Test-sqmTempDbFileCount | TempDB | Dateianzahl vs. CPU-Kerne | Ja |
| Get-sqmTempDbRecommendation | TempDB | Empfehlung + Skript generieren | Ja |
| Invoke-sqmUpdateStatistics | Wartung | Statistiken aktualisieren (FULLSCAN) | Ja |
| Invoke-sqmLogShrink | Wartung | Transaction Logs sicher verkleinern | Ja |
| Get-sqmOrphanedFiles | Dateien | Verwaiste DB-Dateien aufspueren | Ja |
| Find-sqmDatabaseObject | Suche | Objekte in allen Datenbanken finden | Ja |