Kapan aplikasi menggunakan terlalu banyak sesi?

9

Saya sedang mengerjakan aplikasi client-server yang menggunakan OCI untuk berkomunikasi dengan Oracle. Di masa lalu aplikasi kita sering memperlakukan sesi sebagai sumber daya tak terbatas, sangat mungkin merugikan aplikasi lain yang berbagi server Oracle.

Saya mencoba meyakinkan rekan pengembang saya bahwa penting bagi aplikasi kita untuk bermain baik dengan orang lain dan tidak menjadi sumber daya babi.

Pada poin apa Anda menganggap Oracle DBA sebagai aplikasi yang menggunakan (atau menyalahgunakan) sesi secara berlebihan?

EDIT: Saat ini salah satu konsumen terbesar sesi adalah komponen yang menggunakan pemuatan jalur langsung untuk memuat banyak (20-30) tabel secara paralel.

Aaron Klotz
sumber

Jawaban:

10

Seperti halnya semua hal, itu tergantung.

Jika Anda menggunakan OCI, saya menganggap Anda sedang mengembangkan aplikasi klien / server. Saya biasanya ingin database dalam situasi itu untuk mendukung koneksi server bersama dan saya ingin meminta koneksi server bersama ketika aplikasi terhubung ke database. Itu meningkatkan kinerja aplikasi dengan membatasi jumlah pekerjaan yang harus dilakukan database untuk membuat sesi baru. Itu memiliki efek samping meninggalkan lebih banyak sumber daya yang tersedia di server untuk orang lain. Menggunakan koneksi server bersama memang melibatkan jalur kode yang lebih panjang ketika database mengeksekusi permintaan berikutnya karena permintaan harus dikirim ke proses server bersama tetapi itu biasanya bukan masalah besar jika jumlah proses server bersama masuk akal.

Membuka sejumlah sesi juga bisa menjadi masalah jika DBA tidak menggunakan manajemen PGA otomatis. Jika Anda menggunakan manajemen PGA manual, PGA dikonfigurasi berdasarkan per sesi sehingga setiap sesi dapat mengalokasikan secara terpisah SORT_AREA_SIZEuntuk jenis di antara komponen PGA lainnya. Jika Anda membuat banyak sesi dalam basis data menggunakan manajemen PGA manual dan setiap sesi mencoba memaksimalkan penggunaan PGA-nya, Anda dapat dengan mudah membuat server RAM kelaparan dan menyebabkan masalah kinerja bagi semua orang. Dengan asumsi Anda menggunakan Oracle 10.1 atau lebih baru, manajemen PGA otomatis tersedia. Dalam hal itu, DBA mengkonfigurasi a PGA_AGGREGATE_TARGET(atau memasukkan PGA dalam MEMORY_TARGETin 11g) dan database memastikan bahwa PGA agregat di semua sesi terbatas sehingga database kehabisan sumber daya.

Jika database mendukung koneksi server bersama, aplikasi Anda mendapat koneksi server bersama, dan database menggunakan manajemen PGA otomatis, kebanyakan DBA tidak akan terlalu peduli berapa banyak sesi yang Anda buat.

Sekarang, jika Anda membuat banyak sesi sehingga Anda bisa melakukan lebih banyak pekerjaan secara paralel, itu akan membuat masalah kinerja melebihi dan di atas jumlah sesi. Cukup mudah untuk mengkonfigurasi database untuk mendukung 1000 sesi, misalnya, jauh lebih sulit untuk mengkonfigurasi database agar tidak mati dalam tumpukan jika semua 1000 sesi secara bersamaan mengeluarkan permintaan tebal terhadap gudang data. Jika aplikasi Anda menggunakan semua sumber daya yang tersedia untuk database untuk pertanyaan Anda, DBA mungkin ingin mempertimbangkan untuk menggunakan Oracle Resource Manageruntuk memprioritaskan aplikasi yang berbeda dan / atau pengguna yang berbeda. Misalnya, DBA dapat mengonfigurasi Resource Manager sehingga jika utilisasi CPU mencapai 100%, aplikasi Anda dalam agregat mendapat 50% dari CPU, beberapa aplikasi lain dalam agregat mendapat 25%, dan yang lainnya mendapatkan 25% sisanya . Jika tidak ada permintaan lain yang tertunda, aplikasi Anda akan bebas menggunakan semua 100% CPU.

Jika Anda menjalankan hal-hal secara paralel, mungkin juga berguna untuk menyelidiki kemampuan Oracle untuk menjalankan pernyataan secara paralel karena itu mungkin melibatkan lebih sedikit overhead daripada menulis kode paralelisasi Anda sendiri. Saya berharap, misalnya, bahwa akan jauh lebih mudah dan sangat mungkin lebih cepat untuk menulis aplikasi klien yang secara serial mengirimkan pernyataan yang menggunakan permintaan paralel Oracle untuk mengeksekusi daripada membuka beberapa sesi dan mengeksekusi setiap pernyataan dari utas terpisah dari aplikasi Anda sementara Oracle tidak menggunakan kueri paralel untuk menjalankan pernyataan apa pun. Jika Anda menggunakan kueri paralel, basis data juga dapat menyesuaikan jumlah budak paralel yang muncul sehingga ketika database sangat sibuk, budak paralel yang lebih sedikit dimulai dan ketika basis data relatif kosong, lebih banyak budak paralel yang dimulai.

Gua Justin
sumber