Това е стар проблем за мен, който реших преди доста време, но реших, че най-накрая ще го напиша. Когато започнах в новата си компания, производствената база данни се сриваше около веднъж месечно с грешки в паметта ORA-4031. Настоящият DBA смята, че проблемът е липсата на свързващи променливи в кода на приложението, което обикновено е най-вероятният виновник. Липсата на свързващи променливи беше проблем, но както скоро разбрах, проблемът изобщо не беше свързан със SQL изрази. По-скоро проблемът се дължи на грешка с Direct NFS. Очевидно Direct NFS имаше изтичане на памет в него. Изтичането на памет засегна споделения пул и при достатъчно време свободната памет в споделения пул не съществуваше, грешките ORA-4031 ще бъдат изхвърлени и базата данни ще се срине.
Работих с поддръжката на Oracle, за да потвърдя, че това е грешка. Този проблем е регистриран като грешка 10237987 и засяга версии 11.1.0 и 11.2.0. Попаднах на тази грешка в RAC клъстер с 3 възела, работещ с Oracle Enterprise Linux. Никога не успях да получа отговор, ако тази грешка е възникнала на други операционни платформи или за среди извън RAC. Грешката води до значително увеличаване на KGNFS пуловете в споделения пул с течение на времето.
Съжалявам, че така и не успях да разреша този бъг до заключение с поддръжката на Oracle. Поддръжката искаше да заснема следа, когато базата данни се срине поради грешки ORA-4031 с пуловете KGNFS. Това, което не успяха да осъзнаят, беше, че KGNFS пуловете причиниха недостиг на пространство във всички останали пулове в споделения пул. KGNFS пуловете ще изтласкват другите пулове и често се стига до грешка ORA-4031, когато се иска място в другите пулове. И единственият път, когато бяха генерирани файловете за проследяване, беше да се изчака екземплярът(ите) да се срине. Не можех да седя и да чакам нашите екземпляри да се сринат в средата на деня, само за да заснема файл за проследяване за поддръжка на Oracle, особено след като файлът за проследяване може дори да не е от KGNFS пуловете!
В крайна сметка нашето решение беше да спрем да използваме Direct NFS в нашата конфигурация. Нашето тестване не показа разлики в производителността със или без Direct NFS. Откакто престанахме да използваме Direct NFS, не сме виждали нито една от грешките ORA-4031. Виждам, че грешката все още е там в Metalink, но все още няма поправка.