在过程中确定锁

Determine locks during process

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

更多信息:
我们的程序中有一个进程使用了​​我们数据库中一半的表。创建新行、更新现有行、select 信息...该过程仅在夜间进行 运行。现在他们想在白天 运行 这个过程,我必须评估该请求的可能性。我已经检查了源代码,但我还想检查数据库是否有更长的锁、表锁和类似的东西,只是为了确定。这个想法是,在我们的测试环境中启动该过程并收集所有锁信息。但是我没有在 activity 监视器中看到所有锁,而且我无法在 activity 监视器上查找一个小时。

有许多 DMVS 可以帮助您根据您的频率通过 SQL 作业收集锁定 stats.Run 此查询,并将其记录到 table 以供以后分析。

--这显示了每个会话涉及的所有锁

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_RequestsDMV来收集屏蔽,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