Hohe Speicherauslastung in Instanzen optimieren

In diesem Dokument wird erläutert, wie Sie eine Cloud SQL for SQL Server-Instanz überprüfen und optimieren, wenn diese Instanz vom Recommender für nicht bereitgestellte Instanzen als sehr speicherintensiv identifiziert wurde.

SQL Server-Arbeitsspeicher

Der SQL Server-Speicher kann in Folgendes unterteilt werden:

Caches

Dies sind Objekte auf einem Laufwerk, die neu geladen werden können, z. B. Datenbankseiten und gespeicherte Prozeduren. Dadurch kann der SQL Server diese Objekte basierend auf der Speicherauslastung vergrößern und verkleinern. Zu den Caches gehören Pufferpools und Plan-Caches.

Fester Arbeitsspeicher

Fester Arbeitsspeicher kann wachsen und schrumpfen. Er wird nur verkleinert, wenn er nicht genutzt wird, z. B. wenn die Anzahl der Verbindungen oder die Anzahl der ausgeführten Abfragen abnimmt. Damit unterscheidet er sich von Caches. Wenn nicht genügend fester Arbeitsspeicher vorhanden ist, kann SQL Server keinen Arbeitsspeicher mehr haben. Fester Arbeitsspeicher umfasst Verbindungsspeicher und Arbeitsspeicherzuweisungen.

SQL Serveraufwand

Der SQL Serveraufwand umfasst Threads und Stacks.

In-Memory-OLTP

In-Memory-OLTP enthält In-Memory-Tabellen und In-Memory-Dateigruppen.

Der Arbeitsspeicherverbrauch von SQL Server wird durch Festlegen von maximum server memory und memory.memory.limitmb gesteuert. Der Parameter memory.memory.limitmb wird von Cloud SQL automatisch festgelegt.

Weitere Informationen zu memory.memory.limitmb finden Sie in der Microsoft-Dokumentation.

Sie müssen das Limit max server memory auf einen geeigneten Wert setzen. In SQL Server können die Datenbankseiten den größten Teil des Speichers bis zu 100 % verbrauchen, wenn max server memory nicht festgelegt ist. Dies kann manchmal irreführend sein.

Optionen zur Arbeitsspeicheroptimierung

So ermitteln Sie, ob eine Instanz mehr Arbeitsspeicherabstimmung benötigt:

  • Legen Sie den Wert für max server memory fest. Es empfiehlt sich, max server memory auf etwa 80 % zu setzen, um zu verhindern, dass SQL Server den gesamten verfügbaren Speicher verbraucht. Bei Instanzen mit großem Arbeitsspeicher sind 80 % möglicherweise zu niedrig und können zur Verschwendung von Arbeitsspeicher führen.

  • Page life expectancy überwachen

    Page life expectancy gibt an, wie viele Sekunden die älteste Seite im Pufferpool verbleibt. Dieser Wert sollte mehr als 300 betragen, wie von Microsoft empfohlen. Wenn er unter 300 fällt, kann dies ein Hinweis darauf sein, dass die Instanz eine hohe Speicherauslastung aufweist. Führen Sie die folgende Abfrage aus, um Page life expectancy zu überwachen.

    SELECT
      [object_name],
      [counter_name],
      [cntr_value]
    FROM
      sys.dm_os_performance_counters
    WHERE
      [object_name]
    LIKE
      '%Manager%'
    AND
      [counter_name] = 'Page life expectancy'
    
  • Memory Grants Pending prüfen

    Memory Grants Pending gibt die Gesamtzahl der Prozesse an, die auf eine Speicherzuweisung des Arbeitsbereichs warten. Führen Sie die folgende Abfrage aus, um Memory Grants Pending zu prüfen. Wenn für diese Abfrage konsequent Berechtigungen gewährt werden, weist dies auf eine hohe Speicherauslastung hin. Sie können diesen Druck reduzieren, wenn Sie die Warteschlangen in der Datenbank abfragen und alle Anweisungen, die auf Arbeitsspeicher warten, optimieren.

    SELECT
      @@SERVERNAME AS [Server Name],
      RTRIM([object_name]) AS [Object Name],
      cntr_value AS [Memory Grants Pending]
    FROM
      sys.dm_os_performance_counters WITH(NOLOCK)
    WHERE
      [object_name]
    LIKE
      N'%Memory Manager%'  -- Handles named instances
    AND
      counter_name = N'Memory Grants Pending'