none
controlar el tiempo de ejecucion de un procedimiento RRS feed

  • Pregunta

  • buenas.

    Hay forma de  controlar el tiempo de ejecución de un procedimiento o de una sentencia, sin afectar toda la base de datos.

    quiero ejecutar una sentencia y si esa sentencia se demora mas de determinado tiempo.... la información sea registrada en una tabla de auditoria.

    eso es posible?  

    eso lo quiero realizar  desde un procedimiento almacenado.

    miércoles, 29 de noviembre de 2017 22:31

Respuestas

Todas las respuestas

  • al inicio del sp

    declare @inicio datetime

    set @inicio=getdate()

    al fin

    if datediff(ss,getdate(),@inicio) > tantossegundos

    begin

    grabar datos

    end

    miércoles, 29 de noviembre de 2017 23:36
  • la base de datos es transaccional, el problema dentro del procedimiento se presento al momento de  realizar una actualización. Se presento un bloqueo ( que me llevo al catch) y me mostro el error de tiempo de espera. Lo que busco  es que si no  se logra la actualización...se almacene lo pendiente en otra tabla (auditoria), y prosiga con el siguiente registro.

    NO quiero alterar el time_out del servidor, solo quiero  controlar el tiempo(tenerlo a 2800) de espera dentro del procedimiento para asi  grabarlo.

    pregunta: Cual cree que sea el tiempo de espera(cuando se presente un bloqueo) recomendable para un servidor transaccional.




    jueves, 30 de noviembre de 2017 13:40
  • ¿Que tipo de ISOLATION LEVEL estas ocupando?

    ¿De cuantos registros estamos hablando?
    jueves, 30 de noviembre de 2017 22:36
  • puedes usar try catch y en el cath hacer lo que quieras. También puedes alterar el timeout por sesión no por server. Si el problema es un bloqueo puedes evaluar utilizar niveles de aislamiento basados en instantáneas, pero si es un inter-bloqueo entonces te toca revisar bien tu código para encontrar cual es el problema.

    No hay un tiempo recomendable para cuando se presenta un bloqueo, solo una regla general, haz las zonas criticas de tu aplicación (desde tu primer update o insert en una transacción hasta su commit) lo más cortas posibles. 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 1 de diciembre de 2017 7:17
    Moderador
  • puedes usar try catch y en el cath hacer lo que quieras. También puedes alterar el timeout por sesión no por server. Si el problema es un bloqueo puedes evaluar utilizar niveles de aislamiento basados en instantáneas, pero si es un inter-bloqueo entonces te toca revisar bien tu código para encontrar cual es el problema.

    No hay un tiempo recomendable para cuando se presenta un bloqueo, solo una regla general, haz las zonas criticas de tu aplicación (desde tu primer update o insert en una transacción hasta su commit) lo más cortas posibles. 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    El bloqueo se presento, por la ejecución de otro proceso al mismo tiempo que se ejecutaba el mio.

    me  podrías dar un ejemplo de como alterar el timeout por sesión en sql server.

    aun soy muy novato en sql server....como puedo evaluar  utilizando niveles de  aislamiento basados en instantáneas

    gracias

    viernes, 1 de diciembre de 2017 13:54
  • En los procedimientos que he realizado...no utilizo isolation level. no se que isolation level este utilizando.

    El procedimiento es disparado cada vez que entra una operación  externa (retiro,consignacion,consulta de saldo) a la empresa. por eso no puedo darte el numero de registro exacto.

    agradecería cualquier consejo
    • Editado Hacerdan viernes, 1 de diciembre de 2017 14:00
    viernes, 1 de diciembre de 2017 14:00
  • empezando por la primera pregunta

    https://docs.microsoft.com/en-us/sql/t-sql/statements/set-lock-timeout-transact-sql 

    la segunda, básicamente tu habilitas esa funcionalidad en tu base de datos y no tienes nada mas que hacer. 

    ALTER DATABASE xxxx
        SET ALLOW_SNAPSHOT_ISOLATION ON;

    Este comando necesitara que estés solo en la base de datos. si mal no recuerdo. 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 1 de diciembre de 2017 14:18
    Moderador