Ottimizzare la gestione della memoria in SAP HANA
L'architettura in-memory di SAP HANA garantisce prestazioni senza precedenti, ma porta con sé sfide specifiche nella gestione della memoria. Un out of memory può fermare l'intero landscape S/4HANA. Questa guida ti propone strategie pratiche per ottimizzare l'uso della memoria di HANA e prevenire i crash per OOM.
Come è organizzata la memoria di HANA
La memoria di HANA è suddivisa in alcune aree principali, ognuna con uno scopo diverso:
Componenti della memoria di HANA:
Le cause più comuni dei problemi di memoria
1. Query SQL non ottimizzate
Tabelle di grandi dimensioni caricate per intero in memoria, senza clausole WHERE
Soluzione: usa l'HANA SQL Monitor (SQLM) per individuare le query più onerose. Aggiungi filtri e ottimizza le join.
2. Delta merge che non viene eseguito
Il delta storage cresce senza controllo e consuma troppa memoria
Soluzione: pianifica il delta merge automatico oppure eseguilo manualmente nelle fasce di basso carico.
3. Tabelle nel column store senza motivo
Tabelle che dovrebbero stare nel row store si trovano nel column store
Soluzione: rivedi il tipo di ogni tabella. Le tabelle piccole e aggiornate di frequente dovrebbero stare nel row store.
Monitorare la memoria di HANA
Transazioni e viste principali
Strategie di ottimizzazione
Quick win per ridurre il consumo di memoria
1. Partizionamento delle tabelle grandi (20-30% di risparmio)
Partiziona per data le tabelle con più di 50M di righe. HANA carica solo le partizioni che servono.
2. Unload delle tabelle inutilizzate (10-15% di risparmio)
Usa lo statement UNLOAD per le tabelle di archivio a cui si accede di rado.
3. NSE (Native Storage Extension) (30-40% di risparmio)
Sposta i dati warm su NSE, che lavora su disco. Per le applicazioni è del tutto trasparente.
4. Ottimizzazione delle colonne LOB (5-10% di risparmio)
Memorizza BLOB/CLOB in tabelle separate per ridurre l'occupazione della main memory.
Livello avanzato: CDS view ottimizzate per la memoria
In S/4HANA le CDS view possono caricare, senza che tu te ne accorga, grandi volumi di dati. Le best practice:
- Evita SELECT * nelle CDS view - Esponi solo i campi che servono
- Usa i parametri per rendere obbligatorio un filtro (ad es. un intervallo di date)
- Sfrutta le association al posto delle join, quando possibile
- Monitora il consumo delle CDS con la transazione /SDF/CD_CDS
Emergenza: come gestire un out of memory
Se HANA sta esaurendo la memoria IN QUESTO MOMENTO:
- 1. Termina le query più onerose - Usa ALTER SYSTEM CANCEL SESSION
- 2. Fai l'unload delle tabelle più grandi - UNLOAD "SCHEMA"."LARGE_TABLE"
- 3. Svuota la result cache - ALTER SYSTEM CLEAR RESULT CACHE
- 4. Aumenta la memoria (temporaneamente) - Se il sistema è virtualizzato, aggiungi subito RAM
- 5. Riavvia i servizi - Ultima risorsa: riavvia l'indexserver per liberare la memoria persa nei leak
Impostare un monitoraggio proattivo
Soglie di alert consigliate:
Alert di warning
- Utilizzo della memoria >70%
- Delta merge in sospeso da >24 ore
- Crescita della memoria >5% al giorno
Alert critici
- Utilizzo della memoria >85%
- Eventi OOM negli alert log
- Una singola tabella >30% della memoria totale
Conclusione
L'ottimizzazione della memoria di HANA è un processo continuo, non un'attività da fare una volta sola. Monitoraggio costante, alert proattivi e revisioni periodiche delle dimensioni delle tabelle e dei pattern delle query sono indispensabili. Con una gestione corretta puoi mantenere prestazioni ottimali ed evitare costosi incidenti di out of memory.
Ottimizza la memoria di HANA
SUPtime legge a ogni polling la memoria usata da ciascun servizio HANA, accanto a backup, dischi e query lente: vedi dove sta andando prima di un out of memory.
Inizia il monitoraggio