sqmSQLTool v1.4

Database Health
& Best Practices

Automatisierte Gesundheitspruefung - von MaxMemory bis Orphaned Files

10
Health-Funktionen
<5min
vollstaendiger Check
100%
PowerShell-nativ
Database Health Summary - SRV-SQL01
MaxMemory : OK (12 GB / 16 GB verfuegbar)
MaxDop : WARN (0 statt 4 empfohlen)
TempDB : OK (4 Dateien, gleichgross)
Statistics : OK (letzte Aktualisierung: heute)
Problem

SQL Server-Defaults sind selten optimal

MaxMemory = 2147483647 MB
SQL Server belegt unbegrenzt RAM - OS hungert
MaxDop = 0
Unkontrollierter Parallelismus auf vielen Kernen
TempDB = 1 Datei
Contention bei hoher Auslastung
Statistiken veraltet
Suboptimale Ausfuehrungsplaene, langsame Queries
Logs unkontrolliert gewachsen
LDF-Dateien fuellen Laufwerke
Verwaiste MDF/NDF-Dateien
Speicher verschwendet, Sicherheitsrisiko
sqmSQLTool prueft alle diese Punkte automatisch - auf beliebig vielen Instanzen gleichzeitig
Ueberblick

10 Funktionen in 4 Kategorien

⚙ Instanz-Konfiguration

  • Test-sqmMaxMemory
  • Test-sqmMaxDop
  • Test-sqmCostThreshold
  • Test-sqmTempDbFileCount
  • Get-sqmTempDbRecommendation

📊 Datenbank-Wartung

  • Invoke-sqmUpdateStatistics
  • Invoke-sqmLogShrink

🔍 Datei-Analyse

  • Get-sqmOrphanedFiles
  • Find-sqmDatabaseObject

📋 Gesamtbericht

  • Get-sqmDatabaseHealth (HTML/CSV/TXT)
Health Report

Get-sqmDatabaseHealth

# 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
✓ Oeffnet Browser automatisch | Farb-codiert OK / WARN / ERROR
Database Health Report - SRV-SQL01
█ Konfiguration
MaxMemory : OK (12 GB)
MaxDop : WARN (0)
CostThreshold : OK (50)
█ TempDB
Dateien : OK (4)
█ Wartung
Statistiken : OK (aktuell)
Log-Groesse : WARN (SalesDB 8 GB)
Konfiguration

MaxMemory & MaxDop korrekt setzen

Test-sqmMaxMemory

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

Test-sqmMaxDop -ComputerName "SRV-SQL01"

RecommendedDop : 4
CurrentDop     : 0
NUMANodes      : 2
LogicalCores   : 16
Status         : WARN

Berechnet nach Microsoft Best Practice (Kerne / NUMA, max. 8)

TempDB

TempDB-Konfiguration optimieren

# Dateianzahl vs. CPU-Kerne pruefen
Test-sqmTempDbFileCount -ComputerName "SRV-SQL01"

# Empfehlung + Skript generieren
Get-sqmTempDbRecommendation -ComputerName "SRV-SQL01"
Faustregel: 1 Datei pro logischem Kern, max. 8. Alle Dateien gleich gross.
TempDB Recommendation
LogicalCores : 8
CurrentFiles : 1
RecommendedFiles : 8
CurrentSizeMB : 8
RecommendedSizeMB: 1024
AutogrowthEqual : True
ALTER DATABASE tempdb ADD FILE ...
Konfiguration

Test-sqmCostThreshold

Test-sqmCostThreshold -ComputerName "SRV-SQL01"

CurrentValue     : 5
RecommendedValue : 50
Status           : WARN
Message          : Wert zu niedrig
Standard ist 5 - seit SQL Server 7.0 unveraendert. Empfehlung: 50.

Warum ist das wichtig?

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

Wartung

Statistiken & Transaction Log

Invoke-sqmUpdateStatistics

# 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

Invoke-sqmLogShrink

# 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

Datei-Analyse

Orphaned Files & Objekte finden

Get-sqmOrphanedFiles

Get-sqmOrphanedFiles -ComputerName "SRV-SQL01"

FilePath  : D:\MSSQL\DATA\OldDB.mdf
SizeGB    : 24.5
LastWrite : 2025-03-15
Status    : Orphaned
Nie loeschen ohne Rueckfrage - WhatIf immer zuerst

Find-sqmDatabaseObject

Find-sqmDatabaseObject -ComputerName "SRV-SQL01" \`
  -ObjectName "sp_GetKunden"

# Mit Typ-Filter
Find-sqmDatabaseObject -ComputerName "SRV-SQL01" \`
  -ObjectName "tbl_Orders%" \`
  -ObjectType "TABLE"
Skalierung

Fleet-weite Gesundheitspruefung

# 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"

🔄 Parallel

CIM-Sessions parallel - 50 Server in unter 2 Minuten

📄 CSV-Export

Alle Checks als flache Tabelle fuer Excel oder SIEM

📊 HTML-Dashboard

Farb-codierter Report, oeffnet direkt im Browser

Referenz

Quick Reference

FunktionKategorieBeschreibungRemote
Get-sqmDatabaseHealthReportGesamtbericht aller Health-ChecksJa
Test-sqmMaxMemoryConfigMaxMemory-Empfehlung vs. aktuellJa
Test-sqmMaxDopConfigMaxDop-Empfehlung nach Best PracticeJa
Test-sqmCostThresholdConfigCost Threshold for Parallelism pruefenJa
Test-sqmTempDbFileCountTempDBDateianzahl vs. CPU-KerneJa
Get-sqmTempDbRecommendationTempDBEmpfehlung + Skript generierenJa
Invoke-sqmUpdateStatisticsWartungStatistiken aktualisieren (FULLSCAN)Ja
Invoke-sqmLogShrinkWartungTransaction Logs sicher verkleinernJa
Get-sqmOrphanedFilesDateienVerwaiste DB-Dateien aufspuerenJa
Find-sqmDatabaseObjectSucheObjekte in allen Datenbanken findenJa
Zusammenfassung

Database Health auf Knopfdruck

10
Health-Checks automatisiert
<5min
fuer vollstaendigen Health-Report
WhatIf-Modus fuer alle Aenderungen
✓ Instanz-Konfiguration pruefen (Memory, DOP, CostThreshold)
✓ TempDB nach Best Practice konfigurieren
✓ Statistiken und Transaction Logs warten
✓ Verwaiste Dateien aufspueren und bereinigen
✓ Objekte in beliebigen Datenbanken suchen
✓ Fleet-weite Auswertung per AD-OU
GitHub: JankeUwe/sqmSQLTool
t-block">
<5min
fuer vollstaendigen Health-Report
WhatIf-Modus fuer alle Aenderungen
✓ Instanz-Konfiguration pruefen (Memory, DOP, CostThreshold)
✓ TempDB nach Best Practice konfigurieren
✓ Statistiken und Logs warten
✓ Verwaiste Dateien aufspueren und bereinigen
✓ Objekte in beliebigen Datenbanken suchen
✓ Fleet-weite Auswertung per AD-OU
GitHub: JankeUwe/sqmSQLTool