Wir haben einen Produktions-DB-Server für SQL 2005. Alles läuft eine Weile normal, aber nach ein paar Wochen sehen wir einen bemerkenswerten Leistungsabfall. Nur durch einen Neustart von SQL Server wird die normale Leistung wiederhergestellt.
Einige Hintergrundinformationen:
- Laufen über 1200 Datenbanken (meist Einzelmandant, einige Multi-Mandant). Bevor jemand Vorträge über den Umzug zu einem Mandanten hält, gibt es triftige Gründe, diese Struktur beizubehalten.
- RAM ist 16 GB. Nach dem Neustart dauert es nicht lange, bis SQL Server wieder mit 15 GB ausgelastet ist.
- Bei aktiven DB-Verbindungen handelt es sich um ca. 80 Verbindungen - was unserer Meinung nach recht gesund ist, wenn man bedenkt, dass pro Webserver und Prozess ein Verbindungspool vorhanden ist -, sodass wir kein Problem mit Verbindungslecks haben.
Wir haben einige Dinge in Zeiten außerhalb der Stoßzeiten ausprobiert: - Führen Sie DBCC DROPCLEANBUFFERS (mit einem CHECKPOINT) aus, um den Datencache zu leeren. Dies hat keine Auswirkung und löscht auch keine RAM-Auslastung. - Führen Sie FREEPROCCACHE und FREESYSTEMCACHE aus, um Abfragepläne und den gespeicherten Prozesscache zu löschen. Keine Wirkung.
Offensichtlich ist ein Neustart von SQL Server in einer aktiven Produktionsumgebung nicht ideal. Wir vermissen etwas. Hat sonst noch jemand das durchgemacht?
UPDATE: 28. April 2012 Kämpfe immer noch gegen dieses Problem. Ich habe den Speicher für SQL Server auf 10 GB reduziert, um Konflikte mit dem Betriebssystem auszuschließen. Ich nähere mich der Eingrenzung, brauche aber Hilfe für meinen nächsten Schritt.
Folgendes habe ich nach dem Neustart von SQL Server festgestellt: Die Auslagerungsdatei liegt zwischen 12,3 GB und 12,5 GB. Es wird tagelang so bleiben. Die Gesamtzahl der Server-Threads wird zwischen 850 und 930 liegen - auch tagelang stabil und konsistent (sqlserver liegt abhängig vom Datenverkehr konstant zwischen 55 und 85).
Dann gibt es "ein Ereignis". Ich habe keine Ahnung, was das Ereignis ist, ich kann es nicht in den Protokollen sehen, und ich kann an dem Wochentag oder der Uhrzeit, an dem es passiert, nichts Konsistentes sehen, aber die gesamte Auslagerungsdatei springt auf 14.1 oder 14.2 GB, und die Threads springen zwischen 1750 und 1785.
In diesem Fall sind über 900 dieser Threads sqlserver. Also gehe ich zu sp_who2, um zu sehen, woher diese Threads kommen ... und es gibt nur die ungefähr 80 verwendeten DB-Verbindungen.
Also ... hat jemand eine Idee, wie ich herausfinden kann, wo sich die restlichen 900 Threads auf dem SQL Server befinden und was sie tun?
UPDATE: 01. Juni 2012 Wir kämpfen immer noch um das Problem. Für alle, die dies noch lesen, wurde das Problem mit dem Hochspringen der Threads behoben. Dies wurde durch eine autodatierte ComVault-Sicherungssoftware verursacht. Es wurde ein Thread erstellt, der versucht, nicht mehr vorhandene Datenbanken zu sichern (es wurde eine Liste vorheriger Datenbanken geführt), anstatt nur die aktuellen Datenbanken zu sichern.
Aber - das Problem bleibt bestehen und wir müssen jede Woche neu starten, ein paar Tage geben oder nehmen. Arbeiten Sie mit dem Rackspace-Team zusammen, um herauszufinden, ob sie Licht ins Dunkel bringen können.