none
concurrencia en base de datos SQL Server

    Question

  • Hola

    Estoy desarrollando una aplicación en asp.net 4, mi fuente de datos es una base de datos SQL server esta aplicacion va a ser publica en internet, muchos usuarios se van a conectar a la aplicación para hacer consultas de información (300 o más) me encuentro desarrollando toda la parte de perfiles y roles pero tengo una duda.

    Cuando la aplicación este en producción y se conecten los usuarios a la aplicación ¿van a ver problemas de rendimiento?, porque como las consultas se hacen a una misma base de datos puede que no de el rendimiento requerido por los usuarios.

    ¿Existen metodos de diseño de la base de datos para aumentar el rendimiento en entornos multiusuario como este?

    ¿como se deben manejar estos escenarios de concurrencia alta en el diseño de aplicaciones asp.net y sql server?

    Agradezco su colaboración

    Cordial saludo.

    Tuesday, January 31, 2012 12:29 AM

Answers

  • Hola Miguel,

    esto lo podés manejar dependiendo si vas a tener acceso por medio del servidor a las herramientas de sql. O sea no se si el servidor es tuyo y lo publicas y por ende podés tener control sobre el servidor o está en un hosting en el cual no tenés acceso a estas herramientas. Luego la forma para darte cuenta es ir monitoreando la funcionalidad de las 300 personas con el sitio, si ves que se empieza a ralentizar por cantidad de conexiones concurrentes entonces podés sumar memoria, procesadores, etc, etc dependiendo de tus posibilidades y ya te digo si esto lo vas a hacer vos (el servidor es tuyo) o si simplemente puedes solicitarle al hosting que incremente estos recursos.

    Te dejo un link de una historia de algo similar sin llegar a esta situación (espero).

    http://blog.climens.net/2007/09/06/cronica-de-un-downtime-anunciado/

     

    Saludos,


    Mariano Llarin.-
    Tuesday, January 31, 2012 12:55 AM
  • Cuando la aplicación este en producción y se conecten los usuarios a la aplicación ¿van a ver problemas de rendimiento?,

    puede haberlo sino dimensionas el harware y la accesibilidad en la conexion acorde al volumne de usuarios

    un ejemplo si ingresas 300 personas, imaginemos que solo 100 esten concurrentes y tu servidor de hosting dinamos lo implementas con un Dual Core con 4Gb de memoria, y una conexion de simple de 3Mb de salida, como que seguramente tengas problemas, la carga se dimensiona en hard que lo soporte

    no soy un experto en infraestrucura pero se que hay ciertas reglas que se pueden aplicar para dimensionar los equipos

    crear una granja de servidores (o sea varis equipos trabjando en paralelo para atender las petisiones) con un sistema de balanceo de carga podria ser una buena opcion

    si haces esto seguramente la Session del usuario no deba estar en memoria sino en una db sql server para que pueda balancerse la carga

    esto quizas puedas consultarlo con alguno conocedor de infraestructura o quien tenga ese cargo donde trabajes

     

    ¿Existen metodos de diseño de la base de datos para aumentar el rendimiento en entornos multiusuario como este?

    hay algunso trucos, como ser no usar el

    SELECT *

    o sea recuperar los campos que se requieren, paginas las tablas, no cargar pagians de 3000 registros, porque esto afecta en la obtencion y en el render de las pagina

    aplciar valor a la aplicacion, como ser paginas y proporcionar filtros al usuario para obtener lo que necesita y no cargar todo por defecto, esto acelera mucho el render

     

    ¿como se deben manejar estos escenarios de concurrencia alta en el diseño de aplicaciones asp.net y sql server?

    podrias usar un timespan como campos de la tabla para evitar la consurrencia

    se trato este tema en otras consultas del foro

    http://social.msdn.microsoft.com/Forums/es/vcses/thread/edf84e58-6e6f-4c11-9549-83b5806679b4

    http://social.msdn.microsoft.com/Forums/es/vbes/thread/dcab78ba-c339-4696-a611-0c1bf2759c37

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Tuesday, January 31, 2012 1:10 AM

All replies

  • Hola Miguel,

    esto lo podés manejar dependiendo si vas a tener acceso por medio del servidor a las herramientas de sql. O sea no se si el servidor es tuyo y lo publicas y por ende podés tener control sobre el servidor o está en un hosting en el cual no tenés acceso a estas herramientas. Luego la forma para darte cuenta es ir monitoreando la funcionalidad de las 300 personas con el sitio, si ves que se empieza a ralentizar por cantidad de conexiones concurrentes entonces podés sumar memoria, procesadores, etc, etc dependiendo de tus posibilidades y ya te digo si esto lo vas a hacer vos (el servidor es tuyo) o si simplemente puedes solicitarle al hosting que incremente estos recursos.

    Te dejo un link de una historia de algo similar sin llegar a esta situación (espero).

    http://blog.climens.net/2007/09/06/cronica-de-un-downtime-anunciado/

     

    Saludos,


    Mariano Llarin.-
    Tuesday, January 31, 2012 12:55 AM
  • Cuando la aplicación este en producción y se conecten los usuarios a la aplicación ¿van a ver problemas de rendimiento?,

    puede haberlo sino dimensionas el harware y la accesibilidad en la conexion acorde al volumne de usuarios

    un ejemplo si ingresas 300 personas, imaginemos que solo 100 esten concurrentes y tu servidor de hosting dinamos lo implementas con un Dual Core con 4Gb de memoria, y una conexion de simple de 3Mb de salida, como que seguramente tengas problemas, la carga se dimensiona en hard que lo soporte

    no soy un experto en infraestrucura pero se que hay ciertas reglas que se pueden aplicar para dimensionar los equipos

    crear una granja de servidores (o sea varis equipos trabjando en paralelo para atender las petisiones) con un sistema de balanceo de carga podria ser una buena opcion

    si haces esto seguramente la Session del usuario no deba estar en memoria sino en una db sql server para que pueda balancerse la carga

    esto quizas puedas consultarlo con alguno conocedor de infraestructura o quien tenga ese cargo donde trabajes

     

    ¿Existen metodos de diseño de la base de datos para aumentar el rendimiento en entornos multiusuario como este?

    hay algunso trucos, como ser no usar el

    SELECT *

    o sea recuperar los campos que se requieren, paginas las tablas, no cargar pagians de 3000 registros, porque esto afecta en la obtencion y en el render de las pagina

    aplciar valor a la aplicacion, como ser paginas y proporcionar filtros al usuario para obtener lo que necesita y no cargar todo por defecto, esto acelera mucho el render

     

    ¿como se deben manejar estos escenarios de concurrencia alta en el diseño de aplicaciones asp.net y sql server?

    podrias usar un timespan como campos de la tabla para evitar la consurrencia

    se trato este tema en otras consultas del foro

    http://social.msdn.microsoft.com/Forums/es/vcses/thread/edf84e58-6e6f-4c11-9549-83b5806679b4

    http://social.msdn.microsoft.com/Forums/es/vbes/thread/dcab78ba-c339-4696-a611-0c1bf2759c37

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Tuesday, January 31, 2012 1:10 AM
  • Hola leandro:

    Muchas gracias, agradezco tu colaboración

    Cordial saludo.

    Tuesday, January 31, 2012 3:49 AM
  • Hola Mariano

    Muchas gracias agradezco tu colaboración

    Cordial saludo.

    Tuesday, January 31, 2012 3:50 AM