Ich habe einen einzelnen SQL2012 SP4-Knoten, auf dem mehrere Datenbanken ausgeführt werden.
Auf dem Server stehen 20 GB Speicher zur Verfügung, 14 GB sind SQL zugewiesen (sonst läuft nichts auf der Box).
Alle paar Minuten speichert SQL den gesamten Puffercache. Die Lebenserwartung der Seite erreicht Null. Die Puffer-Cache-Deskriptoren zeigen, dass sich nichts im Cache befindet.
Ich habe mir die Benachrichtigungen zum Ressourcenmonitor angesehen und die Benachrichtigungen springen alle paar Millisekunden von hoch / stetig / niedrig:
RESOURCE_MEMPHYSICAL_HIGH RESOURCE_MEM_STEADY RESOURCE_MEMPHYSICAL_LOW
Mit Zeitstempeln, die mehrere Millisekunden voneinander entfernt sind. Der PLE ist im Wesentlichen ein Sägezahnmuster.
Ich habe dies schon einmal mit SQL2012 SP1 und dieser Frage gesehen:
Kostenlose SQL Server 2012-Seiten im Puffercache werden nicht verwendet
Scheint ein ähnliches Problem zu sein, obwohl ich bereits auf SP4 aktualisiert habe.
Ich habe versucht, LPIM für das Dienstkonto zu aktivieren, und ich habe versucht, mit der maximalen Speichereinstellung herumzuspielen. Das Verringern des maximalen Speichers scheint dazu geführt zu haben, dass der Puffercache häufiger geleert wird.
Irgendwelche Ideen, was als nächstes zu überprüfen ist?
Die Server-Workload ist buchstäblich nichts (ich scrolle durch die Liste der Elemente in einem ERP-System und sie erreicht ungefähr 40-50 MB, bevor der Cache einfach wieder gelöscht wird).
Es ist interessant, weil ich ein Upgrade von SP1 durchgeführt habe, um dies zu beheben - der Cache dort erreichte ungefähr 500 MB. Seitdem habe ich die maximale Speichereinstellung auf 14 GB gesenkt, was es anscheinend noch schlimmer gemacht hat.
Ich frage mich, ob Windows in Panik gerät und falsche Benachrichtigungen über den Speicherdruck bei SQL auslöst. Daraus folgt, dass der Server mit maximalem Speicher, der auf unbegrenzt eingestellt ist, in Ordnung zu sein schien, aber den Cache nie mehr als ein paar hundert MB füllte - aber jetzt kommt kaum auf 50 ...
Weitere Informationen: für diejenigen, die gefragt haben
Anzahl der Kerne: 4
Datenbankgröße: 80 GB
Das Fehlerprotokoll zeigt: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 247928, committed (KB): 495656, memory utilization: 50%.
Ergebnisse der Ausführung von Skripten über diesen Link: https://www.sqlskills.com/blogs/jonathan/identifying-external-memory-pressure-with-dm_os_ring_buffers-and-ring_buffer_resource_monitor/
Ich bin mir nicht sicher, wie ich diese interpretieren soll - es sieht so aus, als ob zu verschiedenen Zeiten sowohl interner als auch externer Speicherdruck herrscht.
Noch mehr Infos:
Dies ist ein Hyper-V-Gast, der auf einem Host mit 96 GB RAM sitzt, von denen etwa die Hälfte den Gästen zugewiesen ist.
Die Symptome scheinen ähnlich zu sein:
SQL Server 2012 x64 - kann nicht sicher mehr als 50% RAM zuweisen
Als ich SQL jedoch 14 GB zuwies, traten die Symptome sofort auf (kaum 3 GB des Serverspeichers wurden festgeschrieben).
Letzte Nacht habe ich den Gastspeicher auf 32 GB erhöht und das Problem ist behoben, aber ich sehe nur 14 GB Festschreibung des gesamten Serverspeichers (und das Unternehmen, in dem die Datenbank ausgeführt wird, ist heute Morgen beschäftigt, und in diesem Fall treten normalerweise Leistungsprobleme auf).
Etwa 8-9 GB Daten im Cache scheinen derzeit stabil zu sein.
Es scheint darauf hinzudeuten, dass 20 GB für die Arbeitslast auf dieser Box ausreichen. Ich bin froh, dass ich es jetzt mit 32 GB belasse, aber ich möchte dem wirklich auf den Grund gehen, damit ich die VMs / SQL besser konfigurieren kann.
Ich werde weiter graben und aktualisieren, wenn ich die Antwort finde!
Noch mehr Infos:
Ich habe SQL nach dem Aktivieren von LPIM nicht neu gestartet (ohne zu wissen, dass dies erforderlich ist), aber ich habe diese Einstellung aktiviert gelassen und neu gestartet, um den Speicher zu aktualisieren. Daher bin ich mir nicht sicher, ob die Erhöhung des Speichers oder LPIM die Probleme behoben hat.
Springt heute Abend ein, wenn der Server inaktiv ist, und überprüft, wie er wieder bei 20 GB aussieht.
Noch mehr Mehr Mehr Info:
Derzeit tickt der Server mit 32 GB zu und wir haben das Problem seitdem nicht mehr gesehen. Wenn dies wieder auftaucht, werde ich auf diese Frage zurückkommen und weiter graben.
Derzeit bleibt ein Rätsel, aber ich vermute, dass ich die Probleme im Moment nur maskiere.
quelle
Antworten:
Obwohl Sie das Problem anscheinend selbst gelöst haben, finden Sie hier eine Zusammenfassung der relevanten Informationen zur Lösung.
Server Memory Server-Konfigurationsoptionen
Microsoft schreibt in seinem Artikel Server Memory Server-Konfigurationsoptionen (Microsoft | SQL Docs) für den Abschnitt Manuelles Festlegen der Speicheroptionen
( Hervorhebung von mir)
Der Abschnitt über das Sperren von Seiten im Speicher (dasselbe Dokument) enthält einen gleich überzeugenden Absatz, der wie folgt lautet:
( Hervorhebung von mir)
Im Abschnitt LPIM wird Folgendes erklärt:
( Hervorhebung von mir)
... und in einem wichtigen Kommentar, dass:
( Hervorhebung von mir)
Lösung
Basierend auf den obigen Erkenntnissen und Ihren Beobachtungen besteht die Lösung für Ihr Problem darin, die folgenden Einstellungen zu konfigurieren:
min_server_memory
(5-10 GB?) Basierend auf Ihrem Kommentar:... und die Empfehlung von Microsoft, a
min_server_memory
.max_server_memory
(20-32 GB) basierend auf Ihrer Beobachtung:... und die Empfehlung von Microsoft, a
max_server_memory
.Basierend auf dem ERRORLOG-Eintrag Ihrer von Ihnen erwähnten SQL Server-Instanz und der Microsoft-Referenz im Artikel.
Bevor Sie fortfahren ...
(Einer der) Vorteile einer virtualisierten Umgebung besteht darin, dass Ressourcen gemeinsam genutzt werden können / sollten und möglicherweise sogar überlastet werden. Das Aktivieren von LPIM (Lock Pages In Memory) kann sich jedoch negativ auf Ihre Hyper-V-Umgebung auswirken, wenn auf Ihrer Hardware mehrere Instanzen gehostet werden. Eine Überbeanspruchung des Arbeitsspeichers kann andere Instanzen erschöpfen.
Bevor Sie alle Hebel umschalten, beginnen Sie mit den Einstellungen 1. und 2. Wenn die Feinabstimmung dieser Speichereinstellungen nicht funktioniert, sollten Sie LPIM aktivieren, wenn Sie über genügend Hardware verfügen .
quelle