Set Server Paralel: PARALLEL_DEGREE_LIMIT membatasi tingkat paralelisme, tetapi jika kueri Anda mengurutkan atau mengelompokkan jumlah proses paralel dapat dua kali lipat (dua set server untuk memungkinkan paralelisme antar-proses). Itu menjelaskan mengapa Anda akan melihat 48 proses paralel bahkan dengan batas 24. Ini juga terjadi jika Anda menggunakan manajer sumber daya untuk membatasi DOP.
Petunjuk paralel: PARALLEL_DEGREE_LIMIT hanya berlaku untuk pernyataan yang menggunakan derajat paralelisme otomatis. Pernyataan apa pun yang menggunakan derajat kode-keras, atau bahkan segala jenis petunjuk paralel tingkat objek, akan mengabaikan batas. Jika Anda memiliki petunjuk itu, itu bisa menjelaskan mengapa Anda melihat 96 beberapa kali.
Mengkalibrasi IO: Mungkin DOP otomatis tidak digunakan, dan dengan demikian batasnya tidak diikuti, karena IO tidak dikalibrasi . Kueri ini akan memberi tahu Anda jika IO telah dikalibrasi:
select * from V$IO_CALIBRATION_STATUS;
Saya pernah melihat ini menyebabkan masalah sebelumnya, tetapi sistem saya saat ini tidak dikalibrasi dan DOP otomatis sepertinya berfungsi dengan baik. Anda dapat mengetahui apakah ini benar-benar masalah dengan melihat bagian Catatan pada rencana penjelasan. Jika Anda melihat sesuatu seperti - automatic DOP: Computed Degree of Parallelism is 2
Anda baik-baik saja, tetapi Anda tidak ingin melihatnya automatic DOP: skipped because of IO calibrate statistics are missing
.
Tingkatkan PARALLEL_MAX_SERVERS: Alih-alih khawatir kehabisan server paralel, saya sarankan Anda meningkatkan PARALLEL_MAX_SERVERS secara signifikan. Anda setidaknya harus mencoba untuk kembali ke nilai default , PARALLEL_THREADS_PER_CPU x CPU_COUNT x concurrent_parallel_users x 5, antara 240 dan 960 tergantung pada pengaturan memori Anda.
Angka-angka tinggi itu terdengar konyol bagi banyak DBA, tetapi mereka benar-benar masuk akal karena alasan berikut:
- Server paralel Oracle lebih ringan dari yang diperkirakan kebanyakan orang. (Dan hampir tidak ada yang pernah mengujinya, mereka hanya menemukan satu situasi di mana DOP besar menyebabkan masalah dan menganggap bahwa DOP tinggi selalu buruk.)
- Sudah biasa menjalankan kueri adhoc dalam alat GUI yang hanya mengambil 50 baris pertama, tetapi masih menggunakan puluhan server paralel. Kueri ini TIDAK mengkonsumsi sumber daya yang signifikan, kecuali PARALLEL_MAX_SERVERS terlalu rendah. Kemudian orang-orang dimarahi karena menjalankan pertanyaan yang masuk akal, yang dapat menyebabkan beberapa situasi buruk.
- DOP yang sangat besar untuk satu permintaan tidak selalu buruk. Semua orang berasumsi bahwa jika Anda terus meningkatkan DOP, overhead akan menjadi terlalu tinggi dan kinerja akan turun secara signifikan. Tetapi pada banyak sistem saya telah menemukan bahwa bahkan DOP yang sangat tinggi akan menghasilkan kinerja yang lebih baik, meskipun pasti ada pengembalian yang menurun, dan itu bisa sangat tidak adil untuk sesi lain. Tapi jangan hanya menebak, coba saja; ambil kueri dan jalankan dengan semua jenis DOP, hingga 1000. Anda mungkin terkejut.
- Ya, terlalu banyak paralelisme bisa jadi buruk. Tetapi apa yang lebih buruk untuk sistem, memiliki sedikit lebih banyak daripada jumlah sesi yang optimal, atau memaksakan permintaan serial dan pada dasarnya membunuh pekerjaan penting? Anda harus memantau sistem sebelum menerapkan batasan yang sewenang-wenang.