Wir haben eine Datenbank mit einer gemischten OLAP / OLTP-Workload. Die Abfragen sind ziemlich ad-hoc und werden dynamisch auf dem Mid-Tier-Anwendungsserver erstellt. Wenn wir den Server starten, ist die Leistung durchaus akzeptabel, aber der Speicherverbrauch steigt immer mehr, bis der gesamte verfügbare Speicher (30 GB) erschöpft ist. Danach wird das System immer langsamer.
Befehle wie Dbcc freeproccache
haben keine Wirkung.
Es gibt nicht viele Transaktionen in select * from sys.dm_tran_session_transactions
(nicht mehr als wenn das System in Ordnung ist), manchmal ist diese Liste leer.
Das erste Ergebnis von dbcc memorystatus
ist
VM Reserved 42136628
VM Committed 1487176
Locked Pages Allocated 24994048
Reserved Memory 1024
Reserved Memory In Use 0
Ein Neustart von SQL Server löst das Problem für eine Weile.
- Was verursacht dieses Verhalten? Wie kann es vermieden werden?
- Wenn eine echte Lösung für die Ursache zu schwierig ist, gibt es einen Befehl, der SQL Server zwingt, den gesamten Speicher ohne einen vollständigen Neustart des DBMS freizugeben?
Der Server wird auf dedizierter Hardware (keine VM) ausgeführt. Wir hatten einige geplante Jobs, aber wir haben sie für eine Weile deaktiviert, ohne Änderungen. Es gibt andere Mid-Tier-Anwendungen, die auf demselben Server ausgeführt werden, sie verwenden jedoch nicht mehr als 2 GB Speicher, eine vernachlässigbare CPU und fast keine E / A. Wir haben alle diese Anwendungen ohne Änderung neu gestartet.