2016-06-14 74 views
0

我有一个巨大的进程(具有activerecord的程序),它锁定了不同的表的一段时间。
现在我想检查过程中的所有锁。那么哪些表格被锁定以及多长时间。我可以使用活动监视器,但我需要更多信息。 是否有像SQL Server Profiler这样的工具,它列出了进程中的所有锁?或者是某处有一个记录表,我可以检查吗?确定进程中的锁

更多信息:
我们的程序中有一个过程使用我们数据库中的一半表格。创建新行,更新现有行,选择信息...该过程仅在夜间运行。现在他们想要在白天运行这个流程,并且必须评估该请求的可能性。我已经检查过源代码,但我也想检查数据库以查找更长的锁,表锁等等,只是为了确保。我们的想法是,在我们的测试环境中启动该过程并收集所有锁定信息。但是我没有看到活动监视器中的所有锁,并且我无法在活动监视器上查找一个小时。

回答

0

有很多的DMV,这将帮助你通过SQL作业来收集锁stats.Run根据您的频率此查询并记录该表以供以后分析..

- 这说明所有的参与每个环节

SELECT resource_type, resource_associated_entity_id, 
    request_status, request_mode,request_session_id, 
    resource_description 
    FROM sys.dm_tran_locks lck 
    WHERE resource_database_id = db_id() 

- 您也可以使用sys.dm_exec_requests视图 DMV收集的阻塞锁,wait_types了解更多

select status,wait_type,last_wait_type,txt.text from sys.dm_exec_requests ec 
cross apply 
sys.dm_exec_sql_text(ec.sql_handle) txt