我有一个巨大的进程(带有activerecord的程序),它会锁定不同的表一段时间。
现在我想在这个过程中检查我的所有锁。那么哪些表被锁定了多长时间。我可以使用活动监视器,但我需要更多信息。
是否有像SQL Server Profiler这样的工具,它在进程中列出所有锁?或者某处是一个可以检查的logtable?
更多信息:
我们的程序中有一个进程,它使用数据库中的一半表。创建新行,更新现有行,选择信息...该过程仅在夜间运行。现在他们希望在白天运行这个过程,我必须评估该请求的可能性。我已经检查了源代码,但我还想检查数据库中是否存在更长的锁,表锁和这些东西,只是为了确定。我们的想法是,在我们的测试环境中启动该过程并收集所有锁定信息。但我没有看到活动监视器中的所有锁定,而且我无法在活动监视器上查找一小时。
答案 0 :(得分:0)
有许多DMVS可以帮助您收集锁定统计信息。通过SQL作业根据您的频率运行此查询并将其记录到表中以供以后分析..
- 这显示了每个会话中涉及的所有锁
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