Monitorare l'archiviazione OLTP in memoria in database SQL di Azure

Si applica a:database SQL di Azure

Con OLTP in memoria, i dati nelle tabelle ottimizzate per la memoria e nelle variabili di tabella si trovano nell'archiviazione OLTP in memoria.

Determinare se i dati rientrano nel limite di archiviazione OLTP in memoria

Determinare i limiti di archiviazione dei diversi livelli di servizio. Ogni livello di servizio Premium e Business Critical ha una dimensione massima di archiviazione OLTP in memoria.

La stima dei requisiti di memoria per una tabella ottimizzata per la memoria in SQL Server è analoga alla stima eseguita nel database SQL di Azure. Esaminare Stimare i requisiti di memoria.

Le righe di tabella, le righe di variabile di tabella e gli indici vengono inclusi nel calcolo delle dimensioni massime dei dati utente. Inoltre, ALTER TABLE ha bisogno di spazio sufficiente per creare una nuova versione dell'intera tabella e dei relativi indici.

Una volta superato questo limite, le operazioni di inserimento e aggiornamento potrebbero non riuscire. A questo punto è necessario eliminare dati per recuperare memoria oppure aggiornare il livello di servizio o le dimensioni di calcolo del database. Per altre informazioni, vedere Correggere le situazioni di archiviazione OLTP in memoria insufficiente - Errori 41823 e 41840.

Monitoraggio e avvisi

È possibile monitorare l'uso dell'archiviazione in memoria come percentuale del limite di archiviazione per le dimensioni di calcolo nell'portale di Azure:

  1. Nella pagina Panoramica del database SQL selezionare il grafico nella pagina Monitoraggio. In alternativa, nel menu di spostamento individuare Monitoraggio e selezionare Metriche.
  2. Selezionare Aggiungi metrica.
  3. In Basic selezionare la metrica OLTP in memoria Archiviazione percentuale.
  4. Per aggiungere un avviso, selezionare nella casella Utilizzo risorse per aprire la pagina Metrica e quindi selezionare Nuova regola di avviso. Seguire le istruzioni per creare una regola di avviso per le metriche.

In alternativa, usare la query seguente per visualizzare l'utilizzo dell'archiviazione in memoria:

SELECT xtp_storage_percent FROM sys.dm_db_resource_stats;

Correggere le situazioni di archiviazione OLTP in memoria insufficiente - Errori 41823 e 41840

Soddisfare il limite di archiviazione OLTP in memoria nel database genera operazioni IN edizione Standard RT, UPDATE, ALTER e CREATE con errore 41823 (per database singoli) o errore 41840 (per i pool elastici). Entrambi gli errori comportano l'interruzione della transazione attiva.

Gli errori 41823 e 41840 indicano che le tabelle e le variabili di tabella ottimizzate per la memoria nel database o nel pool hanno raggiunto la dimensione massima di archiviazione OLTP in memoria.

Per risolvere l'errore:

  • Eliminare i dati dalle tabelle ottimizzate per la memoria, eseguendo potenzialmente l'offload dei dati in tabelle tradizionali basate su disco oppure
  • Aggiornare il livello di servizio selezionandone uno con risorse di archiviazione in memoria sufficienti per i dati da mantenere nelle tabelle ottimizzate per la memoria.

Nota

In rari casi, gli errori 41823 e 41840 possono essere temporanei, il che significa che è disponibile spazio di archiviazione OLTP in memoria sufficiente e ripetere l'operazione ha esito positivo. È pertanto consigliabile monitorare l'archiviazione OLTP disponibile in memoria complessiva e riprovare quando si verifica l'errore 41823 o 41840. Per altre informazioni sulla logica di ripetizione dei tentativi, vedere Rilevamento dei conflitti e Logica di ripetizione dei tentativi con OLTP in memoria.

Monitorare con DMV

  • Monitorando periodicamente l'utilizzo della memoria, è possibile determinare la crescita del consumo di memoria e la quantità di spazio head lasciato nei limiti delle risorse. Identificare la quantità di memoria utilizzata dagli oggetti nel database o nell'istanza. Ad esempio, le DMV sys.dm_db_xtp_table_memory_stats o sys.dm_os_memory_clerks.

    • È possibile trovare l'utilizzo della memoria per tutte le tabelle utente, gli indici e gli oggetti di sistema eseguendo una query su sys.dm_db_xtp_table_memory_stats:

      SELECT object_name(object_id) AS [Name], *  
         FROM sys.dm_db_xtp_table_memory_stats;
      
    • La memoria allocata al motore OLTP in memoria e gli oggetti ottimizzati per la memoria vengono gestiti allo stesso modo di qualsiasi altro consumer di memoria all'interno di un database. I clek di memoria di tipo MEMORYCLERK_XTP account per tutta la memoria allocata al motore OLTP in memoria. Usare la query seguente su sys.dm_os_memory_clerks per trovare tutta la memoria usata dal motore OLTP in memoria, inclusa la memoria dedicata a database specifici.

      -- 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  
      
    
    
  • È anche possibile ottenere altre informazioni sugli errori di memoria insufficiente in database SQL di Azure con la visualizzazione a gestione dinamica sys.dm_os_out_of_memory_events. Ad esempio:

    SELECT * FROM sys.dm_os_out_of_memory_events ORDER BY event_time DESC;