Surveiller le stockage OLTP en mémoire dans Azure SQL Database et Azure SQL Managed Instance

S’applique à : Azure SQL Managed Instance

Lorsque vous utilisez OLTP en mémoire, les données des tables à mémoire optimisée et les variables de table résident dans un stockage OLTP en mémoire.

Déterminer si la taille des données est adaptée à la capacité de stockage en mémoire OLTP

Le niveau de service Critique pour l’entreprise inclut une certaine quantité de mémoire OLTP maximale en mémoire, déterminée par le nombre de vCores.

L’estimation de la mémoire requise pour une table à mémoire optimisée s’effectue de la même façon pour SQL Server que dans Azure SQL Database et Azure SQL Managed Instance. Prenez quelques minutes pour passer en revue la rubrique Estimer les besoins en mémoire.

La table et les lignes de variable de table, ainsi que les index, sont pris en compte pour le calcul de la taille maximale des données utilisateur. En outre, l’instruction ALTER TABLE a besoin de suffisamment d’espace pour créer une version de la table entière et de ses index.

Une fois que cette limite est dépassée, des opérations d’insertion et de mise à jour peuvent commencer à échouer en générant l’erreur 41823.

Corrigez les situations de stockage OLTP en mémoire insuffisant : erreur 41823

Atteindre le plafond de stockage OLTP en mémoire est atteint, les opérations de base de données INSERT, UPDATE, ALTER et CREATE échouent avec le message d’erreur 41823. Les deux erreurs provoquent l’abandon de la transaction active.

L’erreur 41823 indique que les tables optimisées en mémoire et les variables de table dans l’instance ont atteint la taille de stockage OLTP en mémoire maximale.

Pour résoudre cette erreur, deux possibilités s’offrent à vous :

  • supprimer des données des tables à mémoire optimisée, en déchargeant potentiellement les données vers des tables traditionnelles sur disque ;
  • adapter le niveau de service afin de disposer d’un stockage en mémoire suffisant pour les données que vous devez conserver dans des tables à mémoire optimisée.

Remarque

Dans de rares cas, l’erreur 41823 peut être temporaire, ce qui signifie qu’il y a suffisamment de stockage OLTP en mémoire disponible, et que l’opération réussit quand elle est relancée. Par conséquent, nous vous recommandons de surveiller le stockage OLTP en mémoire total disponible et de commencer par recommencer l’opération lorsque vous rencontrez une erreur 41823. Pour plus d’informations sur la logique de nouvelle tentative, consultez Détection de conflit et logique de nouvelle tentative avec l’OLTP en mémoire.

Analyser avec des vues de gestion dynamique (DMV)

  • En surveillant régulièrement la consommation de mémoire, vous pouvez déterminer la croissance de la consommation de mémoire et la quantité de salle de tête que vous avez laissée dans les limites de ressources. Identifiez la quantité de mémoire consommée par les objets dans votre base de données ou dans votre instance. Par exemple, les DMV sys.dm_db_xtp_table_memory_stats ou sys.dm_os_memory_clerks.

    • Déterminez la quantité de mémoire pour toutes les tables utilisateur, index et objets système en interrogeant sys.dm_db_xtp_table_memory_stats :

      SELECT object_name(object_id) AS [Name], *  
         FROM sys.dm_db_xtp_table_memory_stats;
      
    • La mémoire allouée au moteur et aux objets optimisés en mémoire est gérée de la même façon que pour tout autre consommateur de mémoire dans une base de données. Les régisseurs de mémoire de type MEMORYCLERK_XTP tiennent compte de toute la mémoire allouée au moteur OLTP en mémoire. Utilisez la requête sys.dm_os_memory_clerks suivante pour rechercher toute la mémoire utilisée par le moteur OLTP en mémoire, y compris la mémoire dédiée à des bases de données spécifiques.

      -- This DMV accounts for all memory used by the in-memory engine  
      SELECT [type], [name]
           , memory_node_id  
           , pages_kb/1024 AS pages_MB   
      FROM sys.dm_os_memory_clerks 
      WHERE [type] LIKE '%xtp%';
      
      type                 name       memory_node_id pages_MB  
      -------------------- ---------- -------------- --------------------  
      MEMORYCLERK_XTP      Default    0              18  
      MEMORYCLERK_XTP      DB_ID_5    0              1358  
      MEMORYCLERK_XTP      Default    64             0  
      
    
    
  • Vous pouvez également obtenir plus d’informations sur les erreurs de mémoire insuffisante dans Azure SQL Managed Instance avec la vue de gestion dynamique sys.dm_os_out_of_memory_events. Par exemple :

    SELECT * FROM sys.dm_os_out_of_memory_events ORDER BY event_time DESC;
    

    Pour plus d’informations, consultez Surveiller et dépanner l’utilisation de la mémoire OLTP en mémoire.