Entonces, tenemos una base de datos interna de la compañía, el tipo de cosas habituales: gestiona clientes, llamadas telefónicas, ofertas de ventas y acuerdos / esquemas de clientes.
Es un front-end de Access 2000 y un back-end de SQL Server 2000 Standard. Servidor único, Xeon dual de 3.2GHz, 2GB de RAM, Windows Server 2003, recibe alrededor del 40% de carga de CPU todo el día, distribuido en los 4 núcleos visibles para el sistema operativo (HT).
La base de datos de back-end está mal diseñada y ha crecido orgánicamente durante más de 10 años, mantenida por personas poco cualificadas. Está muy normalizado, y algunos de los problemas obvios incluyen tablas con decenas de miles de filas sin clave primaria o índice, que también se usan mucho en uniones de tablas múltiples para algunas de las partes más utilizadas del sistema (por ejemplo, un aplicación de administrador de llamadas que se encuentra en el segundo monitor de todos durante 8 horas al día y ejecuta una consulta grande e ineficiente cada pocos segundos).
El front-end no es mucho mejor, es el desorden típico de cientos de formularios, consultas guardadas anidadas, SQL incrustado mal escrito en el código VBA, docenas de "peculiaridades", etc., y cada vez que se realiza un cambio, algo no relacionado parece romperse. Nos hemos decidido por un MDB que funciona "lo suficientemente bien" y ahora tenemos una política de no cambio al respecto, ya que no tenemos pesos pesados de Access en la empresa (y tampoco tenemos planes de contratar uno).
La compañía ahora está creciendo lentamente, aumentando el número de clientes, llamadas, etc., así como un aumento modesto en el número de usuarios concurrentes, y el rendimiento ha empeorado notablemente recientemente (esperando moverse entre formularios, esperando que se llenen las listas, etc. )
Perfmon dice:
- Transferencias de disco por segundo: entre 0 y 30, promedio 4.
- Longitud actual de la cola del disco: ronda 1
El generador de perfiles de SQL Server ve cientos de miles de consultas cada minuto. El uso de la CPU en los clientes es prácticamente nulo, lo que indica que está esperando que se ejecuten las consultas del lado del servidor. Puse esta carga de trabajo a través del DB Engine Tuning Advisor, apliqué sus sugerencias a una copia de seguridad de prueba, pero esto realmente no ha hecho mucha diferencia.
Por cierto, tenemos una mezcla de 100 MB y ethernet gigabit, todo en una subred, 40 usuarios en dos plantas.
A la pregunta.
A mi entender, tenemos dos opciones para resolver / mejorar esta situación.
- Podemos descartarlo y reemplazarlo con un sistema CRM completamente nuevo, ya sea a medida o parcialmente a medida
- Podemos extender la vida útil de este sistema arrojándole hardware.
Podemos construir un sistema Intel i7 con números de rendimiento locos por un orden de magnitud menor costo que reemplazar el software.
Cuando finalmente se desarrolla un nuevo sistema, se puede alojar en este cuadro, por lo que no hay desperdicio de hardware. Un nuevo sistema de CRM se sigue apagando, apagando y apagando, no veo que eso suceda durante al menos un año.
Cualquier idea sobre esta situación, especialmente si ha estado aquí usted mismo, sería muy apreciada.
Gracias