Saran Anda benar, akan lebih baik untuk melakukan semua tugas database sekaligus. Ada 2 dampak kinerja utama dalam skenario Anda
- Pengalihan konteks pro*c antara mesin SQL dan mesin PL/SQL untuk menjalankan utas Anda beberapa kali. Biasanya masalah terbesar dalam banyak panggilan PL/SQL dari aplikasi klien.
- Overhead tumpukan jaringan (TNS) dalam komunikasi antara aplikasi pro*c Anda dan mesin database - terutama jika aplikasi Anda berada di host fisik yang berbeda.
Karena itu, Anda membuat kumpulan koneksi di ujung aplikasi, pendengar TNS juga harus memiliki kumpulan proses bayangan server yang diwariskan yang menunggu setiap koneksi jaringan (ini diatur di listener.ora).
Login/logoff OCI ketika proses bayangan sudah menunggu koneksi sangat cepat dan bukan faktor latensi yang besar - saya tidak khawatir tentang ini kecuali proses bayangan baru di server harus dimulai - maka itu bisa menjadi panggilan yang sangat mahal. Saat Anda menggunakan penyatuan koneksi di sisi klien, ini biasanya bukan masalah tetapi hanya sesuatu yang perlu dipertimbangkan karena threading dalam panggilan Anda. Setelah Anda menghabiskan kumpulan proses bayangan server, Anda akan melihat penurunan besar jika pendengar TNS harus memulai lebih banyak proses bayangan server.
Edit sebagai jawaban atas pertanyaan baru:
-
Hal ini sangat terkait. Seperti yang ditunjukkan sebelumnya, Anda harus meminimalkan jumlah panggilan plsql dan sql dalam aplikasi C++ Anda. Setiap panggilan PLSQL dalam panggilan aplikasi C++ Anda memanggil mesin SQL yang kemudian memanggil mesin PLSQL untuk panggilan prosedur. Jadi, jika Anda membagi prosedur menjadi 2 - Anda menggandakan sakelar konteks SQL ke PLSQL yang merupakan sakelar yang lebih mahal seperti yang diuraikan oleh artikel Tom Kyte dan pengalaman pribadi saya.
-
Dijawab di 1. Tapi seperti yang saya katakan sebelumnya, overhead komunikasi adalah yang kedua kecuali host Anda berada di jaringan fisik yang berbeda dan jenis data yang Anda transfer. Misalnya parameter objek C++ yang besar dan kumpulan hasil Oracle yang besar dengan banyak panggilan jelas akan memengaruhi latensi komunikasi dengan perjalanan pulang pergi. Ingatlah bahwa dengan lebih banyak panggilan PLSQL, Anda juga menambahkan lebih banyak lalu lintas SQLNET untuk pengaturan untuk setiap koneksi dan kumpulan hasil.
-
tidak ada 3. pertanyaan
-
PLSQL ke SQL dalam mesin PLSQL dapat diabaikan jadi jangan terpaku. Letakkan semua panggilan SQL Anda dalam 1 panggilan PLSQL untuk throughput kinerja maksimum. Jangan membagi panggilan hanya untuk menjadi lebih fasih dengan kinerja yang mahal.