39 votos

¿Pobre base de datos interna - reemplazarlo o chuck hardware en ello?

Así tenemos un interno de la base de datos de empresa, el tipo usual de cosas: gestiona clientes, llamadas telefónicas, negociaciones de ventas y acuerdos con los clientes/esquemas.

Es un Access 2000 en la parte delantera, y una de SQL Server 2000 Standard de back-end. Solo servidor, dual Xeon 3.2 GHz, 2GB de RAM, Windows Server 2003, obtiene aproximadamente el 40% de la carga de la CPU todo el día, repartidos en las 4 núcleos visibles para el sistema operativo (HT).

El back-end de base de datos está mal diseñado, y ha cultivadas con más de 10 años, mantenido por menos-de-personas cualificadas. Está mal normalizado, y algunos de los problemas obvios incluyen tablas con decenas de miles de filas con ninguna clave principal o índice, que también se utiliza mucho en múltiples combinaciones de la tabla de algunos de los más usada partes de un sistema (por ejemplo, un administrador de llamadas de la aplicación que se encuentra en todo el mundo el segundo monitor para 8 horas de un día y se ejecuta una gran consulta ineficiente cada pocos segundos).

El front-end no es mucho mejor, es el típico lío de cientos de formas, anidada consultas guardadas, mal escrito SQL incrustado en el código de VBA, decenas de "rarezas", etc, y cada vez que se realiza un cambio algo sin relación parece romper. Nos hemos asentado en una MDB que funciona "bastante bien" y ahora tiene un cambio de política en la que, como no tenemos Acceso a los pesos pesados en la casa (y no hay planes para contratar a uno).

La compañía ahora está creciendo lentamente, aumentando el número de clientes, llamadas, etc, así como un modesto aumento en el número de usuarios simultáneos, y el rendimiento ha sido llegar notablemente peor recientemente (a la espera de moverse entre las formas, a la espera de las listas para rellenar etc)

Perfmon dice:

  • Las transferencias de disco por segundo: entre 0 y 30, en promedio de 4.
  • Disco actual longitud de la cola: se sitúa alrededor de 1

SQL Server profiler ve a cientos de miles de consultas de cada minuto. El uso de la CPU en los clientes es prácticamente cero, indicando que se espera en el lado del servidor consultas para ejecutar. He puesto esta carga de trabajo a través del Motor de base de datos el asistente para la Optimización, aplica sus sugerencias para una prueba de copia de seguridad, pero esto no se realmente hizo una gran diferencia.

Por cierto, tenemos una mezcla de 100 mb y gigabit ethernet, todo en una sola subred, 40 ish los usuarios a través de dos pisos.

A la pregunta.

Como yo lo veo, tenemos dos opciones para resolver o mejorar esta situación.

  • Podemos chatarra y reemplácelo con un totalmente nuevo sistema de CRM, ya sea a medida o en parte a la medida
  • Podemos extender la vida útil de este sistema de sujeción de hardware.

Podemos construir un i7 de Intel con sistema de loco cifras de rendimiento de un orden de magnitud menor costo de reemplazo del software.

Cuando un sistema es, finalmente, desarrollar, que pueden ser alojados en este cuadro, por lo que no hay desperdicio de hardware. Un nuevo sistema de CRM mantiene conseguir poner en off y off y off - no veo que eso suceda durante al menos un año.

Alguna idea sobre esta situación, especialmente si usted ha estado aquí, sería más apreciado.

Gracias

9voto

Randy Puntos 3196

La falta de e/S de disco implica que las consultas se alimenta principalmente de RAM. Si usted 'de repente' tiene su caliente tablas no caben en la memoria RAM y el servidor comienza el trabajo de los discos, puede ser en un mal viaje. 2GB de RAM o no es mucho en estos días, pero de nuevo en el SQL2000 época habría sido considerable. Supongo que la cantidad de datos que la aplicación manipula normalmente es menor que la RAM que tienes. Es posible que desee buscar en la cantidad de "utilizar" el espacio en los archivos de datos. Esto le dará una idea de la cantidad de RAM de la base de datos puede consumir, en el peor de los casos. SQL Server no mantener los datos que no necesita de la memoria RAM, pero puede ser difícil saber qué tablas se utilizan y cuándo.

Hyperthreading no siempre ayuda con SQL Server. Usted puede obtener un mejor rendimiento de apagarlo. Es difícil de probar debido a voltear y requiere un reinicio, y eso es una gran molestia en un servidor de producción.

"Cientos de miles de consultas de un minuto" se traduce en miles de consultas por segundo. Eso suena bastante ocupado, pero mucho de lo que el tráfico sólo puede ser cursor obtiene por el Acceso. El acceso es particularmente mala en forma eficiente la recuperación de conjuntos de resultados de SQL. Usted puede obtener un mejor rendimiento girando el SQL Server paralelización de salir.

Usted también quiere buscar para el bloqueo. Tirar de hardware en un problema de bloqueo no siempre produce el esperado para la mejora dramática. Si no hay mucho en el bloqueo y las consultas son satisfechos por la memoria RAM, en lugar de disco, que son, básicamente, confiando en el procesador de gruñido, y su capacidad para tirar de datos a través de los canales de memoria. En ese caso, un hardware más rápido debería proporcionar una buena mejora. Si usted está en un apuro (para superar este problema) y de crecimiento lento, que podría ser lo suficientemente buena.

Como solución, la adición de hardware no de la escala así como mejoras de bases de datos. Si usted consigue un aumento en el crecimiento, usted puede encontrar su nuevo hardware luchando. Otro pensamiento es que el éxito de las aplicaciones de atraer a los usuarios. Si la aplicación se vuelve más sensible, los usuarios pueden ser más propensos a correr más informes y tales, en lo que si necesitaban ir a por café mientras espera que el informe final.

Si el esquema de base de datos es realmente malo, usted puede ser capaz de obtener algo de rendimiento gana simplemente por mirar la indización de las tablas. Concentrarse en las tablas que conozco se consultan con frecuencia. Usted puede utilizar el Analizador para ver las consultas que se ejecutan en el servidor, sólo dile que busque las consultas que leer una gran cantidad de datos (como las 100.000 páginas) y, a continuación, trabajar hacia abajo hasta las consultas que no leen mucho. Mencionó que algunas de las tablas no tienen las llaves. Hay claves naturales en los datos, sólo que no forzada por restricciones o índices únicos?

Hacer las tablas tienen los índices agrupados? La falta de clustered index server puede causar todo tipo de efectos secundarios.

Hay un montón de índices no agrupados, con muchas columnas? Esto es a menudo un intento de construir muchos de los índices de cobertura, en lugar de la implementación de una efectiva estrategia de indización. SQL Server puede efectivamente construir índices de cobertura sobre la marcha durante una consulta, si es que tiene sentido hacerlo y hay apoyo de los índices agrupados y no agrupados.

Por último, vale la pena preguntarse: ¿de mantenimiento (indización y/o actualización de las estadísticas) que se realiza en las mesas?

8voto

Dayton Brown Puntos 1239

Voy a estar en desacuerdo con todo el mundo aquí. Chuck algunas de hardware. Es barato, rápido, fácil, y va a comprar el tiempo necesario para implementar una adecuada solución de CRM. La razón por la que estoy defendiendo algo que no es del agrado de todo el mundo, no sólo de esta junta, pero stackoverflow así, es que he sido un director de proyecto/gerente y han sido en el "Negocio" de lado por un tiempo(el negocio es entre comillas debido a mi odio por la palabra). Con base en la descripción del software, se le tomará cerca de un año para reconstruir algo más. Acabo de descubrir y documentar las reglas de negocio/rarezas, probablemente tomará de 2 meses. También será increíblemente caros a desarrollar. Especialmente cuando se compara con el costo de una truca servidor.

En realidad estoy a punto de celebrar un conjunto de aplicaciones web para una empresa que justamente por esa razón. El departamento de TI interno de no mover el mejor hardware porque quieren desarrollar de nuevo en una nueva plataforma. Que el costo es aproximadamente el triple de lo que costaría para moverlo a un nuevo hardware. Sin mencionar que la empresa podría no tener el contrato renovado en un año.

6voto

Nick Kavadias Puntos 9310

esta es una cuestión de negocios no es una cuestión técnica.

Como propietario de un negocio: Cómo estratégico es el sistema de la empresa? al menos estratégico, menos me importa & arreglarlo y todo el dinero gastado es el dinero que se podría utilizar en otros lugares para hacer crecer mi negocio.

Equipo de folk me da miedo, ya que todos ellos a entrar en una gran sala y discutir sobre el diseño y me costo una fortuna. Mantener el sistema en marcha! si esto significa la optimización del rendimiento (sin re-arquitectura) o tirar más de hardware, es sólo una prioridad si deja de trabajar.

Como consultor: Su sistema es el de los antiguos y se ha escondido de los costos operativos. Podemos diseñar un sistema que sea adecuado para usted, que se escala y proporcionar una plataforma para el crecimiento futuro y la ventaja estratégica. Firme aquí y que todos tus sueños se harán realidad.

Como un empleado: Yo puedo ser el superhéroe de aquí y ahorrar a la empresa por evitar un inminente desastre optimizando el infierno fuera de esta cosa! mi administrador de ducha mí con regalos y elogios como voy a tener ahorrado a la empresa a miles de personas.

2voto

SpaceManSpiff Puntos 2372

Yo digo que lo tanto.

Ahora tu en el 40% de la CPU que usted dijo? Eres usuario del reclamante (mucho)? Si no, usted todavía tiene espacio para respirar. Más de memoria podría ser justo lo suficiente para hacer de él por un tiempo.

Pregunta para el camino a seguir, ¿tiene usted en casa de los desarrolladores de software? Si la respuesta es NO, ni siquiera intentar rehacer. Usted va a terminar exactamente donde está ahora.

Asumiendo que usted tiene en la casa de los desarrolladores, hacer tu en casa, los desarrolladores tienen la capacidad de hacer correctamente un proyecto? Estoy hablando de especificaciones d completamente, correctamente, (relistic) línea de tiempo, básicamente la misma, como si de un proyecto del cliente. Si no, entonces no se moleste o se terminan de vuelta en donde están ahora.

Hasta que las empresas relize ellos también son clientes de sí mismos, y necesitan dar los mismos recursos para proyectos internos, usted va a terminar exactamente donde está ahora. Estado allí, hecho eso, tienes todo un vestidor de t-shirts.

Así que si usted no puede hacerlo correctamente tienes dos opciones están fuera de la caja, llave en mano, con la cual el personal se odian, porque ahora usted tiene que encajar en el molde de el sistema de comprar. O será cómoda y usted todavía tendrá que pasar tiempo de los PROYECTOS de la personalización.

O Refactorizar lo que tienes. Recuerde que la gente va a esperar todo de la misma completa funcionalidad cuando el nuevo viene, así que es por eso que cualquier otra forma que usted tiene que hacer todo a la vez. Si usted re-factor, usted tiene la oportunidad de averiguar cómo funciona y, a continuación, en lugar de los cambios ad hoc, se plantea en muchos pequeños sub proyectos.

Sin ver el sistema, probablemente sería consulte acerca de la normalización de tanto como me sea posible en el back-end, se mueven como mucho de SQL Almacenado en proc. A continuación, construir un nuevo frente de final de C# de Formularios o de una webapp. Si usted puede conseguir su lógica de negocio y SQL de la parte delantera, será más fácil volver a hacerlo más tarde. Por mantener lo que hacer para proyectos pequeños, si se hizo a un lado en cualquier momento o se detiene, te han hecho progresos en la que será utilizado.

1voto

Beep beep Puntos 1167

Puede que no necesite hacer. Mi sugerencia es simplemente agregar algunos índices o claves a la mesa.

tablas con decenas de miles de filas con ninguna clave principal o índice, que también se utiliza mucho en múltiples combinaciones de la tabla

Antes de gastar un montón de dinero o de tiempo, tomar un par de horas y agregar los índices (o claves primarias, si puede, para las tablas implicadas en esas combinaciones, particularmente para las columnas utilizadas en una cláusula where. Se podría mejorar el rendimiento en un factor de 10 en un par de horas.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: