ORACLE SQL Tuning basato su suggerimenti: qualche bene sulle versioni recenti?
-
13-11-2019 - |
Domanda
Ho letto che il CBO di Oracle (su versioni recenti) è così buono che anche se viene fornito l'ordine di join possibile, CBO prende automaticamente l'ordine di join. Quindi i suggerimenti come ordinati faranno del bene nelle versioni recenti (10,11)?. È possibile per il CBO perdere un ordine di join ottimale?. Grazie.
Soluzione
La mia esperienza personale è che con Oracle 10G / 11G, difficilmente puoi migliorare qualsiasi domanda con suggerimenti. Molto spesso si rivelano per esibirsi peggio nel modo in cui tu pensare è ottimale. Il CBO è davvero migliorato drasticamente.
Esistono ancora alcune limitazioni (molto remote) alle strutture di trasformazione delle query, in particolare con piuttosto complesse OUTER JOIN
costrutti, perché internamente, la sintassi ANSI è ancora mappata su alcuni costrutti oracoli arcaici che coinvolgono il (+)
operatore. A parte questo, e altri casi molto remoti, non penso più che i suggerimenti siano necessari.
Puoi sintonizzarti molto meglio riscrivendo un po 'di SQL o aggiungendo vincoli/indici. Naturalmente, queste cose sono vere solo se le tue statistiche e gli istogrammi sono corretti, aggiornati e sensibili, come ha commentato correttamente Skaffman
Altri suggerimenti
I risultati di Oracle CBO dipendono da così tanti Parametri, che difficilmente posso prevedere il piano risultante nel sistema reale. Come regola generale ti suggerisco di non usare suggerimenti, se non sei sicuro di te dovere usali.
Per quanto riguarda ORDERED
Suggerimento della mia esperienza c'è pochissime volte in cui dovresti dire a Oracle l'ordine esatto per i giunti.
Ad ogni modo, il modo migliore per scoprirlo è fare alcuni esperimenti da solo, provare e scegliere la soluzione migliore :)
Ti suggerisco di leggere Oracle Effective By Design di Tom Kyte: c'è un ottimo capitolo sull'ottimizzazione delle query e su come funziona CBO.