Portanto, temos um banco de dados interno da empresa, o tipo usual de coisas: gerencia clientes, telefonemas, acordos de vendas e acordos / esquemas de clientes.
É um front-end do Access 2000 e um back-end do SQL Server 2000 Standard. Um servidor único, Xeon duplo de 3,2 GHz, 2 GB de RAM, Windows Server 2003, recebe cerca de 40% da carga da CPU o dia todo, distribuído pelos 4 núcleos visíveis para o SO (HT).
O banco de dados de back-end é mal projetado e cresceu organicamente há mais de 10 anos, mantido por indivíduos menos qualificados. É normalizado e alguns dos problemas óbvios incluem tabelas com dezenas de milhares de linhas sem chave primária ou índice, que também são usadas fortemente em junções de várias tabelas para algumas das partes mais usadas do sistema (por exemplo, uma aplicativo gerenciador de chamadas que fica no segundo monitor de todos por 8 horas por dia e executa uma grande consulta ineficiente a cada poucos segundos).
O front-end não é muito melhor, é a bagunça típica de centenas de formulários, consultas salvas aninhadas, SQL incorporado mal escrito no código VBA, dezenas de "peculiaridades" etc., e sempre que uma alteração é feita, algo não relacionado parece quebrar. Estabelecemos um MDB que funcione "suficientemente bem" e agora temos uma política de não alteração, pois não possuímos pesos pesados de acesso internamente (e também não temos planos de contratar um).
A empresa agora está crescendo lentamente, aumentando o número de clientes, chamadas, etc., bem como um aumento modesto no número de usuários simultâneos, e o desempenho está notavelmente piorando recentemente (aguardando a alternância entre formulários, aguardando a lista ser preenchida, etc. )
Perfmon diz:
- Transferências de disco por segundo: entre 0 e 30, média 4.
- Comprimento atual da fila de disco: fica em torno de 1
O criador de perfil do SQL Server recebe centenas de milhares de consultas a cada minuto. O uso da CPU nos clientes é praticamente zero, indicando que está aguardando a execução das consultas do servidor. Coloquei essa carga de trabalho no DB Engine Tuning Advisor, apliquei suas sugestões em um backup de teste, mas isso realmente não fez muita diferença.
A propósito, temos uma mistura de 100 MB e Ethernet de gigabit, tudo em uma sub-rede, 40 usuários ish em dois andares.
Para a pergunta.
A meu ver, temos duas opções para resolver / melhorar essa situação.
- Podemos descartá-lo e substituí-lo por um sistema CRM totalmente novo, sob medida ou parcialmente sob medida
- Podemos prolongar a vida útil deste sistema jogando o hardware nele.
Podemos construir um sistema Intel i7 com números de desempenho malucos por uma ordem de magnitude menor que a substituição do software.
Quando um novo sistema é desenvolvido, ele pode ser hospedado nessa caixa, para que não haja desperdício de hardware. Um novo sistema de CRM continua sendo adiado e desativado - não vejo isso acontecendo há pelo menos um ano.
Qualquer opinião sobre esta situação, especialmente se você já esteve aqui, seria muito apreciada.
obrigado