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
überwachenPage 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, umPage 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üfenMemory Grants Pending
gibt die Gesamtzahl der Prozesse an, die auf eine Speicherzuweisung des Arbeitsbereichs warten. Führen Sie die folgende Abfrage aus, umMemory Grants Pending
zu prüfen. Wenn diese Abfrage konsistent die gewährten Berechtigungen anzeigt, weist dies auf eine hohe Arbeitsspeicherauslastung 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'