none
Ejecución de Procedimientos almacenados desde otra base de datos en misma Instancia y Servidor RRS feed

  • Pregunta

  • Hola chicos buen día.

    Tengo un dilema espero me puedan apoyar. Resulta que contamos con una aplicación que usa base de datos sql server a la que llamaré "Base de Datos A" y estamos desarrollando un módulo adicional con su propia base de datos a la que llamaré "Base de Datos B". Actualmente usamos alrededor de 100 procedimientos almacenados y los hemos creado en "Base de Datos A" y que tienen acceso a tablas de "Base de Datos A", sin embargo, en ocasiones no los respaldar y cuando restauran nos marca error la aplicación que estamos desarrollando. Para ello he decidido crear los Procedimientos almacenados en "Base de Datos B" y para que tengan acceso a las tablas de "Base de Datos B", lo he realizado de la siguiente manera: NombreServidor.Esquema.NombreProcedimientoAlmacenado "Parámetros"

    Ambas bases de datos están en el mismo servidor y misma instancia, el problema y es donde no se si me afecte es en el rendimiento, ya que nuestro módulo cada vez que se invoca hace un análisis de 30,000 productos y una vez que me regresa esa consulta en un datatable, hacemos 8 consultas más por producto mediante procedimientos almacenados. Es decir, hace 240,000 conexiones y lo haría de "Base de Datos A" a "Base de Datos B".

    En concreto, quiero saber si esto es óptimo? en rendimiento y no se vaya a llevar más tiempo la aplicación en procesar la información y me ocupe todos los recursos del Sql Server, ya que aparte de esta aplicación, hay usuarios que utilizan otras aplicaciones en Sql Server.

    Gracias por el apoyo.

    Saluditos

    jueves, 3 de septiembre de 2020 17:00

Todas las respuestas

  • Hola Fernanda_Mafe:

    En concreto, quiero saber si esto es óptimo?

    Pues la respuesta es clara. No

    y no se vaya a llevar más tiempo la aplicación en procesar la información y me ocupe todos los recursos del Sql Server, ya que aparte de esta aplicación, hay usuarios que utilizan otras aplicaciones en Sql Server.

    Es una posibilidad que te lleve más tiempo hacerlo en B. Pero al final todo esto son conjeturas. Porque nadie sabe lo que llamas un análisis (que tiempo, recursos y bloqueos conlleva), ni lo que hacen, ni cuanto cuesta el consumo de cada uno de los procedimientos, además de las 240.000 conexiones.

    Y lo que está claro, es que mientras está trabajando tanto en el análisis, como en los procedimientos, no puede estar sirviendo datos para otras aplicaciones, por tanto el rendimiento se verá penalizado seriamente.


    jueves, 3 de septiembre de 2020 17:37
  • Ante esta situación que me recomiendas? Ya que debo procesar esos datos y al ser actualizaciones de existencias, ventas, costos, etc, es información que debo obtener de las tablas de producción. Gracias

    Saludos

    jueves, 3 de septiembre de 2020 17:55
  • En principio, el rendimiento no cambia. Si las dos bases de datos están en la misma instancia, un procedimiento en cualquiera de las dos bases de datos puede llamar a tablas de la otra base de datos a la misma velocidad que si esas tablas estuvieran en la misma base de datos.

    Otra cosa es que el procedimiento haga internamente operaciones muy costosas y en consecuencia tenga un rendimiento pobre, pero ese rendimiento pobre seguirá ocurriendo con independencia de que las tablas estén en la misma base de datos o en otra base en la misma instancia.

    jueves, 3 de septiembre de 2020 18:09
  • Cualquier recomendación es mala. Deberías de analizar los procedimientos que son costosos y pensar en optimizarlos.

    Pensar en aglutinar algunos procedimientos de manera que no tengas que llamara a A y luego a B y luego a C y luego a D....porque al final es una secuencia de ejecución de procedimientos, y eso requiere tiempo y esfuerzo.

    Otra cosa bien clara es que 240.000 conexiones son muchas conexiones. Puedes intentar reducir ese número.

    Si lees 30.000 filas y por cada una llamas a

    - procesarA item 1 param 1 y 2

    - procesarB item 1 param 3 y 4

    - procesarC item 1 param 4 y 1 y 6

    ....

    podrás llamar a insertarEnTablaParaProcesar item 1 param 1, 2, 3, 4, 5, y 6

    Cuando tengas 30.000 insertados. Llamar a procesar todos. y procesar todos llama a 

    - procesarA item1 param 1 y 2 que los lee de la tabla. 

    - procesarB item1 param 3 y 4 que los lee de la tabla. 

    Aunque yo creo que la mejor recomendación es que te tomes un café tranquilamente y pienses que parte del enfoque no llevas bien y le des la vuelta.

    jueves, 3 de septiembre de 2020 18:27
  • Hola. Gracias a todos. Estoy analizando y ayer hice por ejemplo el cambio de variable de tabla a tabla temporal gane unos segundos :). Sigo analizando el código para como dicen ustedes evitar tantas llamadas. Les comento en un par de días cómo me va. Saludos cordiales
    viernes, 4 de septiembre de 2020 12:36