Um dos meus clientes implantou o banco de dados do nosso produto em uma máquina Solaris que já possui 3 instâncias do Oracle. Portanto, agora existem 4 instâncias do Oracle rodando na mesma máquina. E agora estamos enfrentando problemas de desempenho.
Não tenho acesso a outras instâncias ou à máquina, e todas as ferramentas que tenho são alert.log, AWR e ADDM. Eu sei que há algo relacionado a várias instâncias, mas não posso provar.
Então, minha pergunta é: você já passou por uma situação semelhante? Como devo lidar com isso? Como posso identificar a causa dos problemas de desempenho relacionados a várias instâncias?
Isaac, de preferência, executamos uma instância em um servidor e implementamos os diferentes aplicativos como esquemas e serviços nesse único banco de dados. Se o servidor tiver memória suficiente, não haverá problema, se todas as aplicações se comportarem como bons cidadãos Oracle. Assim que há um aplicativo que não usa variáveis de ligação, há uma dor crescente no host. O mesmo para aplicativos que continuam criando novas conexões a cada poucos segundos, em vez de reutilizar as conexões existentes. Coisas como auto commit também não ajudam a melhorar a situação. Qual é o comportamento normal do seu aplicativo? Faz grandes atualizações? Quando ele faz um commit? Quanto redo é gerado/hora? Seu aplicativo usa variáveis de ligação? Em muitos casos, a localização dos arquivos redolog online é crítica. Se o aplicativo gerar muitos refazer (ou competir com outro aplicativo que faz isso), o logwriter ficará mais lento e causará uma grande degradação do desempenho porque a sessão está aguardando a conclusão da gravação do arquivo de log. Dê a seu cliente um layout de disco onde os refazer estão em discos raid-10 dedicados e veja o quanto isso ajuda. Descubra também a situação de alocação de memória. Pode haver necessidade de uma redistribuição justa da memória disponível.
Eu espero que isso ajude
A execução de várias instâncias no mesmo servidor é possível e, em alguns casos, necessária. O oratab foi projetado especificamente para lidar com o gerenciamento de várias instâncias. Nos casos em que você possui vários aplicativos independentes, pode ser preferível ter uma instância para cada aplicativo.
Ter memória suficiente é crítico. A Oracle constrói o SGA na memória compartilhada. Se você não tiver memória suficiente, o SGA ou os processos começarão a entrar e sair. Isso é conhecido como thrashing e resulta em uma penalidade de desempenho significativa.
Pode ser possível ajustar as instâncias para executar com um SGA menor. A Oracle fornece ferramentas para ajudar a ajustar o tamanho da SGA. Se alguma das instâncias tiver um SGA excessivamente grande, todas as instâncias serão penalizadas.
Outro uso importante da memória é o espaço do buffer. Isso atua como cache secundário e pode eliminar E/S de leitura significativa.
A execução
sar
(assumindo um sistema operacional baseado em Unix) pode fornecer bons diagnósticos sobre onde está o problema. Os problemas prováveis são troca ou saturação de E/S de disco. Adicionar RAM provavelmente resolverá qualquer um desses problemas.A saturação de E/S de disco também pode ser tratada movendo alguns tablespaces para outros discos. Eu geralmente configuro o Oracle para que a E/S seja distribuída pelo maior número de discos possível.
EDIT: Estes são alguns casos que podem exigir instâncias separadas.
O recurso mais crítico é a RAM.
Cada instância do Oracle em execução aloca alguma RAM para si própria, quando recém-iniciada e não sob carga.
Estamos executando um 10g com 10 e 11g com 8 instâncias, mas são servidores de desenvolvimento. Após a reinicialização do sistema operacional, alguns dos serviços Oracle não iniciam automaticamente e devem ser iniciados manualmente: Oradim -startup -sid xxx.
Estamos apenas começando a usar o Gerenciamento Automático de Memória, mas a situação continua diferente do SQL Server, onde você pode adicionar bancos de dados tanto quanto o espaço em disco permitir.
No seu caso, com mais instâncias em uma máquina, o SGA para cada instância fica menor, menos sql pré-compilado pode ser armazenado em cache e a máquina precisa fazer mais compilação de sql, o que reduz o desempenho.
Adicionar RAM pode ajudar na sua situação.