To dla mnie stary problem, który rozwiązałem jakiś czas temu, ale pomyślałem, że w końcu go napiszę. Kiedy zaczynałem w mojej nowej firmie, produkcyjna baza danych ulegała awarii raz w miesiącu z błędami pamięci ORA-4031. Obecny administrator DBA stwierdził, że problemem jest brak zmiennych wiążących w kodzie aplikacji, co zwykle jest najbardziej prawdopodobnym winowajcą. Problemem był brak zmiennych wiążących, ale jak się szybko dowiedziałem, nie był on w ogóle związany z wyrażeniami SQL. Problem był spowodowany raczej błędem w Direct NFS. Najwyraźniej Direct NFS miał w sobie wyciek pamięci. Wyciek pamięci wpłynął na pulę współdzieloną i po wystarczającej ilości czasu w puli współdzielonej zniknęła wolna pamięć, błędy ORA-4031 zostały wyrzucone, a baza danych uległa awarii.
Pracowałem z Oracle Support, aby potwierdzić, że to błąd. Ten problem został zgłoszony jako błąd 10237987 i dotyczy wersji 11.1.0 i 11.2.0. Natknąłem się na ten błąd w 3-węzłowym klastrze RAC z systemem Oracle Enterprise Linux. Nigdy nie udało mi się uzyskać odpowiedzi, jeśli ten błąd wystąpił na innych platformach OS lub w środowiskach innych niż RAC. Ten błąd powoduje, że z czasem pule KGNFS w puli współdzielonej znacznie się powiększają.
Żałuję, że nigdy nie udało mi się doprowadzić tego błędu do końca w Oracle Support. Pomoc techniczna chciała, abym uchwycił ślad, gdy baza danych uległa awarii z powodu błędów ORA-4031 w pulach KGNFS. Nie zdali sobie sprawy, że pule KGNFS spowodowały niedobór miejsca we wszystkich innych pulach w puli współdzielonej. Pule KGNFS wyciskały inne pule i często, gdy zażądano miejsca w innych pulach, wystąpił błąd ORA-4031. A jedynym momentem, w którym wygenerowano pliki śledzenia, było oczekiwanie na awarię instancji. Nie mogłem siedzieć i czekać, aż nasze instancje ulegną awarii w środku dnia tylko po to, aby przechwycić plik śledzenia dla Oracle Support, zwłaszcza że plik śledzenia może nawet nie pochodzić z pul KGNFS!
Ostatecznie naszym obejściem było zaprzestanie używania Direct NFS w naszej konfiguracji. Nasze testy nie wykazały różnic w wydajności z lub bez Direct NFS. Ponieważ zrezygnowaliśmy z używania Direct NFS, nie widzieliśmy żadnego z błędów ORA-4031. Widzę, że błąd nadal występuje w Metalink, ale na razie nie ma rozwiązania.