OLTP en mémoire dans Azure SQL Database

S’applique à Azure SQL Database

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

Déterminez les limites maximales de stockage des différents niveaux de service. Chaque niveau de service Premium et critique pour l'entreprise dispose d’une taille de stockage OLTP en mémoire maximale.

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. 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. À ce stade, vous devez soit supprimer des données pour libérer de la mémoire, soit mettre à niveau le niveau de service ou la taille de calcul de votre base de données. Pour plus d’informations, consultez Corriger les situations de stockage OLTP en mémoire insuffisant : erreurs 41823 et 41840.

Surveillance et alerte

Vous pouvez surveiller l’utilisation du stockage en mémoire représentée sous forme de pourcentage de la limite maximale de stockage de votre taille de calcul dans le Portail Azure :

  1. Dans la page Vue d’ensemble de votre base de données SQL, sélectionnez le graphique dans la page Surveillance . Dans le menu de navigation de gauche, recherchez Supervision, puis sélectionnez Métriques.
  2. Sélectionnez Ajouter une métrique.
  3. Sous De base, sélectionnez la métrique OLTP en mémoire Stockage pourcentage.
  4. Pour ajouter une alerte, sélectionnez dans la zone Utilisation des ressources pour ouvrir la page Métrique , puis sélectionnez Nouvelle règle d’alerte. Suivez ces instructions pour créer une règle d’alerte de l’intégrité de la ressource.

Vous pouvez également utiliser la requête suivante pour afficher l’utilisation du stockage en mémoire :

SELECT xtp_storage_percent FROM sys.dm_db_resource_stats;

Corrigez les situations de stockage OLTP en mémoire insuffisant : les erreurs 41823 et 41840

Lorsque 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 (pour les bases de données uniques) ou 41840 (pour les pools élastiques). Les deux erreurs provoquent l’abandon de la transaction active.

Les messages d’erreur 41823 et 41840 indiquent que les tables optimisées en mémoire et les variables de table dans la base de données ou le pool 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.

Notes

Dans de rares cas, les erreurs 41823 et 41840 peuvent être temporaires, 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 des erreurs 41823 ou 41840. 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 Database 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;