Pregunta

Tengo una aplicación web donde la base de datos del servidor web y SQL Server 2008 se sienta en diferentes cajas en la misma granja de servidores.

Si tomo un procedimiento almacenado monolítico y me divide en varios Procs almacenados más pequeños, lo que hace que el Código del Cliente sea responsable de las llamadas a múltiples procedimientos almacenados en lugar de uno, y voy a notar un aumento significativo en el rendimiento en ¿Mi aplicación web?


Información adicional de fondo:

Tengo un procedimiento almacenado con varios cientos de líneas de código que contiene la lógica de decisión, actualizar las declaraciones y, finalmente, una declaración de selección que devuelve un conjunto de datos al cliente.

Necesito insertar una pieza de funcionalidad en mi código de cliente (en este sentido, el código del cliente es el servidor web ASP que llama al servidor de la base de datos) que llama un DLL de componente. Sin embargo, el procedimiento almacenado está actualizando un conjunto de registros y devolviendo los datos UDPATE en la misma llamada, y mi código idealmente debe llamarse después de La lógica de decisión y las declaraciones de actualización se llaman, pero antes < / em> Los datos se devuelven al cliente.

Para que funcione esta funcionalidad, probablemente tendré que dividir el Proc almacenado existente en al menos dos partes: un PROC almacenado que actualiza la base de datos y otra que recupera los datos de la base de datos. Luego insertaría mi nuevo código entre estas llamadas PROC almacenadas.

Cuando miro este problema, no puedo evitar pensar que, desde un punto de vista de mantenimiento de código, sería mucho mejor aislarlo todos de mi actualización y seleccionar declaraciones en delgado PROCS almacenados y abandone la lógica empresarial al código del cliente. De esa manera, cada vez que necesito insertar la funcionalidad o la lógica de la decisión en mi código de cliente, todo lo que necesito hacer es cambiar el código del cliente en lugar de modificar un enorme Proc almacenado.

Aunque el uso de Procs almacenados delgados podría ser mejor de un punto de vista de mantenimiento de código, ¿cuánto dolor de rendimiento experimentará al aumentar el número de viajes a la base de datos? El resultado neto a los datos es el mismo, pero estoy tocando la base de datos con mayor frecuencia. ¿Cómo afecta este enfoque al desempeño cuando la aplicación se escala para manejar la demanda?

No soy uno para colocar la optimización del rendimiento por encima de todo lo demás, especialmente cuando afecta el mantenimiento del código, pero no quiero dispararme en el pie y crear dolores de cabeza cuando la aplicación web tiene que escalar.

¿Fue útil?

Solución

En general, como regla general, debe hacer que los roundtrips a SQL Server al mínimo.

El "HIT" en el servidor es muy costoso, en realidad es más caro para evitar la misma operación en 3 partes y luego hacer 1 golpe y todo lo demás en el servidor.

Con respecto al mantenimiento, puede llamar a 1 PROC almacenado del cliente, teniendo ese proc Llame a otro 2 proc's.

Tuve una solicitud con la lógica de búsqueda extrema, eso es lo que hice para implementarlo.

algunos resultados de evaluación comparativa ... Tuve un cliente un rato que tenía los servidores que tenían los servidores cayendo y desmoronándome, cuando verificamos el problema, fue muchos pedidos de ida y vuelta al servidor SQL, cuando lo minimizamos, los servidores regresaron a la normalidad.

Otros consejos

lo afectará.Utilizamos un servidor WebLogic donde toda la lógica de negocios está en el servidor de aplicaciones conectado a una base de datos DB / 2.En su mayoría usamos los frijoles de entidad en nuestro proyecto y para la mayoría de las llamadas de servicio comercial hacen varios viajes al DB sin efectos secundarios visibles.(Sintonizamos algunas consultas para ser multi-mesa cuando sea necesario).

realmente depende de tu aplicación.Vas a necesitar un índice de referencia.

Un servidor SQL de configuración del pozo en buen hardware puede procesar muchos miles de transacciones por segundo.

De hecho, romper un gran procedimiento almacenado puede ser beneficioso, ya que solo puede tener un plan de consulta en caché por lote.Rompiendo en varios lotes significa que cada uno obtendrá su propio plan de consulta.

Definitivamente debe errar en el lado del mantenimiento del código, pero se debe estar seguro.

Dado que el panorama del plan de consulta se realizará para que se corteje, debe estar preparado para actualizar sus índices, tal vez la creación de índices de cobertura diferentes.

En esencia, esta pregunta está estrechamente relacionada con el acoplamiento ajustado vs.

Al principio: siempre podría tomar el procedimiento de Monolítica almacenado y dividirlo en varios Procs almacenados más pequeños, que todos son llamados por un procedimiento almacenado , lo que hace que el código del cliente solo sea responsable de las llamadasun procedimiento almacenado.

A menos que el cliente haga algo (cambie los datos o proporcione el estado al usuario). Probablemente no recomendaría mover varias llamadas al cliente, ya que estaría acoplando más firmemente al cliente en el orden de las operaciones para el procedimiento almacenado sinUn aumento significativo de rendimiento.

De cualquier manera, lo haría lo que lo haría, se ajustaría desde allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top