Domanda

Che cosa indica vedere una query che ha un basso costo nel piano esplicativo ma un conteggio elevato viene conteggiato nell'autotrace? In questo caso il costo era negli anni 100 e i CR erano in milioni.

È stato utile?

Soluzione

Il costo può rappresentare due cose diverse a seconda della versione e se si sta eseguendo o meno in modalità di calcolo basata su cpu.

In breve, il costo rappresenta la quantità di tempo per cui l'ottimizzatore si aspetta che venga eseguita la query, ma viene espresso in unità della quantità di tempo impiegata dalla lettura di un singolo blocco. Ad esempio, se Oracle si aspetta che un singolo blocco letto richieda 1 ms e che la query richieda 20 ms, il costo è uguale a 20.

I guadagni coerenti non coincidono esattamente con questo per una serie di motivi: il costo include i guadagni non correnti (correnti) (ad es. lettura e scrittura dei dati temporanei), il costo include il tempo della CPU e un guadagno coerente può essere un multiblocco leggi invece di un singolo blocco letto e quindi hanno una durata diversa. Oracle può anche ottenere la stima del costo completamente errata e potrebbe finire per richiedere molto più o meno coerenti rispetto alla stima suggerita.

Un metodo utile che può spiegare le disconnessioni tra il piano di esecuzione previsto e le prestazioni effettive è il "feedback sulla cardinalità". Vedi questa presentazione: http://www.centrexcc.com/Tuning% 20by% 20Cardinality% 20Feedback.ppt.pdf

Altri suggerimenti

Nella migliore delle ipotesi, il costo è la stima dell'ottimizzatore del numero di I / O che una query eseguirà. Quindi, nella migliore delle ipotesi, è probabile che il costo sia accurato solo se l'ottimizzatore ha trovato un piano molto buono-- se la stima del costo dell'ottimizzatore è corretta e il piano è l'ideale, ciò significa generalmente che non ti preoccuperai mai guardando il piano perché quella query funzionerà abbastanza bene.

La coerenza ottiene, tuttavia, è una misura effettiva del numero di acquisizioni effettivamente eseguite da una query. Quindi questo è un benchmark molto più preciso da usare.

Sebbene ci siano molte, molte cose che possono influenzare il costo e alcune cose che possono influenzare il numero di guadagni coerenti, è probabilmente ragionevole aspettarsi che se si hanno un costo molto basso e un numero molto elevato di coerenti ottiene che l'ottimizzatore sta probabilmente lavorando con stime scarse della cardinalità dei vari passaggi (la colonna ROWS in PLAN_TABLE indica il numero previsto di righe restituite in ciascun passaggio). Ciò può indicare che hai statistiche mancanti o obsolete, che manchi alcuni istogrammi, che i tuoi parametri di inizializzazione o le statistiche di sistema sono in qualche modo sbagliati o che il CBO ha problemi per qualche altro motivo nella stima della cardinalità dei risultati.

Quale versione di Oracle stai usando?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top