none
Script de monitoração de LOCKS RRS feed

  • Pergunta

  • Eu preciso criar um script de monitoração de LOCKS para o SQL Server 2008. Isto já tem pronto ou eu precisaria criar um script?

    É um poco urgente. Obrigado.

    quinta-feira, 5 de janeiro de 2012 13:08

Respostas

  • Antero,

          ok com essa tabela consigo dar um select e pegar as transaçoes que estão em LOCK, mas isso se eu der um select no momento que um LOCK está acontecendo. Onde na verdade eu queria era ter um monitoramento onde fossem guardados os LOCKS gerados na base. Acho que isto so pode ser feito com um tracer, gostaria de saber se da para fazer isto com algum utilitario do SQL Server 2008?

       Caso não seja possivel a melhor amneira seria fazendo um tracer? Segue abaixo a query que identifica o objeto a base, dentro outros dados, da transação que está em LOCK.

     SELECT

            L.request_session_id AS SPID,
            DB_NAME(L.resource_database_id) AS DatabaseName,
            O.Name AS LockedObjectName,
            P.object_id AS LockedObjectId,
            L.resource_type AS LockedResource,
            L.request_mode AS LockType,
            ST.text AS SqlStatementText,       
            ES.login_name AS LoginName,
            ES.host_name AS HostName,
            TST.is_user_transaction as IsUserTransaction,
            AT.name as TransactionName,
            CN.auth_scheme as AuthenticationMethod
    FROM   
      sys.dm_tran_locks L
            JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
            JOIN sys.objects O ON O.object_id = P.object_id
            JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
            JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
            JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
            JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
            CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
    WHERE  
      resource_database_id = db_id()
    ORDER BY
      L.request_session_id 


    • Editado Igor Auler quinta-feira, 5 de janeiro de 2012 17:40
    • Marcado como Resposta Igor Auler terça-feira, 31 de janeiro de 2012 15:56
    quinta-feira, 5 de janeiro de 2012 17:39

Todas as Respostas

  • Você pode usar a sys.dm_tran_locks.

     

    Abaixo o link da descrição completa:

     

    http://msdn.microsoft.com/pt-br/library/ms190345.aspx

     

    ;)

    • Sugerido como Resposta Antero Marques quinta-feira, 5 de janeiro de 2012 14:25
    quinta-feira, 5 de janeiro de 2012 14:25
  • Antero,

          ok com essa tabela consigo dar um select e pegar as transaçoes que estão em LOCK, mas isso se eu der um select no momento que um LOCK está acontecendo. Onde na verdade eu queria era ter um monitoramento onde fossem guardados os LOCKS gerados na base. Acho que isto so pode ser feito com um tracer, gostaria de saber se da para fazer isto com algum utilitario do SQL Server 2008?

       Caso não seja possivel a melhor amneira seria fazendo um tracer? Segue abaixo a query que identifica o objeto a base, dentro outros dados, da transação que está em LOCK.

     SELECT

            L.request_session_id AS SPID,
            DB_NAME(L.resource_database_id) AS DatabaseName,
            O.Name AS LockedObjectName,
            P.object_id AS LockedObjectId,
            L.resource_type AS LockedResource,
            L.request_mode AS LockType,
            ST.text AS SqlStatementText,       
            ES.login_name AS LoginName,
            ES.host_name AS HostName,
            TST.is_user_transaction as IsUserTransaction,
            AT.name as TransactionName,
            CN.auth_scheme as AuthenticationMethod
    FROM   
      sys.dm_tran_locks L
            JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
            JOIN sys.objects O ON O.object_id = P.object_id
            JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
            JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
            JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
            JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
            CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
    WHERE  
      resource_database_id = db_id()
    ORDER BY
      L.request_session_id 


    • Editado Igor Auler quinta-feira, 5 de janeiro de 2012 17:40
    • Marcado como Resposta Igor Auler terça-feira, 31 de janeiro de 2012 15:56
    quinta-feira, 5 de janeiro de 2012 17:39