DBAtlas · Veritabanı operasyon atlası

ORA-04031: Unable to allocate N bytes of shared memory

Oracle

Ne demek?

Oracle, paylaşımlı bellek havuzunda (genellikle shared pool ya da large pool) istenen boyutta ardışık bellek ayıramadı. SGA'daki bir bileşen bellek baskısı altında.

Neden olur?

Bind değişkeni kullanılmayan (literal dolu) çok sayıda benzersiz SQL nedeniyle shared pool'un parçalanması, yetersiz SHARED_POOL_SIZE, çok fazla eşzamanlı bağlantı, büyük PL/SQL paketleri veya ASMM/AMM yanlış boyutlandırması.

Nasıl çözülür?

Hata mesajındaki alanın hangi havuz olduğuna bakın (shared pool, large pool vb.). Kısa vadede: ALTER SYSTEM FLUSH SHARED_POOL (dikkat: üretimde tüm SQL'lerin yeniden parse edilmesine, yani geçici hard parse fırtınasına yol açar ve parçalanmayı kalıcı olarak çözmez). Kalıcı çözüm: bind değişkeni kullanımını zorlayın (CURSOR_SHARING dahil), SGA_TARGET / SHARED_POOL_SIZE / LARGE_POOL_SIZE değerlerini artırın. Sık kullanılan paketleri DBMS_SHARED_POOL.KEEP ile bellekte tutun. V$SGASTAT ile bellek dağılımını inceleyin.

DBAtlas'ta aç →

Aynı motorda diğer kayıtlar