【问题标题】:Query to get historical queries that ran and caused transactional locks查询以获取运行并导致事务锁定的历史查询
【发布时间】:2016-09-25 04:45:33
【问题描述】:

有没有办法,或者我可以运行的存储过程或查询,来获取以前在数据库上运行并锁定表的所有查询/事务的列表。

我正在考虑进行分析以查看哪些事务正在锁定哪些表。

【问题讨论】:

  • 所有查询在任何时候都在不同程度上锁定表,但这不是问题,除非它影响性能或导致死锁。您是否有想要解决的性能或死锁问题?
  • 如果您需要此类数据,您必须自己收集(或使用第 3 方工具)
  • @Nick.McDermaid 是的,这正是我想要的。知道我该怎么做。
  • 您的问题过于笼统,无法给出具体答案。你为什么不从这里开始:stackoverflow.com/questions/694581/…

标签: sql-server sql-server-2008-r2


【解决方案1】:

这似乎是一个更棘手的问题。

关于锁定的历史数据,只要我们不是在谈论诸如“查询存储”之类的东西或其他可以被认为是“外部”的技术,都是由 DMV sys.dm_db_index_operational_stats 积累的。

这个DMV比较稳定。但它的对应方sys.dm_exec_procedure_stats 倾向于在重新编译可能积累一些“有趣”数据的特定计划时立即改变。

随着统计数据的变化率越来越高,累积数据的这种瞬态特性往往会更加明显。因此,您可以看到,有时(甚至大部分时间)您可能无法使用 **stats 系列的 DMV 获得锁定与其原因之间的确切联系,但是知道遗漏是如何发生的,您有一些信息可以弥补判断。

添加sys.sql_dependencies链接锁影响的对象和过程,这是一个起点。

请注意 ***stats DMV 系列的其他资源:

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 2022-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多