sql >> Database teknologi >  >> RDS >> Oracle

12c Adaptive planer i SQL Developer

Jeg har arbejdet på at tune nogle SQL-sætninger i en nyligt opgraderet database, fra Oracle 11.2.0.4 til 12.1.0.2. Som jeg typisk gør, kan jeg godt lide at bruge SQL Developer til at se Explain Plan. Jeg var overrasket over at se noget grå tekst i Explain Plan-outputtet, som du kan se nedenfor.

Min første reaktion var at flippe ud og undre mig over, hvorfor Oracle har både en Hash Join og en Nested Loops join til at forbinde to borde. Senere i planen ser jeg et INDEX (FAST FULL SCAN) af den samme tabel, som har INDEX (RANGE SCAN) udført. Hvorfor to adgange til samme tabel? Hvad laver Oracle 12c?

Alt dette er en del af den nye 12c Optimizers Adaptive Query Optimization. Til denne SQL-sætning har Optimizer besluttet at bruge en indledende plan, der involverer Nested Loops-sammenføjningen. For planen, der involverer Nested Loops-tilslutningen, vil Oracle få adgang til tabellen med en Index Range Scan. Optimizeren har også besluttet, at en indekshurtig fuld scanning til en Hash Join kan være en anden eksekveringsplan at overveje. Inden udførelsen af ​​SQL-sætningen begynder, har Optimizer to planer. En plan er standard plan og den anden plan er den adaptive plan. Oracle vil overvåge udførelsen af ​​SQL-sætningen, når den begynder at udføre med standardplanen. Hvis Oracle fastslår, at dette er den forkerte udførelsesplan, kan den skifte til den adaptive plan med det samme.

For mere information om adaptive planer, se denne hvidbog fra Oracle. Side 3-5 illustrerer Adaptive Join Plans i aktion.

Den grå tekst i Forklar-planen ovenfor er simpelthen den adaptive plan. SQL Developer 4.1 viser både standardplanen og den adaptive plan.

Længere nede i Explain Plan er afsnittet Anden XML, som kan ses nedenfor. Vi kan se min db-version er 12.1.0.2. Vi kan også infotypen viser, at dette er en adaptiv plan.

Bemærk afsnittet med titlen "rækker". Vi kan se hver række i Forklarplanen. De linjer, hvor "skp=0" er en del af standardplanen. Linjerne, hvor "skp=1" er den adaptive plan, som vi nu ved vises som grå tekst i SQL Developers.


  1. Håndtering af NULL'er i SQL Server

  2. OPTION (GENKOMPILER) er altid hurtigere; Hvorfor?

  3. 4 måder at formatere et tal uden decimaler i Oracle

  4. Sådan får du slutningen af ​​måneden i MariaDB