我公司的一个SQL数据库最近每天产生大量死锁(某天>100)
我正在尝试解决这些死锁的原因,我注意到许多死锁发生在同一个表中,我是数据库管理员的新手,所以我不知道对死锁报告进行统计的最佳方法是什么,就像我想计算和可视化事情,比如涉及哪些表,多少次,死锁通常发生的时间......所以我可以向我的老板报告,是否有一种简单的方法可以将所有死锁 xml 列导入到某些内容中像微软excel?
我在这里附上了死锁报告(.xel 文件)
对不起,英语不是我的母语。
感谢您的时间,
我目前正在使用分析器捕获死锁事件。(死锁,死锁图,死锁链)。
到目前为止一切顺利,但为此,客户端计算机需要不断运行和在线。
==> 有没有办法直接在 SQL Server 上捕获和收集死锁事件作为后台作业?
有没有办法在 MSSQL 上造成人为的无限死锁?我需要引起死锁,以便我可以测试一些存储过程来自动消除死锁。有没有办法做到这一点?
我想为 M 个用户自动保留 N 个对象的库存。
我有两张库存跟踪表,一张用于全球库存,一张用于个人库存。
有两个表,因为我必须为每个对象以及每个用户强制执行最大允许保留。例如,一个对象可能被限制为总共保留 1000 个,每个用户最多保留 10 个该对象。
全局清单表以 [ObjectID] 为唯一键,个人清单表以 [UserID, ObjectID] 为唯一键。
为 3 个对象保留库存的示例请求如下所示。一些对象有限制,而另一些则没有。
[
{ObjectID: 'A', QuantityToReserve: 1},
{ObjectID: 'C', QuantityToReserve: 2, GlobalMax: 1000, PersonalMax: 10},
{ObjectID: 'B', QuantityToReserve: 5}
]
Run Code Online (Sandbox Code Playgroud)
原子预留是通过启动一个事务,然后首先更新全局清单表中的行来实现的,对于所有对象 ID,按升序排列。
没有限制的对象的更新语句如下所示:
UPDATE [GlobalInventory] WITH (ROWLOCK, XLOCK, HOLDLOCK)
SET [Count] = [Count] + @QuantityToReserve
WHERE [ObjectID] = @ObjectID
Run Code Online (Sandbox Code Playgroud)
具有限制的对象的更新语句如下所示:
UPDATE [GlobalInventory] WITH (ROWLOCK, XLOCK, HOLDLOCK)
SET …Run Code Online (Sandbox Code Playgroud)