SQL Server Performance

saber si store procedure esta ejecutandose

Discussion in 'Preguntas sobre SQL Server en Español.' started by fjac_pe, May 17, 2006.

  1. fjac_pe New Member

    Buenas foro, espero me puedan ayudar, tengo un problema, hay un proceso que dura aprox. 2 minutos en procesar, es muy pesado, pero no tenemos de otra, el proceso se ha optimizado a mas no poder, ahora depende de la cantidad de informacion a procesar, el punto es este, el proceso requiere de ciertas tablas para obtener sus parametros como precios, tipo de cuentas, tipo de cambio de moneda, etc, y me han solicitado que mientras en una pc se este corriendo el proceso, que no permita que otras maquinas lo modifiquen, se que creando una tabla donde ponga un valor 1 que significa ejecutandose, o 0 que diga libre lo solucionaria, pero que pasa si el proceso se cae por algun motivo y la tabla quede activa con el valor 1, estaba haciendo un juego con la tablas proccesses del sql funciona pero estaba viendo si es posible conocer los procesos que estan ocurriendo en el servidor o mejor dicho como saber si mi store procedure esta ejecutandose, de esta manera el responsable de velar porque el store este o no ejecutandose es el servidor sql y yo ya no tengo que estar preguntando por una tabla adicional.

    Un amigo me dio la idea de manejar triguers, pero estos se desencadenan al momento de insertar pero lo necesito en otra realidad cuando otro usuario quiera modificar o registrar en alguna tabla, no deberia dejar grabarle, como comprenderan, si cambian mis coeficientes que tiene decimales, asi sea el 3er decimal, en volumen significa muchos miles de dinero, y tengo que validar que los datos sean los que esten activos en ese momento hasta el final del proceso, la cantidad de parametros es mucha, se trata de mas de 120 parametros.

    Como repito, si hay una forma de saber si mi store procedure esta o no en ejecucion, asi toda la responsabilidad se la doy al servidor y solo valido eso para bloquear mis opciones de nuevo, modificar, grabar y eliminar.

    Espero sus aportes, se valdran mucho.


    Muchas gracias

    Saludos Martin, a los tiempos, quizas ya no me recuerdes pero me ayudaste en muchas veces, ahora estoy en una empresa de desarrollo de software, estoy asimilando mas conocimientos.


    Felipe
  2. Luis Martin Moderator

    No creo que encuentres la forma de saber cuando se está ejecutando o no.
    El problema es que si ejecutas sp_who, verás si se está ejecutando un select, update o insert, pero no a que sp pertenece.
    Si lo hace con el profiler, solamente la verás cuando termine.

    Ahora, para que una sp modifique una tabla y la misma sp la trate de modificar por otro usuario es porque en la sp se escribió NOLOCK. De otra forma el SQL loquea la página y no permite que ocurran modificaciones hasta que la primera termine.

    Te suguiero que revises la sentencia UPDATE y INSERT para verificar con que opciones se está ejecutando.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    Although nature commences with reason and ends in experience it is necessary for us to do the opposite, that is to commence with experience and from this to proceed to investigate the reason.
    Leonardo Da Vinci

    Nunca esperes el reconocimiento de tus hijos, eso ocurrirá luego de tu muerte


    All postings are provided “AS IS” with no warranties for accuracy.



  3. fjac_pe New Member

    Ok, muchas gracias, sino que el proceso demora demasiado, pero este timepo ya fue aceptado por el cliente, por mas normalizado que esta, son multiples validaciones de inversiones, y ahora mas bien pregunto, cuando un store inicia, las tablas que intervienen se bloquean todas, o de acuerdo a como las va necesitando, me explico hay uno que valida cantidades limites y demora como 20 segundos, y luego continua otro proceso de importes por tipo de cambio que dura unos 28 segundos, pero este proceso se ejecuta cada vez que compran o venden algo en la afp, y por otro lado u otro modulo otros usuarios pueden variar el valor del tipo de cambio, o vectores de precio o factores de riesgo, e intervienen directamente en el proceso, ahora lo que se quiere es que al iniciar el proceso, las tablas que alimentan el proceso no puedan ser alteradas, hasta que termine el proceso de Validacion de Limites, hay alguna manera de generar un bloqueo de las tablas? sin estar generando un registro o actualizando, como comento, es un proceso de multiples tablas y ninguna debe ser modificada.

    En mi salida pienso generar una tabla que diga si esta corriendo el proceso o no, y si hay un error o el proceso termina, desactivo el registro.


    Muchas gracias por el apoyo.

  4. Luis Martin Moderator

    El SQL bloquea por default cuando se inserta o cambia algo en una tabla.

    Fíjate en BOL para más detalles.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    Although nature commences with reason and ends in experience it is necessary for us to do the opposite, that is to commence with experience and from this to proceed to investigate the reason.
    Leonardo Da Vinci

    Nunca esperes el reconocimiento de tus hijos, eso ocurrirá luego de tu muerte


    All postings are provided “AS IS” with no warranties for accuracy.



  5. fjac_pe New Member

    Disculpa a que te refieres con BOL?

    Entonces estoy asumiendo que la unica salida que tengo para mi proceso es manejarlo con una tabla de estado, y esta tabla tendra el spid, usuario y pc donde se esta realizando el proceso, para validarla contra la tabla sysproccesess porque tambien puede que el usario salga del sistema por algun problema X y se quede el registro, valido si el spid y la hora de conexion estan en la tabla del sql en la master, significa que sigue activo, si no, el proceso entendera que no esta en ejecucion, que te parece mi salida.

    Y otro problemita era en la otra empresa que me pedian que el usuario no pueda iniciar sesion en mas de un modulo y en una sola pc en toda la red, o sea que si inicia sesion en una maquina en modulo tesoreria, no puede usarlo en otra pc ni en la misma, use la tabla sysproccesess mas el nombre del aplicativo, y mis pruebas van bien, pero esta tabla del sql, puede quedar en algun momento los registros aun asi la conexion ya no exista?, porque a unos usuarios no les dejaba iniciar sesion porque ya habia otra pc ejectuando con su usuario, no pude comprobar si esa pc estaba o no en ejecucion pero desde el sql si podia ver la conexion y la pc donde estaba, llamamos al terminal y dijeron que no tenian el sistema abierto, me extraño eso a menos que se haya quedado en segundo plano el sistema como suspendido.

    Saludos.
  6. Luis Martin Moderator

    "Disculpa a que te refieres con BOL?"

    Perdona, Libros En Linea o sea la ayuda que viene con las herramientas de SQL:


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    Although nature commences with reason and ends in experience it is necessary for us to do the opposite, that is to commence with experience and from this to proceed to investigate the reason.
    Leonardo Da Vinci

    Nunca esperes el reconocimiento de tus hijos, eso ocurrirá luego de tu muerte


    All postings are provided “AS IS” with no warranties for accuracy.



Share This Page