Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Perilaku Oracle Parallel Query dengan alat IDE sebagai Pengembang SQL atau Toad

Pertanyaan Anda tidak benar-benar selesai. Meskipun kueri Anda hanya mengambil 1000 baris pertama, Pengembang SQL hanya mengambil 50 baris pertama dari 1000 baris tersebut. IDE tidak akan menutup kursor sampai Anda menggulir ke baris terakhir. Setelah Anda mengambil semua data, proses paralel itu menghilang. Pastikan Anda melihat "Semua Baris Diambil:1000 dalam X detik", alih-alih ""Mengambil 50 baris dalam Y detik". (Saya berharap Pengembang SQL akan membuatnya lebih jelas secara visual bahwa ada baris tambahan yang menunggu.) Anda tidak akan lihat masalah ini di SQL*Plus karena SQL*Plus selalu mengambil semua baris.

Ketika hanya N baris pertama yang diambil, proses paralel tersebut "AKTIF" tetapi tidak melakukan apa pun. Anda harus dapat mengabaikan sesi tersebut karena tidak menggunakan sumber daya yang signifikan.

Jika Anda hanya khawatir tentang jumlah sesi paralel, Anda mungkin ingin menyesuaikan harapan Anda. Saya dulu berada dalam situasi yang sama seperti Anda - terus-menerus memberi tahu pengguna bahwa kueri (tidak lengkap) mereka memonopoli semua sesi paralel. Akhirnya, saya menemukan bahwa itu hanya masalah karena saya telah menciptakan sumber daya yang langka secara artifisial. Proses paralel Oracle biasanya ringan, dan database dapat mendukung proses paralel yang jauh lebih banyak daripada yang diperkirakan kebanyakan orang.

Apa nilai parameter Anda untuk PARALLEL_MAX_SERVERS, PARALLEL_THREADS_PER_CPU, dan CPU_COUNT? Lihat nilai default untuk PARALLEL_MAX_SERVERS . Per manual, nomor defaultnya adalah:PARALLEL_MAX_SERVERS = PARALLEL_THREADS_PER_CPU * CPU_COUNT * concurrent_parallel_users * 5 .

Sebagian besar DBA melihat jumlah maksimum utas paralel dalam ratusan, panik, dan kemudian mengurangi jumlah itu. Dan kemudian kami mulai meneriaki pengembang karena menggunakan sumber daya yang tidak penting yang dibatasi secara artifisial. Sebagai gantinya, kita harus menghidupkan kembali nomor ke default, dan mengabaikan sesi paralel acak. Jika pengguna tidak melebihi batas IO atau CPU, tidak masalah berapa banyak utas paralel yang mereka gunakan.

(Dengan kemungkinan pengecualian untuk mencegah massif penggunaan sesi kueri paralel. Tempatkan pengguna Anda di profil yang berbeda, dan tetapkan SESSIONS_PER_USER mereka menjadi beberapa lusin. JANGAN batasi hanya 1 atau 2. IDE memerlukan sesi tambahan untuk banyak tab, proses latar belakang yang mengambil metadata, dan sesi debug. Jika Anda menetapkan batas ke 2, pengembang Anda tidak akan dapat menggunakan IDE dengan benar.)

EDIT (tanggapan terhadap komentar)

Saya tidak yakin apakah Anda dapat membaca banyak tentang status koordinator kueri . QC melakukan beberapa hal, tetapi idealnya sebagian besar waktu akan menganggur sementara sesi paralel menangani sebagian besar pekerjaan.

Dengan model produsen/konsumen, setengah dari sesi paralel mungkin menerima data tetapi tidak benar-benar melakukan apa pun - seperti hanya struktur memori dalam beberapa operasi. Sesi paralel dapat beralih antara aktif dan tidak aktif, karena tidak semua langkah memerlukan banyak sesi. Tapi kami tidak ingin Oracle menutup sesi di tengah, karena mungkin diperlukan nanti dan kami tidak ingin membuang waktu untuk membuka dan menutup sesi.

Ada lusinan faktor yang memengaruhi derajat paralelisme, tetapi sejauh yang saya tahu, peningkatan PARALLEL_MAX_SERVERS tidak akan memengaruhi jumlah server paralel yang diminta untuk satu pernyataan. (Tetapi jika pernyataan sudah meminta lebih banyak server daripada maksimum, peningkatan parameter dapat memengaruhi jumlah sesi yang dialokasikan).

Mungkin terasa seperti pernyataan SQL hanya secara acak mengambil semua sesi paralel, tetapi pada akhirnya perhitungan DOP hampir selalu mengikuti aturan deterministik. Hanya saja aturannya begitu rumit, sulit untuk mengatakan cara kerjanya. Misalnya, satu titik kebingungan yang umum adalah bahwa setiap kali kueri menambahkan pengurutan atau pengelompokan, jumlah sesi paralel menjadi dua kali lipat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Haruskah saya menghapus atau menonaktifkan baris dalam database relasional?

  2. Pendapat tentang otentikasi antara aplikasi dan tingkat database

  3. dbms_output.put_line

  4. Mengonversi perbedaan waktu ke format tertentu di Oracle

  5. CX_Oracle - mengimpor data dari Oracle ke kerangka data Pandas