Oracle Database In-Memory permette un accesso velocissimo ai dati
sfruttando la tecnica dell'accesso per colonne tipica dei sistemi
OLAP (On-Line Analytical Processing)
e mantenendo i dati in memoria.
Se utilizzata correttamente permette miglioramenti di un'ordine
di grandezza nelle query di analisi e migliora
anche le prestazioni nelle operazioni OLTP.
Database In-Memory e' una Option introdotta dalla versione Oracle 12.1.0.2
[NdE disponibile da oggi 22 luglio 2014 in EE per Linux e Solaris a 64-bit]
che non richiede HW specifici ne, sopratutto, alcuna modifica applicativa per essere utilizzata.
In questo breve documento vediamo come si usa.
Utilizzare In-Memory richiede poche e semplici operazioni.
Le normali attivita' OLTP operano senza alcuna variazione ma si puo' fare di piu'...
cancellando gli indici!
Si possono infatti cancellare gli indici non strettamente necessari per le attivita'
transazionali; infatti le query di analisi sono risolte In-Memory senza necessita'
di indici.
In questo modo anche le operazioni OLTP otterranno un vantaggio
dovendo aggiornare un numero minore di indici:
drop index DssIndex1; ...
Facile vero?
Ti interessa? Continua a leggere!
L'architettura di Database In-Memory e' relativamente semplice e si integra in modo complementare con l'architettura standard di Oracle. All'interno della SGA e' disponibile una nuova cache che e' possibile popolare con le tabelle piu' significative. La cache e' chiamata IM Column Store perche' viene utilizzata una memorizzazione dei dati per colonne, modalita' tipica di molti strumenti di analisi dei dati.
Possono essere caricate nell'IM Column Store tabelle, partizioni, sottopartizioni, viste materializzate e LOB (anche se questi ultimi non ne hanno tipicamente beneficio).
Le normali transazioni ed attivita' operano senza alcuna differenza rispetto ad un database Oracle tradizionale. Tutte le funzionalita' di sicurezza e protezione dei dati (eg. log archiving, Data Guard) non presentano alcuna differenza... l'IM Column Store si affianca alla normale memorizzazione e gestione delle informazioni in formato per righe. L'adozione di In-Memory con l'opzione RAC non presenta differenze e' anzi possibile isolare su un solo nodo le query analitiche ottenendo cosi' una separazione del carico ideale.
E' possibile definire quando popolare un oggetto in memoria: all'avvio dell'istanza
o al primo accesso. La scelta si effettua impostando la clausola PRIORITY dell'oggetto:
none (default), low, medium, high e critical (popolato allo startup).
E' possibile definire il livello di compressione degli oggetti posti nell'IM Column Store
impostando la clausola MEMCOMPRESS:
for query (2x-5x default),
for capacity low (3x-10x for query+OZIP),
for capacity high (massima compressione ma impatto sulle performance),
basic (nessuna compressione).
L'IM Column Store non utilizza alcun algoritmo di svecchiamento (eg. LRU):
quando e' pieno semplicemente non carica piu' in memoria altri oggetti.
La configurazione dell'opzione In-Memory e' davvero semplice come descritto all'inizio del documento. In effetti, come molte altre opzioni di Oracle, e' gia' abilitata. Sono presenti sei nuovi parametri ma per iniziare ad utilizzare l'opzione e' sufficiente variarne uno solo rispetto al default.
Con il comando SQL
alter system set inmemory_size=8G scope=spfile; si configura
la memoria utilizzabile nella cache per la memorizzazione delle tabelle
in formato colonnare.
Va solo posta attenzione all'impostazione globale della
memoria ed eventualmente modificarla con il comando
alter system set sga_target=12G scope=spfile;
Naturalmente i valori da utilizzare variano da una configurazione all'altra.
Impostati i parametri e' sufficiente un restart e l'opzione e' subito attiva.
Nuovi comandi, nuove colonne sulle tabelle del data dictionary, nuove performance view, package per la gestione, ... meglio i fatti delle parole:
Gli esempi parlano da soli!
Quindi vediamo una sessione reale da cui sono stati
tagliati solo i dettagli non significativi:
La query utilizzata e' banale ma le differenze sono evidenti: nuovi algoritmi e differenti tempi di esecuzione.
Per sfruttare l'opzione InMemory non e' necessaria alcuna modifica alle applicazioni.
L'ottimizzatore utilizzera' l'accesso migliore a seconda delle query.
L'utilizzo dei dati in memoria viene facilmente
rilevato negli execution plan come TABLE ACCESS INMEMORY FULL.
L'ottimizzatore ha inoltre una nuova serie di algoritmi utilizzabili
per i dati InMemory (eg. bloom filter) che risultano significativamente
piu' efficienti per le query analitiche.
Gli accessi per chiave restano invece molto piu' efficienti quando eseguiti
con indice. Quindi per questi l'ottimizzatore utilizzera' nell'execution plant
gli algoritmi tradizionali.
Per sfruttare ulteriormente InMemory si possono cancellare gli indici
non necessari alle transazioni OLTP.
In questo modo le attivita' di DML risultano piu' veloci perche'
debbono essere aggiornati meno indici.
Si tratta pero' di un passo da valutare caso per caso.
Cancellare tutti gli indici lasciando solo primary key e constraint
puo' avere controindicazioni... non tutte le applicazioni sono sempre
piu' veloci in questo caso.
Applicazioni complesse che sono state ottimizzate nel tempo per sfruttare al meglio le funzionalita' di Oracle potrebbero ottenere vantaggi significativi ma non ecclatanti. Alcune prove effettuate da Oracle su EBS e JDE hanno portato ad elaborazioni 100 volte piu' veloci, ma per ottenere questi risultati vanno ottimizzate in parte anche le applicazioni.
Le novita' introdotte nella versione 12c sono molte e significative:
Flex Cluster,
Multitenant Option,
ILM/Heat Map,
RMAN (single table restore),
...
Ma si sa che la prima uscita di una versione Oracle viene accolta sempre
con un certo ritardo e con la dovuta attenzione negli ambienti di produzione.
L'uscita della nuova versione e l'opzione In-Memory
sono un'importante spinta per l'adozione della versione 12c.
Perche' rinunciare a query dieci volte piu' veloci
e che sfruttano al meglio l'HW disponibile?
Effettuare un POC consente di verificare gli vantaggi sulle applicazioni reali.
Con In-Memory e' particolarmente semplice realizzare un POC
perche' non richiede nessuna modifica applicativa
e non richiede alcun hardware specifico o dedicato.
E' cosi' possibile valutare quali sono gli effettivi vantaggi
e pianificare al meglio l'upgrade alla nuova versione di Oracle.
In-Memory e' una Database Option. Come tutte le Database Option di Oracle ha un costo aggiuntivo.
L'evoluzione delle funzionalita' dell'RDBMS Oracle nel tempo e' stata notevole.
Un'introduzione ad Oracle si trova in questo documento.
La versione 12 e' descritta in questo documento.
Maggiori dettagli sulle funzionalita' delle diverse versioni di Oracle sono riportate in questo documento. Mentre la storia delle versioni Oracle negli ultimi 20 anni viene descritta in modo assai piu' romanzato in questo favoloso documento [NdA favoloso nel senso letterale perche' e' scritto come una favola].
Titolo: Oracle Database In-Memory
Livello: Avanzato
Data: 22 Luglio 2014
Versione: 1.0.2 -
23 Luglio 2014
Autore:
mail [AT] meo.bogliolo.name