L’ottimizzatore basato sui costi: CBO

giovedì 3 aprile 2008 alle 03:10 | Pubblicato su Performance Tuning | Lascia un commento

Ha fatto bene Oracle a investire tutto su CBO abbandonando RBO?

Ho riletto da poco il primo capitolo del libro “Oracle Insights. Tales of the Oak Table”. Il capitolo si intitola “A Brief History of Oracle” ed è scritto da Dave Ensor, di cui per la verità so meno di quanto vorrei (Nigel Thomas lo cita come “leggenda” insieme a Chris Ellis, Graham Wood e Cliff Longman nel suo profilo). Si tratta di un capitolo molto interessante in cui Dave Ensor ripassa velocemente la storia dei database relazionali a partire dall’articolo di Edgad F. Codd del 1970, passando per le successive “12 Rules” del 1985, continuando con la gestione delle transazioni e gli “isolation level” e la gestione dei privilegi.

A un certo punto egli dedica anche un paragrafo al Rule Based Optimizer. Infine egli ripassa tutte le versioni di Oracle dalla 4 alla 10g evidenziando per ciascuna versione le novità di rilievo, citando anche l’introduzione del Cost Based Optimizer alla versione 7.

Questo libro è interessante perchè da una visione al di fuori quella che si ha leggendo i manuali e gli altri libri tecnici su Oracle: parla anche dell’esistenza dei bug. Anche Dave Ensor nell’elencare le novità introdotte nelle varie versioni ribadisce più volte che ogni nuova caratteristica è stata introdotta con numerosi bug. Quelli con cui spesso i DBA si trovano a lottare.

In ogni caso il paragrafo su RBO, insieme ad alcuni post come ad esempio questo sul blog di Doug Burns, poi quello di Christo Kutrovsky sul blog di pythian seguito da un post di Alex Faktulin sugli istogrammi, mi hanno fatto riflettere e cambiare un po’ prospettiva.

E’ un dato di fatto che il desupporto di RBO dalla versione 10g, obbligando al passaggio a CBO, ha creato molti problemi. Quello su cui Doug Burns e David Aldridge con i loro commenti mi hanno fatto capire (assieme alla mia esperienza) è che CBO non è affatto adatto ad applicazioni OLTP. Basti pensare al fatto che CBO non va molto d’accordo con le bind variables. Il bind peeking è in molti casi un rimedio accettabile, ma non è sufficente.

Christo Kutrovsky cerca di dimostrare che il problema è il bind peeking e che la soluzione è la sua disabilitazione. Egli porta degli esempi convincenti ma non troppo.

Alex Faktulin risponde con un post in cui punta l’indice sugli istogrammi e propone di bloccarne la generazione. Ma io dico, allora, perchè non eliminare le statistiche del tutto?

Entrambi propongono soluzioni basate sulla loro esperienza. Si tratta di soluzioni a livello di database, cioè di soluzioni che si può adottare quando non c’è possibilità di agire sul codice (che sono il tipo di soluzioni proposte solitamente dai consulenti Oracle con cui ho avuto a che fare).

La verità secondo me è che sia il “bind peeking” che gli istogrammi sono un’ottimo aiuto per CBO e toglierli non migliora CBO, lo rende più simile a RBO. Il problema è che Oracle già da anni non lavora più su RBO sul quale non ha implementato piani di accesso quali gli Hash Join e i Fast Full Index Scans per citarne due a memoria che invece sono stati implementati su CBO. Oracle ha preso la decisione di puntare tutto su CBO probabilmente per semplificarsi la vita concentrandosi su un’unico modulo, questo però sappiamo non l’ha semplificato agli utenti/clienti.

La mia esperienza rispecchia quanto afferma David Aldridge : RBO copre egregiamente il 95% dei casi di un sistema OLTP. E’ richiesta un’attenta pianificazione nella creazione degli indici e qualche attenzione nella scrittura delle query. Se si hanno a disposizione dei buoni programmatori questo compito è facile ed è raro avere dei problemi.

Quello su cui converge Oracle, presumo guidata da esigenze di mercato e da concorrenti come Microsoft, è su sistemi che non hanno bisogno di manutenzione (“Self Managing“) e che possono essere utilizzati da programmatori che non conoscono i database (“Self Tuning“). In qualche modo forse ci si avvicina, ma c’è ancora un sacco di strada da fare. Ritengo che spesso un ostacolo su questa strada siamo noi DBA, cosa che probabilmente spesso gli amministratori “sentono” e che li porta a prendere decisioni senza consulti tecnici. Quello che voglio dire è che spesso noi DBA, un po’ per auto-protezione, un po’ per rigidità mentale tipica di persone dedicate a questo mestiere, siamo ostili ai rinnovamente e manteniamo delle pratiche obsolete che ci fanno sprecare risorse che sono nostre e dell’azienda per cui lavoriamo. Come ho gia detto in precedenza è su questo campo che ad esempio Microsoft e i suoi utenti attaccano gli avversari.

Tornando al CBO devo dire che mentre in ambienti OLTP puri crea più problemi di quanti ne risolva, gia in ambienti misti (che sono più diffusi) dà un contributo positivo. In ambienti datawarehouse invece, dove si può rinunciare ad esempio alle bind variables, si comporta senz’altro bene nella gestione di query analitiche molto complesse.

Jonathan Lewis su CBO pare sapere quasi tutto e su di esso ha scritto anche un bellissimo libro che però non sono ancora riuscito a leggere tutto ( :( ).

Egli conoscendolo molto bene ed essendo chiaramente una persona brillante ha dimostrato in molte discussioni su newsgroup di essere in grado di pilotare CBO a un comportmento corretto anche in situazioni particolari. Da un lato quindi egli mette in luce le potenzialità di CBO, dall’altro però emerge una complessità di gestione che pochi sono in grado di affrontare. Complessità se sembra andare contro il concetto di “Self Tuning”.

In ogni caso CBO si evolve continuamente, nella 10g pare essere molto meglio che sulla 9i e anche nella 11g sono state introdotte interessanti novità come quella dei piani di esecuzione multipli eccellentemente descritta da optimizermagic.

About these ads

Lascia un commento »

RSS feed dei commenti a questo articolo. TrackBack URI

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com. | The Pool Theme.
Entries e commenti feeds.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 71 follower

%d blogger cliccano Mi Piace per questo: