sql >> Databasteknik >  >> RDS >> Oracle

ORA-4031-fel med Direct NFS

Det här är ett gammalt problem för mig som jag löste för ett tag sedan, men jag tänkte att jag äntligen skulle skriva upp det. När jag började på mitt nya företag kraschade produktionsdatabasen ungefär en gång i månaden med ORA-4031 minnesfel. Den nuvarande DBA ansåg att problemet var bristen på bindningsvariabler i applikationskoden, vilket normalt är den mest troliga boven. Brist på bindningsvariabler var ett problem, men som jag snart fick reda på var problemet inte alls relaterat till SQL-satser. Snarare berodde problemet på en bugg med Direct NFS. Tydligen hade Direct NFS en minnesläcka. Minnesläckan påverkade den delade poolen och givet tillräckligt med tid blev det lediga minnet i den delade poolen obefintligt, ORA-4031-fel skulle kastas och databasen kraschade.

Jag arbetade med Oracle Support för att bekräfta att detta var en bugg. Det här problemet registrerades som Bug 10237987 och påverkar versionerna 11.1.0 och 11.2.0. Jag stötte på den här buggen på ett RAC-kluster med 3 noder som körde Oracle Enterprise Linux. Jag kunde aldrig få ett svar om detta fel inträffade på andra OS-plattformar eller för icke-RAC-miljöer. Felet gör att KGNFS-poolerna i den delade poolen växer avsevärt över tiden.

Jag beklagar att jag aldrig kunde se den här buggen till en slutsats med Oracle Support. Support ville att jag skulle fånga ett spår när databasen kraschade på grund av ORA-4031-fel med KGNFS-poolerna. Vad de inte insåg var att KGNFS-poolerna orsakade brist på utrymme i alla andra pooler i den delade poolen. KGNFS-poolerna klämde ut de andra poolerna och det var ofta när utrymme efterfrågades i de andra poolerna som ORA-4031-felet nåddes. Och den enda gången spårningsfilerna genererades var att vänta på att instansen/instanserna skulle krascha. Jag kunde inte sitta och vänta på att våra instanser skulle krascha mitt på dagen bara för att fånga en spårningsfil för Oracle Support, speciellt eftersom spårningsfilen kanske inte ens kommer från KGNFS-poolerna!

Till slut var vår lösning att sluta använda Direct NFS i vår konfiguration. Våra tester visade inga prestandaskillnader med eller utan Direct NFS. Sedan vi slutade använda Direct NFS har vi inte sett något av ORA-4031-felen. Jag ser att buggen fortfarande finns ute på Metalink men ingen åtgärd än.


  1. Hur konverterar man effektivt text till nummer i Oracle PL/SQL med icke-standard NLS_NUMERIC_CHARACTERS?

  2. Hur infogar man pandas dataram via mysqldb i databasen?

  3. Konvertera från datum till epok-Oracle

  4. java.lang.IllegalArgumentException:kolumnen '_id' finns inte