Bind Variable Peeking

lunedì 31 dicembre 2007 alle 31:48 | Pubblicato su Performance Tuning | 4 commenti

Oggi ho trovato un bel regalo di fine anno fra le mie mail un commento di Alberto Dell’Era a un mio post di qualche mese fa su cui mi interrogavo sulla possibilità di reperire i valori delle variabili usati da Oracle al primo parse delle query (hard parse) per calcolare i piano di esecuzione, quelli che sono definiti “peeked binds”, ovvero quei valori passati alle bind variables quando Oracle ricalcola il piano di esecuzione per una query, parte del meccanismo chiamato appunto “bind variable peeking”.

Al riguardo ho già scritto un po’ di post, ma l’argomento è abbastanza complesso, basta vedere il blog di Jonathan Lewis o ancora meglio dare un’occhiata al suo libro.

L’informazione datami da Alberto Dell’Era è l’anello mancante per una serie di analisi che si possono fare e che subito oggi ho cominciato a fare.

Comincio con il precisare che la modalità non documentata da Oracle e descritta da Alberto è presente in 10gR2 non in 10gR1. D’altronde ho l’impressione che oracle disincentevi l’uso della versione 10.1 a favore di 10.2 e 11.1

Ho cominciato a testare questa fantastica caratteristica presso un nostro cliente che ha quattro database, cioè quattro installazioni del nostro software quasi identiche. Pochi giorni fa è stata messa in piedi un’applicazione che si collega a tutti e quattro i database per fare dei report con delle statistiche globali. E’ emerso subito un problema: la stessa query sui quattro database si comportava in modo diverso. Ciò che principalmente differenzia i database è che in due di essi è stato impostato a livello di database il parametero OPTIMIZER_MODE=RULE. Cosa imposta a suo tempo dai miei superiori e a cui non ho potuto controbattere seriamente a causa dei problemi di cui ho già parlato. Una effetto di tale scelta a cui non avevo pensato, ma che in effetti è del tutto ragionevole e sensato è che in tal caso il bind peeking è disattivato. Infatti usando DBMS_XPLAN.DISPLAY_CURSOR su tali database la sezione “Peeked Binds” non viene visualizzata.

Pensandoci e ripensandoci trovo quasi sciocco il mio stupore a questa scoperta, sembra così ovvio! Ora purtroppo confesso di essere mooolto indietro con la lettura del libro di Jonathan Lewis e quindi di nell’analisi di una particolare query sto facendo fatica a capire i ragionamenti dell’ottimizzatore. Il punto è che devo capire se effettivamente con il settaggio dell’ottimizzatore RULE mi trovo con dei casi in cui CBO farebbe meglio.

4 commenti »

RSS feed for comments on this post. TrackBack URI

  1. Regalo gradito – bene🙂

    Usando l’RBO l’hash join non è abilitata, dunque se trovi una query che sarebbe ottima con la hash join … o con altre feature che sono disponibili sono con il CBO.

    Oppure, una query che usa gli indici eccessivamente, anche quando sarebbe molto meglio una full table scan. Il CBO sceglie se usare l’indice o fare una FTS a seconda del costo, l’RBO sceglie sempre e comunque di usare l’indice.

    Tra parentesi: puoi usare il CBO e disabilitare il bind variable peeking con il parametro non documentato (e che quindi in teoria andrebbe settato solo con l’Ok di Oracle Support) “_optim_peek_user_binds”=false. Non l’ho mai usato, in quanto piani simili li ottieni eliminando gli istogrammi dalle colonne su cui insistono gli statement ballerini (che mal si mischiano con le bind variables in generale), e preferisco quest’ultima strategia.

  2. Nel post sopra c’è un errore di battitura: “o con altre feature che sono disponibili SOLO con il CBO.”

  3. Grazie al tuo post posso aggiungere la mia esperienza di questi giorni in merito:
    http://rdbland.blogspot.com/2008/01/bind-peeking-e-piani-di-esecuzione-dty.html
    🙂

  4. […] Le statistiche in realtà erano regolarmente aggiornate, dal task attivato automaticamente alla creazione del database, quindi tutte le notti alle 22 e i fine settimana. Rimaneva la seconda ipotesi, qui mi sono state di molto aiuto le mie ricerche durate un sacco di tempo, ma soprattutto l’aiuto di Alberto Dell’Era di cui ho parlato, poco più di un anno fa. […]


Lascia un commento

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.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: