Oracle
 sql >> Database >  >> RDS >> Oracle

Errori ORA-4031 con NFS diretto

Questo è un vecchio problema per me che ho risolto parecchio tempo fa, ma ho pensato di scriverlo finalmente. Quando ho iniziato nella mia nuova azienda, il database di produzione si arrestava in modo anomalo circa una volta al mese con errori di memoria ORA-4031. L'attuale DBA ha ritenuto che il problema fosse la mancanza di variabili di associazione nel codice dell'applicazione, che normalmente è il colpevole più probabile. La mancanza di variabili di collegamento era un problema, ma come ho scoperto presto, il problema non era affatto correlato alle istruzioni SQL. Piuttosto, il problema era dovuto a un bug con Direct NFS. Apparentemente, Direct NFS aveva una perdita di memoria. La perdita di memoria ha interessato il pool condiviso e, dato il tempo sufficiente, la memoria libera nel pool condiviso è diventata inesistente, gli errori ORA-4031 sarebbero stati eliminati e il database si sarebbe bloccato.

Ho collaborato con Oracle Support per confermare che si trattava di un bug. Questo problema è stato archiviato come Bug 10237987 e riguarda le versioni 11.1.0 e 11.2.0. Mi sono imbattuto in questo bug su un cluster RAC a 3 nodi che esegue Oracle Enterprise Linux. Non sono mai stato in grado di ottenere una risposta se questo bug si è verificato su altre piattaforme del sistema operativo o per ambienti non RAC. Il bug fa sì che i pool KGNFS nel pool condiviso crescano in modo significativo nel tempo.

Mi dispiace di non essere mai stato in grado di vedere questo bug fino a una conclusione con Oracle Support. Il supporto voleva che acquisissi una traccia quando il database si è arrestato in modo anomalo a causa di errori ORA-4031 con i pool KGNFS. Quello che non si sono resi conto è che i pool KGNFS hanno causato una carenza di spazio in tutti gli altri pool nel pool condiviso. I pool KGNFS spremevano gli altri pool ed era spesso quando veniva richiesto spazio negli altri pool che veniva raggiunto l'errore ORA-4031. E l'unica volta in cui sono stati generati i file di traccia è stato attendere che le istanze si arrestassero in modo anomalo. Non potevo aspettare che le nostre istanze si arrestassero in modo anomalo a metà giornata solo per acquisire un file di traccia per il supporto Oracle, soprattutto perché il file di traccia potrebbe non provenire nemmeno dai pool KGNFS!

Alla fine, la nostra soluzione è stata interrompere l'utilizzo di Direct NFS nella nostra configurazione. I nostri test non hanno mostrato differenze di prestazioni con o senza Direct NFS. Dato che abbiamo smesso di usare Direct NFS, non abbiamo visto nessuno degli errori ORA-4031. Vedo che il bug è ancora disponibile su Metalink ma non è ancora stato risolto.