Wir führen SQL Server 2012 SP1 CU4 auf einem 64-Bit-Server mit 12 Kernen und 2 Sockets unter Verwendung eines NUMA-Architektur-Servers aus. Betriebssystem ist Windows Server 2008 R2 x64.
Immer wenn wir mehr als 50% des physischen Arbeitsspeichers dem SQL Server zuweisen, wird der Computer instabil oder reagiert nicht mehr.
Die Symptome sind typisch für den Speichermangel des Betriebssystems - dh der Prozess kann nicht gestartet werden, das GUI-Objekt kann nicht gerendert werden, Anwendungen verhalten sich schlecht, Remotedesktopsitzungen reagieren nicht mehr usw.
Wir haben dies auf 2 verschiedenen Computern gesehen - einer mit 192 GB RAM, der andere mit 256 GB RAM. Sobald SQL mehr als 50% der jeweiligen physischen Gesamtmenge erhält, treten die Symptome auf.
Hat jemand dieses Verhalten gesehen?
--- BEARBEITEN ---
Der SQL-Dienst wird unter einem Konto mit LPIM-Berechtigungen (Seiten im Speicher sperren) ausgeführt.
McAfee Antivirus wird dem Server leider auferlegt, obwohl es zumindest mit Ausschlüssen für alle SQL-Dateien eingerichtet ist.
Wenn die RAM-Auslastung 50% überschreiten darf, sehen wir häufig Folgendes:
- Hohe Wartezeiten für RESOURCE_SEMAPHORE.
- Unfähigkeit, eine Verbindung zum SQL Server herzustellen oder Abfragen auszuführen.
- Bei Ausführung von Abfrage-Workloads wurden alle CPUs mit geringer Festplatten-E / A ausgelastet.
- EDIT 2 ---
Wir haben versucht, SQL (SP1 CU4) neu zu installieren, und haben überprüft, dass der RAM durch nichts anderes beschädigt wird. Im Allgemeinen sind zu jeder Zeit mindestens 100 GB der insgesamt 256 GB frei. Wenn wir LPIM deaktivieren, sehen wir das Problem "Das Betriebssystem hat einen erheblichen Teil des SQL-Speichers ausgelagert", weshalb wir es aktiviert haben.
quelle
Antworten:
Ich würde die Perfmon-Metriken auf CPU-CPU-Auslastung sowie die Instanz-Perfmon-Metriken instanzweit und pro NUMA-Knoten auf PLE, Datenbankseiten usw. überprüfen. Zwei aktuelle SQL Server-KBs
Bei einigen Workloads, insbesondere bei höherer Kernanzahl, hoher Anzahl gleichzeitiger Abfragen und vielen Datenbankfestplatten-E / A, werden jedoch die Ablaufverfolgungsflags 8015 (Deaktivieren der NUMA-Unterstützung auf SQL Server-Ebene) und 8048 (Entfernen des Botllenecks für die Speicherzuweisung pro Socket) verwendet Bieten Sie noch bessere Ergebnisse als die in SQL Server 2012 SP1 CU4 enthaltenen Fixes. (Ich habe dies auf unseren Testgeräten mit Simulationen unserer Arbeitsbelastung bestätigt - YMMV)
Das Ablaufverfolgungsflag 8015 verdient vor der Bereitstellung eine gründliche Bewertung. Die Speicheraffinität und die geringere Speicherlatenz werden für die Verwaltung eines einzelnen großen Pools geopfert. Dies führt auch zu einem Lazy Writer anstelle eines pro NUMA-Knoten, und die Idee, einen Verbindungsendpunkt innerhalb einer einzelnen SQL Server-Instanz zu jedem NUMA-Knoten zu affinisieren, verschwindet ebenfalls. Bei einigen Workloads sind die Vorteile jedoch nicht zu leugnen. Verwenden Sie 8015 nicht ohne 8048.
Ich habe noch nie messbare Kosten für das Hinzufügen des Trace-Flags 8048 gesehen oder gehört. Wenn
CMEMTHREAD
Wartezeiten und zugehörige Spinlocks durch die Zuweisung des Abfragespeichers ausgelöst werden, ist dies der einzig zuverlässige Weg, diese zu beseitigen.quelle