Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erros ORA-4031 com NFS direto


Este é um problema antigo para mim que resolvi há algum tempo, mas achei que finalmente poderia escrevê-lo. Quando comecei na minha nova empresa, o banco de dados de produção travava cerca de uma vez por mês com erros de memória ORA-4031. O DBA atual descobriu que o problema era a falta de variáveis ​​de ligação no código do aplicativo, que normalmente é o culpado mais provável. A falta de variáveis ​​de ligação era um problema, mas como logo descobri, o problema não estava relacionado a instruções SQL. Em vez disso, o problema ocorreu devido a um bug com o Direct NFS. Aparentemente, o Direct NFS tinha um vazamento de memória. O vazamento de memória afetou o pool compartilhado e, com tempo suficiente, a memória livre no pool compartilhado tornou-se inexistente, os erros ORA-4031 seriam lançados e o banco de dados travaria.

Trabalhei com o Suporte da Oracle para confirmar que isso era um bug. Este problema foi registrado como Bug 10237987 e afeta as versões 11.1.0 e 11.2.0. Eu encontrei esse bug em um cluster RAC de 3 nós executando o Oracle Enterprise Linux. Nunca consegui obter uma resposta se esse bug ocorreu em outras plataformas de SO ou em ambientes não RAC. O bug faz com que os pools KGNFS no pool compartilhado cresçam significativamente ao longo do tempo.

Lamento nunca ter conseguido concluir esse bug com o Suporte da Oracle. O suporte queria que eu capturasse um rastreamento quando o banco de dados travou devido a erros ORA-4031 com os pools KGNFS. O que eles não perceberam foi que os pools KGNFS causavam falta de espaço em todos os outros pools do Shared Pool. Os pools KGNFS espremiam os outros pools e muitas vezes era quando o espaço era solicitado nos outros pools que o erro ORA-4031 era atingido. E a única vez em que os arquivos de rastreamento foram gerados foi aguardar a falha da(s) instância(s). Eu não podia sentar e esperar que nossas instâncias travassem no meio do dia apenas para capturar um arquivo de rastreamento para o Suporte Oracle, especialmente porque o arquivo de rastreamento pode nem ser dos pools do KGNFS!

No final, nossa solução foi parar de usar o Direct NFS em nossa configuração. Nossos testes não mostraram diferenças de desempenho com ou sem Direct NFS. Desde que paramos de usar o Direct NFS, não vimos nenhum dos erros ORA-4031. Vejo que o bug ainda está por aí no Metalink, mas nenhuma correção ainda.