Ce document explique comment examiner et optimiser une instance Cloud SQL pour SQL Server si cette instance est identifiée par l'outil de recommandation d'instances sous-provisionnées comme ayant une consommation élevée de mémoire.
Mémoire SQL Server
La mémoire SQL Server peut être divisée en plusieurs parties comme suit :
Caches
Il s'agit d'objets sur un disque qui peuvent être actualisés, tels que des pages de base de données et des procédures stockées. Par conséquent, SQL Server peut augmenter ou réduire ces objets en fonction de l'utilisation de la mémoire. Les caches incluent les pools de tampons et les caches de plans.
Mémoire fixe
La mémoire fixe peut augmenter ou diminuer. Elle ne diminue que lorsqu'elle n'est pas utilisée. Par exemple, lorsque le nombre de connexions ou le nombre de requêtes en cours d'exécution diminue. Cela diffère des caches. Si la mémoire fixe est insuffisante, SQL Server peut manquer de mémoire. La mémoire fixe inclut la mémoire de connexion et les allocations de mémoire.
Coûts SQL Server
Les coûts liés à SQL Server incluent les threads et les piles.
OLTP en mémoire
OLTP en mémoire inclut les tables et les groupes de fichiers en mémoire.
La consommation de mémoire par SQL Server est contrôlée en définissant maximum server memory
et memory.memory.limitmb
. Le paramètre memory.memory.limitmb
est défini automatiquement par Cloud SQL.
Pour en savoir plus sur memory.memory.limitmb
, consultez la documentation Microsoft.
Vous devez définir la limite max server memory
sur une valeur appropriée. Dans SQL Server, si max server memory
n'est pas défini, les pages de base de données peuvent consommer la majeure partie de la mémoire proche et jusqu'à 100 %. Cela peut parfois être trompeur.
Options d'optimisation de la mémoire
Pour déterminer si une instance nécessite davantage de réglages de mémoire, procédez comme suit :
Définissez la valeur de
max server memory
. Il est généralement recommandé de définirmax server memory
sur 80 % pour empêcher SQL Server de consommer toute la mémoire disponible. Dans le cas d'instances disposant d'une grande quantité de mémoire, une valeur de 80 % peut être trop faible et entraîner un gaspillage de mémoire.Surveiller
Page life expectancy
Page life expectancy
indique la durée, en secondes, pendant laquelle la page la plus ancienne reste dans le pool de mémoire tampon. Cette valeur doit être supérieure à 300, comme recommandé par Microsoft. Si elle est systématiquement inférieure à 300, cela peut indiquer que l'instance est soumise à une utilisation intensive de la mémoire. Exécutez la requête suivante pour surveillerPage life expectancy
.SELECT [object_name], [counter_name], [cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%' AND [counter_name] = 'Page life expectancy'
Vérifier
Memory Grants Pending
Memory Grants Pending
spécifie le nombre total de processus en attente d'une allocation de mémoire d'espace de travail. Exécutez la requête suivante pour vérifierMemory Grants Pending
. Si cette requête affiche systématiquement les allocations en attente, cela indique une utilisation intensive de la mémoire. Vous pouvez la réduire en interrogeant les bases de données et en ajustant les instructions en attente de mémoire.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'