Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błędy ORA-4031 z Direct NFS

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy możliwe jest zapytanie kolumny oddzielonej przecinkami dla określonej wartości?

  2. Kod do wywołania funkcji w pakiecie z C# i ODP.NET

  3. Jak używać parametru dynamicznego w klauzuli IN zapytania o nazwie JPA?

  4. Oświadczenie FORALL z klauzulą ​​INDICS-OF Bound w bazie danych Oracle

  5. Agregowanie danych za pomocą funkcji grupowych (grupuj według wyroczni)