SQL Server wird mit der Zeit langsamer, bis wir es neu starten müssen

8

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 freeproccachehaben 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 memorystatusist

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.

  1. Was verursacht dieses Verhalten? Wie kann es vermieden werden?
  2. 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.

Alireza
quelle

Antworten:

10

Ich würde vorschlagen, Leistungsmetriken auf diesem Server zu sammeln, damit Sie das Rätselraten bei der Fehlerbehebung bei solchen Problemen vermeiden können. In diesem Artikel finden Sie eine ausführlichere Anleitung, wenn Sie nicht wissen, wo Sie damit beginnen sollen.

Insbesondere würde ich die Leistungsindikatoren überprüfen Memory\Available MBytesund Paging File(_Total)\% Usageweil Sie sagten, dass die Probleme erst auftreten, wenn der Pufferpool voll ist. Die Zahlen, die Sie von diesen Zählern zurückerhalten, weisen möglicherweise darauf hin, dass die maximale Serverspeichereinstellung (entweder nach oben oder nach unten) an die dem Server zugewiesene Menge an physischem Speicher angepasst werden muss. Wie ich hier erwähnt habe , empfehle ich nicht, die maximale Speichereinstellung auf der Menge des physischen Speichers zu basieren, außer als fundierte Vermutung für einen Ausgangspunkt . Messen Sie immer das Ergebnis und passen Sie es von dort aus an.

Wenn die Menge an freiem Speicher zu gering ist (<500) oder die Auslastung der Auslagerungsdatei über Null liegt , kann dies darauf hinweisen, dass die SQL Server-Instanz überlastet ist: Unter SQL Server 2008 R2 steuert die maximale Serverspeichereinstellung nur die Größe des Pufferpools und nicht andere Speichernutzung wie den Plan-Cache. SQL Server kümmert sich auch nicht um andere Anwendungen, die möglicherweise auf dem System ausgeführt werden. Diese zusätzliche Speichernutzung kann Windows - oder die anderen Anwendungen - unter Druck setzen und möglicherweise zum Austausch von Festplatten führen. Dies sollten Sie unbedingt vermeiden, insbesondere wenn die Auslagerungsdatei auf einem Volume vorhanden ist, das nur von einem einfachen RAID 1-Spiegel unterstützt wird. Ich habe das Gefühl, dass dies das Problem ist, und das Zurücksetzen der maximalen Serverspeichereinstellung sollte das Problem beheben.

Wenn der freie Speicherplatz hoch ist (> 1000) und die Auslastung der Auslagerungsdatei Null ist, können Sie den maximalen Serverspeicher wahrscheinlich geringfügig erhöhen (in Schritten von 256 MB), um die Speichernutzung des Servers zu maximieren. Dies wird das Problem jedoch höchstwahrscheinlich nicht lösen, und Sie müssen sich anderswo umsehen, wahrscheinlich um die physischen Datenträgerzähler und die Lebenserwartung der Pufferpoolseiten. Wenn Abfragen den Pufferpool überladen, können Sie nichts anderes tun, als die Festplattenleistung zu verbessern, den für den Server verfügbaren physischen Speicher zu erhöhen, damit alle Datenseiten gleichzeitig in den Speicher passen, oder die Datenbank so zu ändern, dass sie nicht so viel beansprucht physischer Speicherplatz (möglicherweise durch Verwendung der Zeilen- oder Seitenkomprimierung oder durch Neuerstellung von Indizes mit einem höheren Wert FILLFACTOR).

Ich habe einen Artikel zu diesem Thema veröffentlicht hier , die mehr in die Tiefe zu diesem Thema geht und wie es zu lösen.

Jon Seigel
quelle
1

Im Allgemeinen sollte sich der Trend zur Langsamkeit im Laufe der Zeit umkehren, da sich die Leistung verbessern sollte, wenn Datenbankseiten in den Cache verschoben werden (die Lebensdauer der Seiten und die Puffer-Trefferquote steigen mit der Zeit). Haben Sie Ihren maximalen Speicher auf (total_physical_mem - 2 GB) eingestellt?

Es hört sich so an, als würden einige Ihrer Abfragen dazu führen, dass der SQL Server eine Menge Dinge ausblendet und einblendet. Sie können Resource Governor ausprobieren , um den Speicherverbrauch der großen und mittleren Abfragen zu begrenzen, sodass für die Anwendungsabfragen immer genügend Puffer verfügbar ist.

Knitterfrei
quelle
2
Die Speicherbeschränkungen in Resource Governor steuern nur den Abfragespeicher, nicht den Pufferpoolspeicher.
Jon Seigel