Saya memiliki permintaan Oracle yang agak rumit yang membutuhkan waktu setengah jam untuk menyelesaikannya. Jika saya mengambil bagian lambat dari kueri dan menjalankannya secara terpisah selesai dalam beberapa detik. Berikut ini adalah tangkapan layar laporan SQL Monitor untuk kueri yang terisolasi:
Berikut ini adalah logika yang sama ketika dijalankan sebagai bagian dari kueri lengkap:
Warna sesuai dengan tabel yang sama di kedua tangkapan layar. Untuk permintaan lambat, Oracle melakukan MERGE JOIN
antara dua tabel yang tidak memiliki kondisi kesetaraan di JOIN
. Sebagai akibatnya, sekitar 150 juta baris perantara tidak perlu diproses.
Saya dapat mengatasi masalah ini dengan petunjuk atau penulisan ulang kueri, tetapi saya ingin memahami sebanyak mungkin akar penyebabnya sehingga saya dapat menghindari masalah ini di masa mendatang dan mungkin mengirimkan laporan bug ke Oracle. Setiap kali saya mendapatkan paket yang buruk UNPIVOT
, teks dalam kueri ditransformasikan menjadi UNION ALL
dalam paket. Untuk menyelidiki lebih lanjut, saya ingin mencegah transformasi permintaan tersebut terjadi. Saya tidak dapat menemukan nama untuk transformasi ini. Saya juga belum dapat menemukan petunjuk kueri atau garis bawah parameter yang akan mencegahnya. Saya menguji pada server pengembangan sehingga semuanya berjalan.
Apakah ada yang bisa saya lakukan untuk mencegah transformasi permintaan UNPIVOT
ke UNION ALL
? Saya menggunakan Oracle 12.1.0.2.
Saya tidak dapat membagikan kueri, nama tabel, atau data karena alasan IP. Saya tidak dapat menghasilkan reproduksi sederhana. Dengan itu, tidak jelas bagi saya mengapa informasi itu diperlukan untuk menjawab pertanyaan. Berikut adalah contoh kueri UNPIVOT bersama dengan kueri yang sama yang diterapkan sebagai UNION ALL.