Multiple Oracle Instances - apakah ini praktik yang baik?

9

Salah satu klien saya telah menyebarkan produk kami db ke mesin Solaris yang sudah memiliki 3 contoh Oracle. Jadi, saat ini ada 4 contoh Oracle yang berjalan di mesin yang sama. Dan sekarang kami mengalami masalah kinerja.

Saya tidak memiliki akses ke mesin virtual atau mesin lainnya, dan semua alat yang saya miliki adalah alert.log, AWR, dan ADDM. Saya tahu ada sesuatu yang berhubungan dengan banyak contoh, tetapi saya tidak bisa membuktikannya.

Jadi, pertanyaan saya adalah, apakah Anda pernah mengalami situasi yang sama? Bagaimana saya harus menghadapinya? Bagaimana saya bisa mengidentifikasi penyebab masalah kinerja yang terkait dengan beberapa kejadian?

Isaac A. Nugroho
sumber

Jawaban:

8

Isaac, lebih baik kita menjalankan satu instance pada satu server dan mengimplementasikan aplikasi yang berbeda sebagai skema dan layanan dalam database tunggal itu. Jika server memiliki cukup memori, tidak akan ada masalah, jika semua aplikasi berperilaku seperti warga Oracle yang baik. Segera setelah ada aplikasi yang tidak menggunakan variabel mengikat ada rasa sakit yang tumbuh pada host. Hal yang sama untuk aplikasi yang terus membuat koneksi baru setiap beberapa detik, alih-alih menggunakan kembali koneksi yang ada. Hal-hal seperti auto commit juga tidak membantu memperbaiki situasi. Apa perilaku normal aplikasi Anda? Apakah itu melakukan pembaruan besar? Kapan itu melakukan komit? Berapa banyak redo yang dihasilkan / jam? Apakah aplikasi Anda menggunakan variabel bind? Dalam banyak kasus, lokasi file redolog online sangat penting. Jika aplikasi memang menghasilkan banyak pengulangan (atau bersaing dengan aplikasi lain yang melakukan ini), penulis log akan melambat dan menyebabkan penurunan kinerja yang besar karena sesi sedang menunggu penulisan logfile selesai. Memberi Anda pelanggan tata letak disk tempat redo menggunakan disk raid-10 khusus dan lihat seberapa banyak ini membantu. Juga cari tahu situasi alokasi memori. Mungkin ada kebutuhan untuk redistribusi memori yang tersedia secara adil.

saya harap ini membantu

ik_zelf
sumber
Anda benar. Kami memantau instance kami dan melakukan optimasi di mana pun kami bisa. Tetapi kinerjanya tidak stabil, kadang-kadang turun tanpa alasan yang dapat dijelaskan (dari pihak kami)
Isaac A. Nugroho
Isaac, seberapa sering basis data dimulai kembali, versi apa itu dan apakah Anda memiliki histogram pada kolom, yang dihasilkan oleh proses statistik otomatis? Apakah Anda menggunakan variabel mengikat dan pengoptimal pra mengintip?
ik_zelf
2

Menjalankan beberapa instance pada server yang sama dimungkinkan dan dalam beberapa kasus diperlukan. Oratab dirancang khusus untuk menangani pengelolaan beberapa instance. Dalam kasus di mana Anda memiliki beberapa aplikasi independen, mungkin lebih baik untuk memiliki instance untuk setiap aplikasi.

Memiliki memori yang cukup sangat penting. Oracle membangun SGA dalam memori bersama. Jika Anda tidak memiliki cukup memori, SGA atau proses akan mulai bertukar masuk dan keluar. Ini dikenal sebagai thrashing, dan menghasilkan penalti performa yang signifikan.

Dimungkinkan untuk menyetel instance untuk dijalankan dengan SGA yang lebih kecil. Oracle menyediakan alat untuk membantu menyempurnakan ukuran SGA. Jika salah satu instance memiliki SGA yang terlalu besar itu akan menghukum semua instance

Penggunaan lain untuk memori yang penting adalah ruang buffer. Ini bertindak sebagai cache sekunder, dan dapat menghilangkan I / O baca yang signifikan.

Menjalankan sar(dengan asumsi pangkalan Unix O / S) dapat memberi Anda diagnostik yang baik tentang di mana masalahnya. Kemungkinan masalah adalah swapping atau saturasi I / O disk. Menambahkan RAM kemungkinan akan mengatasi salah satu dari masalah ini.

Disk I / O saturasi juga dapat ditangani dengan memindahkan beberapa tablespaces ke disk lain. Saya biasanya mengkonfigurasi Oracle sehingga I / O didistribusikan di disk sebanyak mungkin.

EDIT: Ini adalah beberapa kasus yang mungkin memerlukan contoh terpisah.

  • Selalu diperlukan jika Anda menjalankan versi Oracle yang berbeda di server yang sama. Aplikasi tidak selalu bersertifikat atau mampu bekerja dengan versi terbaru.
  • Anda mungkin menginginkan contoh yang dapat secara otomatis digulung kembali ke titik waktu. (Meskipun saya tidak mendukungnya, saya telah menggunakan ini untuk lingkungan pengujian otomatis.)
  • Jika Anda memiliki referensi skema hard-coded dalam aplikasi, Anda mungkin perlu contoh berbeda untuk menangani tabrakan namespace.
  • Persyaratan keamanan mungkin lebih mudah untuk ditangani dengan menggunakan mesin virtual yang terpisah. Mungkin tepat untuk menggunakan server yang berbeda dalam kasus ini.
  • Menjalankan versi berbeda dari database yang sama (pengembangan, pengujian, penerimaan pengguna, pelatihan, dan produksi) pada server yang sama lebih aman dengan mesin virtual yang terpisah. Saya tidak akan menjalankan semua lingkungan ini di server yang sama, tetapi sering menjalankan dua atau lebih pada server yang sama.
BillThor
sumber
Bisakah Anda memberikan contoh yang diperlukan untuk menjalankan beberapa instance?
ScottCher
1
@ScottCher Saya telah mengedit balasan saya untuk memberikan beberapa kasus.
BillThor
1

Sumber daya yang paling penting adalah RAM.

Setiap instance yang menjalankan Oracle mengalokasikan sejumlah RAM untuknya sendiri, ketika baru saja dimulai dan tidak sedang dimuat.

Kami menjalankan 10g dengan 10 dan 11g dengan 8 instance, tetapi ini adalah server pengembangan. Setelah restart OS, beberapa layanan Oracle tidak memulai secara otomatis dan harus dimulai secara manual: Oradim -startup -sid xxx.

Kami baru saja mulai menggunakan Manajemen Memori Otomatis, tetapi situasinya tetap berbeda dari SQL Server, di mana Anda dapat menambahkan basis data sebanyak yang diberikan oleh ruang disk.

Saya kasus Anda, dengan lebih banyak contoh pada satu mesin SGA untuk setiap contoh menjadi lebih kecil, sql kurang dikompilasi dapat di-cache dan mesin harus melakukan lebih banyak kompilasi sql, yang mengurangi kinerja.

Menambahkan RAM dapat membantu dalam situasi Anda.

bernd_k
sumber
2
Alasan Anda mengatakan SQL server berbeda adalah lebih dari hal nomenklatur. Sekelompok proses dan memori khusus adalah contoh. Jika Anda menambahkan database SQL Server dan itu tidak menambahkan proses baru, itu bukan contoh. Dalam hal ini lebih dekat untuk menambahkan skema.
Stephanie Page