Aktuell habe ich das Problem, dass ein Microsoft-SQL-Server immer mal wieder Performance-Spitzen erlebt und dadurch nicht mehr erreichbar ist.

Da ich aktuell jedoch bedingt Zeit habe um eine große Analyse durchzuführen und auch Test-Instanzen unserer Software auf dem Server liegen, bringt eine tiefgehende Analyse leider erst einmal noch nichts. Zumal diese Update-Instanzen durchaus auch dafür verantwortlich sein könnten, aber auf Dauer sowieso wieder verschwinden werden. Daher starte ich einfach den SQL-Server einmal täglich (vornehmlich nachts) via Powershell einmal durch.

Hier das Skript für Euch, welches alle aktuell laufenden Dienste des SQL-Servers ermittelt, diese beendet und neustartet:

Get-service *SQL* | Where-Object {$_.status -eq   "Running"} | #Stop-Service -Force
% {
    $service = $_
    $serviceName = $service.Name
    
    Write-Host $serviceName
    
    Stop-Service -Name $serviceName -Force
    Start-Service -Name $serviceName
}

Ist jetzt kein großes Hexenwerk, verschafft mir aber einiges an Zeit 🙂

Wann ist ein Neustart nötig?

SQL Server-Dienste müssen in verschiedenen Situationen neu gestartet werden: Nach Konfigurationsänderungen am Speicher oder an der maximalen Anzahl paralleler Verbindungen, nach dem Einspielen von Updates, oder wenn der Server aufgrund von Speicherlecks langsamer wird. Durch die Automatisierung mit PowerShell kannst du Neustarts zu geplanten Wartungsfenstern durchführen, ohne manuell eingreifen zu müssen.

Fehlerbehandlung und Logging

Für den produktiven Einsatz empfiehlt es sich, das Skript um eine Fehlerbehandlung und Logging zu erweitern. Mit try/catch in PowerShell kannst du Fehler abfangen und in eine Logdatei schreiben. Außerdem solltest du vor dem Neustart prüfen, ob noch aktive Verbindungen bestehen, und gegebenenfalls eine Wartezeit einbauen.

Geplante Aufgaben

Um den Neustart regelmäßig durchzuführen, kannst du das Skript als geplante Aufgabe (Scheduled Task) in Windows einrichten. So wird der SQL Server beispielsweise jeden Sonntag um 3 Uhr nachts automatisch neu gestartet, wenn der Serverlast am geringsten ist.

Weiterführende Artikel

Wenn dir dieser Artikel gefallen hat, könnten dich auch diese Beiträge interessieren:

Windows-Desktop aufräumen mit Powershell
GitHub Repos automatisiert archivieren
GitHub-Repos schnell und einfach archivieren? Ich zeig dir wie!

Artikel teilen:Share article: