Monitorare l'archiviazione OLTP in memoria nel 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, che è una parte della memoria del database messa da parte per i dati in memoria.
- Database e pool elastici nei livelli di servizio Premium (DTU) e Business Critical (vCore) supportano le tabelle OLTP in memoria.
- Il livello di servizio Hyperscale supporta un sottoinsieme di oggetti OLTP in memoria, ma non include tabelle ottimizzate per la memoria. Per altre informazioni, vedi Limitazioni Hyperscale.
Determinare se i dati rientrano nel limite di archiviazione OLTP in memoria
Determinare i limiti di archiviazione dei diversi obiettivi di servizio. Ogni obiettivo di servizio Premium e Business Critical ha dimensioni massime di archiviazione OLTP in memoria.
- Limiti risorse basati su DTU - Database singolo
- Limiti risorse basati su DTU- Pool elastici
- Limiti delle risorse basate su vCore - database singoli
- Limiti delle risorse basate su vCore - pool elastici
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. Revisione Stimare i requisiti di memoria.
Tabella e righe variabili di tabella così come gli indici vengono inclusi nel limite massimo. Le istruzioni ALTER TABLE
, inoltre, necessitano di spazio sufficiente per creare una nuova versione dell'intera tabella e dei relativi indici.
Una volta raggiunto il limite massimo, è possibile che le operazioni di inserimento e aggiornamento abbiano esito negativo. A questo punto è necessario eliminare dati per recuperare memoria oppure aumentare l’obiettivo di servizio del database o del pool elastico. Per altre informazioni, vedere Correggere situazioni di archiviazione OLTP non in memoria - Errori 41823 e 41840.
Monitoraggio e avvisi
È possibile monitorare l'archiviazione OLTP in memoria sotto forma di percentuale del limite di archiviazione per le dimensioni di calcolo nel portale di Azure:
- Nella pagina Panoramica del database SQL selezionare il grafico nella pagina Monitoraggio. Altrimenti, nel menu di spostamento, individuare Monitoraggio e selezionare Metriche.
- Selezionare Aggiungi metrica.
- In Basic selezionare la metrica Percentuale di archiviazione OLTP in memoria.
- 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 di integrità delle risorse.
In alternativa, usare la query seguente per visualizzare l'utilizzo delle risorse di archiviazione in memoria:
SELECT xtp_storage_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;
Risolvere gli errori di memoria insufficiente con OLTP in memoria
Il raggiungimento del limite di archiviazione OLTP in memoria nel database o nel pool elastico può causare errori nelle istruzioni INSERT
, 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 del database o del pool ottimizzate per la memoria hanno raggiunto le dimensioni massime di archiviazione OLTP in memoria.
Per risolvere questi errori:
- Eliminare i dati dalle tabelle ottimizzate per la memoria, eseguendo potenzialmente l'offload dei dati in tabelle tradizionali basate su disco oppure
- Aggiornare l’obiettivo di servizio selezionandone uno con risorse di archiviazione OLTP 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, con il risultato che lo spazio di archiviazione OLTP in memoria si rivela sufficiente ed è possibile eseguire nuovamente l'operazione con esito positivo. Pertanto, quando si verifica l'errore 41823 o 41840 per la prima volta, è consigliabile monitorare lo spazio complessivo di archiviazione OLTP in memoria e provare a eseguire nuovamente l'operazione. Per altre informazioni sulla logica di ripetizione dei tentativi, vedere Rilevamento dei conflitti e logica di ripetizione dei tentativi.
Monitorare con DMV
Monitorando periodicamente l'utilizzo della memoria, è possibile determinare la crescita del consumo di memoria e quanta capacità aggiuntiva viene lasciata nei limiti delle risorse. Identificare la quantità di memoria utilizzata dagli oggetti nel database o nell'istanza. È possibile usare le DMV sys.dm_db_xtp_table_memory_stats o sys.dm_os_memory_clerks.
Per conoscere l'utilizzo della memoria da parte di tutte le tabelle utente, gli indici e gli oggetti di sistema, eseguire 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 agli oggetti ottimizzati per la memoria viene gestita in modo analogo a qualsiasi altro consumer di memoria all'interno del database. I clerk di tipo account
MEMORYCLERK_XTP
tengono conto di tutta la memoria allocata al motore OLTP in memoria. Usare la query seguente 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 OLTP 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 sys.dm_os_out_of_memory_events. Ad esempio:
SELECT * FROM sys.dm_os_out_of_memory_events ORDER BY event_time DESC;