Saya telah bekerja untuk menyetel beberapa pernyataan SQL dalam database yang baru ditingkatkan, dari Oracle 11.2.0.4 hingga 12.1.0.2. Seperti yang biasa saya lakukan, saya suka menggunakan SQL Developer untuk melihat Explain Plan. Saya terkejut melihat beberapa teks abu-abu di output Explain Plan, yang dapat Anda lihat di bawah.
Reaksi pertama saya adalah ketakutan dan bertanya-tanya mengapa Oracle memiliki Hash Join dan Nested Loops bergabung untuk bergabung dengan dua tabel. Kemudian dalam rencana, saya melihat INDEX (FAST FULL SCAN) dari tabel yang sama yang melakukan INDEX (RANGE SCAN). Mengapa dua akses dari tabel yang sama? Apa yang dilakukan Oracle 12c?
Semua ini adalah bagian dari Pengoptimalan Kueri Adaptif Pengoptimal 12c yang baru. Untuk pernyataan SQL ini, Pengoptimal telah memutuskan untuk menggunakan rencana awal yang melibatkan penggabungan Nested Loops. Untuk paket yang melibatkan join Nested Loops, Oracle akan mengakses tabel dengan Index Range Scan. Pengoptimal juga telah memutuskan bahwa Pemindaian Cepat Indeks Penuh ke dalam Hash Join mungkin merupakan rencana eksekusi lain yang perlu dipertimbangkan. Sebelum eksekusi pernyataan SQL dimulai, Pengoptimal memiliki dua rencana. Satu paket adalah default rencana dan rencana lainnya adalah adaptif rencana. Oracle akan melihat eksekusi pernyataan SQL saat mulai dieksekusi dengan rencana default. Jika Oracle menentukan bahwa ini adalah rencana eksekusi yang salah, Oracle dapat beralih ke rencana adaptif dengan cepat.
Untuk info lebih lanjut tentang Paket Adaptif, lihat buku putih ini dari Oracle. Halaman 3-5 mengilustrasikan Adaptive Join Plan yang sedang beraksi.
Teks abu-abu dalam Rencana Jelaskan di atas hanyalah rencana adaptif. SQL Developer 4.1 menampilkan paket default dan paket adaptif.
Lebih jauh di dalam Rencana Penjelasan adalah bagian XML Lainnya, yang dapat dilihat di bawah. Kita bisa melihat versi db saya adalah 12.1.0.2. Kami juga dapat menunjukkan bahwa tipe info ini adalah Paket Adaptif.
Perhatikan bagian berjudul "baris". Kita dapat melihat setiap baris dari Rencana Jelaskan. Baris di mana "skp=0" adalah bagian dari paket default. Baris di mana “skp=1” adalah paket adaptif, yang sekarang kita ketahui muncul sebagai teks abu-abu di SQL Developers.