ORA-04031: unable to allocate N bytes of shared memory ("shared pool","...","...","...")
SGA’daki bir bellek havuzu, çoğunlukla shared pool, bitişik bir parça sağlayamadı. Yaygın nedenler bind değişkeni kullanmayan SQL, küçük bir havuz ya da parçalanmadır. Önce bind değişkenlerine geçin; havuzu boşaltmak yalnızca geçici rahatlama sağlar.
ORA-04031 ne demek?
Shared pool, ayrıştırılmış SQL’i, PL/SQL’i ve sözlük verisini tutar. Uygulama yalnızca sabit değerleri farklı binlerce ifade gönderirse her biri kendi belleğini alır, havuz parçalanır ve sonunda bir istek karşılanamaz. Mesaj havuzun adını söyler: shared pool, large pool, java pool ya da streams pool.
ORA-04031 neden olur?
- Bind değişkeni yerine sabit değerlerle kurulan uygulama SQL’i.
- Düşük ayarlanmış
SHARED_POOL_SIZEya daSGA_TARGET. - Uzun çalışma süresinden sonra parçalanma ya da çok büyük bir nesnenin yüklenmesi.
- Bazı sürümlerde, bir release update’in giderdiği bilinen bir hata.
ORA-04031 nasıl çözülür?
- Hangi bileşenin sıkıştığını
V$SGASTATveV$SGA_RESIZE_OPSile görün. - Sabit değerli SQL’i bulun:
V$SQLAREA’yıFORCE_MATCHING_SIGNATURE’a göre gruplayın. - Uygulamayı bind değişkenleriyle düzeltin.
CURSOR_SHARING = FORCE, önce test edilmesi gereken geçici bir çözümdür. - SGA gerçekten küçükse büyütün.
ALTER SYSTEM FLUSH SHARED_POOLkısa süreli rahatlama sağlar ve ardından yoğun bir hard parse dalgası getirir.
ORA-04031 örneği
Yalnızca sabit değerleri farklı ifadeler:
SELECT force_matching_signature, COUNT(*) AS varyant, MIN(sql_text) AS ornek
FROM v$sqlarea
WHERE force_matching_signature <> 0
GROUP BY force_matching_signature
HAVING COUNT(*) > 50
ORDER BY varyant DESC;
SQLlightspeed’de
Bir ifade hata verdiğinde SQLlightspeed’in hata paneli, hata kodunu sade bir Türkçe açıklama ve ne yapmanız gerektiğine dair bir öneriyle; Oracle’ın kendi mesajı ve Oracle dokümantasyonuna bağlantıyla birlikte gösterir — bu hata ve sık görülen onlarca başka hata için.
İlgili hatalar
ORA-00600ORA-01000ORA-00020 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-04031. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.