sql-server – 外键是否会导致死锁并阻碍READ COMMITTED SNAPSHO
这是一个来自 https://stackoverflow.com/questions/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automatically的后续问题 虽然READ_COMMITTED_SNAPSHOT ON,但在同时运行大型报表时,我仍然在ASP.NET应用程序中出现死锁/超时情况. 所以我有两个问题: >我如何检查Transaction Isolation Level Snapshot是否按预期工作?
我如何检查FK是否真的对死锁/超时情况负责,这是否意味着我可以删除这些外键以防止死锁(什么是可接受的努力)? 注意:我只是从导致死锁的表中读取. 对此主题的任何想法都非常感谢. 编辑Here is a Deadlock-Graph.也许有人可以帮我理解导致死锁的原因.似乎它发生时没有任何报告只由web应用程序引起,当两个事务想要写同一个表时(一个更新和一个插入,插入是存储过程).为什么它只获取页锁以及如何仅启用行锁? Insert-SP使用TRANSACTION ISOLATION LEVEL REPEATABLE READ. 我强烈怀疑两个触发器(一个更新和一个插入)是造成死锁的原因.这是insert-trigger: CREATE TRIGGER [dbo].[CreateRMAFiDates] ON [dbo].[RMA] AFTER INSERT AS BEGIN SET NOCOUNT ON; UPDATE RMA SET [fiCreationDate]=(SELECT idDate FROM tdefDate WHERE CONVERT(VARCHAR,INSERTED.Creation_Date,112) = tdefDate.Text),[fiPopDate]=(SELECT idDate FROM tdefDate WHERE CONVERT(VARCHAR,INSERTED.POP_Date,[fiManufactureDate]=(SELECT idDate FROM tdefDate WHERE CONVERT(VARCHAR,INSERTED.Manufacture_Date,112) = tdefDate.Text) FROM INSERTED; END 因此,此触发器更新RMA-Table导致更新触发器触发的原因(类似).死锁图是否证实了我的假设?我想我会删除那些触发器并创建一个每天运行一次的SP,这是完全足够的,因为这些列仅适用于SSAS-Cube(Molap). 编辑:顺便说一句,因为我删除了这些触发器,所以没有死锁:) 解决方法如果SQLCAT团队说使用读取提交隔离完成FK验证,那么他们必须知道他们在谈论什么.强调验证.真正的问题是为什么报告会触发FK验证?验证发生在写入上,报告应该是读取.您的报告都会导致写入,在这种情况下,快照隔离级别将无效,导致死锁的原因也不同.取得进展的唯一方法是捕获死锁图. 至于另一个问题,如何检查你是否在快照隔离下运行:查看 (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |