Optimiser en cas d'utilisation élevée de la mémoire dans les instances

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.

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 :

  • Vérifiez la valeur du flag max server memory (mb).

    Nous vous recommandons de laisser Cloud SQL gérer la valeur de cette option. Si vous devez gérer manuellement cette valeur, utilisez la formule d'utilisation max_server_memory (mb) décrite dans les bonnes pratiques pour éviter que SQL Server ne consomme toute la mémoire.

    Pour en savoir plus, consultez la section Options spéciales.

  • Surveillez l'indicateur 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 surveiller Page 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érifiez l'option 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érifier Memory 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'
        

Étapes suivantes