Estamos usando uma máquina Oracle 11G que é muito poderosa; tem armazenamento redundante, etc. É uma fera do que me foi dito.
Acabamos de obter este DB para uma ferramenta que, quando cheguei como cooperativa, tinha 20 pessoas usando, agora com mais de 150 pessoas. Eu sou o único trabalhando nisso: (
Atualmente, temos um sistema implantado que distribui scripts PERL em todo o nosso data center, essencialmente nos dando uma espécie de poder de computação "grid".
Os scripts Perl executam uma espécie de simulação e relatam os resultados para o banco de dados. Eles selecionam / inserem. A carga não é muito alta para cada script, mas pode estar acontecendo entre 20 a 50 sistemas ao mesmo tempo.
Temos vários data centers e usuários atingindo o mesmo banco de dados com essa mesma abordagem.
Nosso principal problema com isso é que nosso banco de dados está sobrecarregado de conexões e tendo que abandonar alguns. Às vezes temos mais de 500 conexões. Estes são scripts perl antigos e eles não lidam bem com isso. Essencialmente eles falham e os resultados são perdidos. Eu prefiro evitar ter que reescrever muitos deles, pois eles são mal escritos e são uma dor de cabeça para se olhar.
O banco de dados em si não está sobrecarregado, apenas a sobrecarga de conexão é muito alta. Abrimos uma conexão, fazemos uma consulta rápida e depois descartar a conexão. Ligações muito curtas, mas muitas delas. A equipe do banco de dados basicamente disse que precisamos diminuir o número de conexões ou eles vão nos ignorar.
Como isso é distribuído em nosso farm, não podemos implementar conexões persistentes. Eu faço isso com o nosso servidor web; mas está em um sistema fixo. Os outros são scripts perl que são abertos e fechados pela ferramenta de distribuição e, portanto, não estão sempre em execução.
Qual seria a minha melhor abordagem para resolver esse problema? Os próprios scripts podem esperar que uma conexão seja aberta. Eles não precisam agir imediatamente. Algum tipo de sistema de filas?
Sugeri que você configure algumas instâncias de uma ferramenta chamada "SQL Relay". Talvez um em cada data center. Quão confiável é essa ferramenta? Quão boa é essa abordagem? Funcionaria para o que precisamos?
Poderíamos ter um para cada data center e retransmitir solicitações por meio dele para nosso banco de dados principal, mantendo um pipeline de conexões persistentes abertas? Isso faz sentido?
Existe alguma outra sugestão que você possa fazer? Alguma ideia? Qualquer ajuda seria muito apreciada.
Infelizmente eu sou apenas um estudante trabalhando para uma empresa muito grande e de alguma forma tudo isso caiu em meus ombros (literalmente não há ninguém para pedir ajuda; é uma empresa de hardware, todo mundo é engenheiros de hardware, e o banco de dados a equipe é inútil e na Índia) e eu estou completamente perdida como qual seria a melhor abordagem?
Estou extremamente sobrecarregado e este problema está interferindo no progresso contínuo e basicamente precisa ser resolvido o mais rápido possível; de preferência sem reescrever todo o sistema, comprar hardware (não vai acontecer), ou me atirar no pé.
AJUDE LOL!