6f429244e498457b8400e72e4af683b0 Alberto Blog: Oracle Partitioning

venerdì 4 febbraio 2011

Oracle Partitioning

Da un po' i tempo sto facendo dei test con il Partitioning di Oracle 10g.
Questa feature si trova solo nella versione Enterprise ed è molto utile oltre ad ottimizzare le performance anche solo per "archiviare"  dei dati.
In certe  aziende o per ragione legali o per ragioni di qualifica ISO o per altri motivi non si esegue una archiviazione dati, alcune tabelle contengono milioni di dati e questo potrebbe sfociare in un problema di performance.
Anche se si continua a implementare hardware / server sicuramente più veloci e  performanti questo problema nel tempo va affrontato perchè tutti i nodi vengono al pettine, ve lo dice uno che di capelli ne ha veramente molti.....
Per implementare il partitioning occorre fare una analisi molto accurata dell'applicativo e il modo di accesso  che quest'ultimo fa alle tabelle Oracle, quì ci vengono incontro due tool: Partitioning,
Tuning Pack che ovviamente non sono gratuiti.
Per natura sono un pò scettico per questi tools che vengono venduti come risolutori di problemi ma penso che possano essere almeno di aiuto.
Partizionare le tabelle per "archiviare" (lo scrivo tra doppi apici perchè non è una vera a propria archiviazione) risulta essere molto utile perchè con dei campi data si possono creare delle partition key suddivise molto semplicemente per anno per far sì che Oracle esegua il partition pruning, accendendo di fatto solo alla partizione interessata.
Facendo così il CBO ( però le statistiche devono sempre essere aggiornate) capisce e accede solo alla partizione interessata facendo risparmiare moltissimo tempo, pensando a tabelle con milioni di records.Questo risparmio può essere visto eseguendo l'explain plan e il trace dello statement sql interessato.
Questo è ovviamente è un esempio molto semplice di partitioning di tipo range ma c'è  ne sono altri, Hash, List e questi possono essere composite o single level.
Vi rimando a questo sito  (in inglese)  che è molto esplicativo come concepts del Partitioning.

2 commenti:

Roberto ha detto...

Ciao Alberto,
volevo segnalarti che questo tuo post l'ho trovato per caso da una ricerca in Internet, e ho subito notato che la home-page del tuo blog punta invece ad un tuo post precedente.
Visto che c'ero, ho letto quanto hai scritto e mi permetto di farti due pulci: la prima banalmente è che il tuo rimando ad un "sito (in inglese) che è molto esplicativo", non è altro che la documentazione Oracle; la seconda è che sottolineerei maggiormente il fatto che il partizionamento di una tabella, da punto di vista delle performances, ha senso se la tabella (molto grande) è acceduta spesso in full table scan (e riguarda quindi maggiormente i sistemi DSS, che di solito per coincidenza hanno pure tabelle molto grandi), e il partition pruning è l'unico modo per limitare il full scan ad una singola porzione di tabella... poi c'è la questione dell'eventuale partizionamento degli indici local o global.
Credo di fare cosa utile a te e ai tuoi lettori, a segnalarti questo link (il primo di una serie) di Doug Burns, che spiega in maniera molto chiara e pratica la questione statistiche sulle tabelle partizionate. Ogni volta che devo affrontare la questione mi rileggo questi posts di Doug per rinfrescarmi la questione.
http://oracledoug.com/serendipity/index.php?/archives/1562-Statistics-on-Partitioned-Tables-Part-1.html

Alberto ha detto...

Ciao roberto,
grazie per la segnalazione. Hai ragione il partitioning è un argomento vasto e andrebbe trattato più nel dettaglio e le tue osservazioni sono corrette.
Grazie mille per il link postato.

Posta un commento