Beschränken Sie den maximalen Serverspeicher, um Speicherauslastung zu vermeiden - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beschränken Sie den maximalen Serverspeicher, um Speicherauslastung zu vermeiden

Aus Leistungsgründen gibt SQL Server keinen Speicher frei, den er bereits zugewiesen hat. Wenn SQL Server gestartet wird, nimmt es langsam den unter der Option min_server_memory angegebenen Speicher in Anspruch und wächst dann weiter, bis der in der Option max_server_memory angegebene Wert erreicht ist. (Weitere Informationen zu diesen Einstellungen finden Sie unter Konfigurationsoptionen für den Serverspeicher in der SQL Server-Dokumentation.)

Der SQL Server-Speicher besteht aus zwei Komponenten: dem Pufferpool und dem Nicht-Pufferpool (auch Memory to Leave oder MTL genannt). Der Wert der Option max_server_memory bestimmt die Größe des SQL Server-Pufferpools, der aus dem Puffercache, dem Prozedurcache, dem Plancache, den Buffstrukturen und anderen Caches besteht.

Ab SQL Server 2012 berücksichtigen min_server_memory und max_server_memory alle Speicherzuweisungen für alle Caches, einschließlich,,,,, und. SQLGENERAL SQLBUFFERPOOL SQLQUERYCOMPILE SQLQUERYPLAN SQLQUERYEXEC SQLOPTIMIZER SQLCLR Eine vollständige Liste der Speicherangestellten unter max_server_memory finden Sie in der Microsoft SQL Server-Dokumentation unter sys.dm_os_memory_clerks.

Verwenden Sie den folgenden Befehl, um den aktuellen max_server_memory-Wert zu überprüfen:

$ sp_configure 'max_server_memory'

Wir empfehlen, dass Sie max_server_memory auf einen Wert begrenzen, der keinen systemweiten Speicherdruck verursacht. Es gibt keine allgemeingültige Formel, die für alle Umgebungen gilt, aber wir haben in diesem Abschnitt einige Richtlinien zusammengestellt. max_server_memory ist eine dynamische Option, sodass sie zur Laufzeit geändert werden kann.

Als Ausgangspunkt können Sie max_server_memory wie folgt bestimmen:

max_server_memory = total_RAM – (memory_for_the_OS + MTL)

Wobei:

  • Der Arbeitsspeicher für das Betriebssystem beträgt 1-4 GB.

  • MTL (Memory to Leave) beinhaltet die Stack-Größe, die auf 64-Bit-Computern 2 MB pro Worker-Thread beträgt und wie folgt berechnet werden kann: MTL = stack_size * max_worker_threads

Alternativ können Sie Folgendes verwenden:

max_server_memory = total_RAM – (1 GB for the OS + memory_basis_amount_of_RAM_on_the_server)

wobei die Größe des RAM auf Speicherbasis wie folgt bestimmt wird:

  • Wenn der Arbeitsspeicher auf dem Server zwischen 4 GB und 16 GB liegt, lassen Sie 1 GB pro 4 GB RAM übrig. Lassen Sie beispielsweise für einen Server mit 16 GB 4 GB übrig.

  • Wenn der Arbeitsspeicher auf dem Server mehr als 16 GB beträgt, belassen Sie 1 GB pro 4 GB RAM bis zu 16 GB und 1 GB pro 8 GB RAM über 16 GB.

Wenn ein Server beispielsweise über 256 GB RAM verfügt, lautet die Berechnung wie folgt:

  • 1 GB für das Betriebssystem

  • Bis zu 16 GB RAM: 16/4 = 4 GB

  • Verbleibender Arbeitsspeicher über 16 GB: (256-16) /8 = 30

  • Insgesamt verbleibender Arbeitsspeicher: 1 + 4 + 30 = 35 GB

  • max_server_memory: 256 — 35 = 221 GB

Überwachen Sie nach der Erstkonfiguration den Arbeitsspeicher, den Sie während einer typischen Arbeitslastdauer freigeben können, um festzustellen, ob Sie den SQL Server zugewiesenen Speicher erhöhen oder verringern müssen.

Anmerkung

Windows signalisiert die Benachrichtigung über niedrige Speicherressourcen bei 96 MB. Sie benötigen also einen Puffer. Sie können jedoch festlegen, dass Verfügbare MB auf größeren Servern mit 256 GB oder mehr RAM über 1 GB liegen.

Weitere Informationen finden Sie im Memory Management Architecture Guide in der Microsoft SQL Server-Dokumentation.