Saya menerima kesalahan ini dalam database pengembangan. Itu terjadi pada beberapa permintaan tertentu (menyisipkan dan menghapus sederhana melalui aplikasi .NET). Basis data digunakan oleh satu pengguna, dan kesalahan terjadi terlepas dari berapa lama database berjalan.
Satu-satunya parameter terkait memori yang ditetapkan adalah: MEMORY_TARGET = 1.2G
Oracle 11.2 x64 Edisi Standar Satu Windows Server 2008 R2
Jawaban di atas agak tua.
Dapat meringankan masalah segera tetapi tidak berurusan dengan akar permasalahan. parameter cursor_sharing sekarang mengambil 2 nilai:
FORCE atau EXACT. Dengan EXACT, kueri Anda harus sama persis dengan kursor (sql dengan rencana eksekusi) yang akan digunakan kembali, dengan "FORCE", semua nilai dalam kueri Anda diubah untuk mengikat variabel. Ini sangat berguna ketika aplikasi Anda tidak menggunakan variabel bind. Basis data akan melakukannya untuk Anda.
Jika Anda sudah menggunakan cursor_sharing = FORCE. Maka Anda harus mulai mempertimbangkan untuk menyesuaikan alokasi memori Anda dan tergantung pada parameter memori yang digunakan sistem Anda, Anda dapat memperoleh gagasan tentang di mana Anda harus menetapkan nilai itu dengan pertanyaan berikut:
Saat SGA_TARGET dan SGA_MAX__SIZE / PGA_TARGET dan PGA_MAX_SIZE digunakan (harus cocok): pilih * dari v $ sga_target_advice; pilih * dari v $ pga_target_advice;
Akan terlihat seperti ini: Dalam kasus saya ini adalah sistem pre-prod, tidak akan terlihat bagus untuk waktu yang lama:
Ini adalah SGA_TARGET_ADVICE:
Baris di mana SGA_SIZE_FACTOR adalah 1, adalah pengaturan saat ini. Dalam sistem di mana memori berukuran terlalu kecil, peningkatan SGA_SIZE dan SGA_SIZE_FACTOR akan menunjukkan penurunan dramatis pada ESTD_DB_TIME dan ESTD_DB_TIME_FACTOR. Menambah memori ke titik di mana peningkatan lagi tidak membuat perubahan besar pada estd_db_time lagi.
Dalam kasus saya di sini, dengan beban saya saat ini, saya dapat dengan mudah mengurangi ukuran SGA_TARGET menjadi 80G tanpa menderita hit besar. Namun menguranginya menjadi 57G dan lebih sedikit akan menghasilkan masalah kinerja yang lebih dan lebih dramatis.
Saat MEMORY_TARGET digunakan:
sumber
Sebagai tambahan dari jawaban sebelumnya, ternyata
ALTER SESSION SET NLS_COMP=LINGUISTIC;ALTER SESSION SET NLS_SORT=GENERIC_M_CI;
karena suatu alasan cepat kehabisan memori. Masalah hilang saat menggunakan NLS_SORT lain.sumber