Bind Variable Peeking, un bel post riassuntivo

Kerry Osborne, recente ingresso del mio blogroll, nonché del mio feed reader, alcuni giorni fa ha pubblicato sul suo blog un bel post intitolato “Bind Variable Peeking – Drives Me nuts“. Osborne spiega come l’introduzione del meccanismo del bind variable peeking, di cui ho molto parlato anche io, abbia portato un po’ di scompiglio.  Il post è interessante e secondo me ben scritto, fa una breve storia che spiega come Oracle con la versione 9i abbia introdotto quel malefico meccanismo che ha fatto impazzire molte persone, me compreso,

Kerry Osborne ribadisce più volte di preferire la stabilità delle prestazioni alle prestazioni in assoluto, cioè preferisce un piano di esecuzione che dia tempi di esecuzione sulle stesse query omogenee, seppur non ottimali, piuttosto che l’instabilità tipica dei piani di esecuzione delle query in Oracle 9 e 10 con l’ottimizzatore basato sui costi (CBO) e il bind peeking. Questo chiaramente se non si può raggiungere l’ottimo, che come spiega Osborne è raggiungibile solo utilizzando i valori “letterali” nelle query che possono soffrire di questi problemi. 11g ha introdotto il meccansimo chiamato “Adaptive Cursor Sharing” che dovrebbe aver migliorato molto la situazione. Osborn poi ricorda anche che in 11g è migliorato molto il sistema di raccolta delle statistiche automatico.

Insomme come ho titolato si tratta di un bel post riassuntivo della grande problematica dell’instabilità dei piani con CBO e il bind peeking.

2 pensieri su “Bind Variable Peeking, un bel post riassuntivo

  1. Alessandro

    ogni volta che ci sono modifiche nel workload nei dati eccetera i piani di esecuzione gioco forza possono cambiare

    lo stesso fatto di prendere le statistiche (per inciso io non sono un fun delle AUTO statistiche) può assolutamente concorrere a questo, ecco perchè è importante fare un backup delle statistiche ogni volta che se ne prendono di nuove ed in questo senso il paradosso di Dave Ensor ripreso anche da Mogens Norgaard, che già avevo postato sul tuo blog, è sempre valido:

    Oracle 11g, Istogrammi e DBMS_STATS.AUTO_SAMPLE_SIZE

    certo il bind variable peeking nelle versioni 9/10 ha certamente dei problemi anche in considerazione con che utilizzo si fa del parametro cursor_sharing ed è normale che il cursor sharing per sistemi OLTP sia essenziale (vedere anche nota metalink 430208.1)

    Complimenti Cristian, ottimo ed utilissimo riassunto

Lascia un commento