当我需要在同一个表上查询两个不同的销售报表时,遇到了死锁。
对两个报表的查询均为
select * from tableA
inner join tableB on ...
inner join tableC on ...
我对这两个销售报告的解决方案
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
select * from tableA
inner join tableB on ...
inner join tableC on ...
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
这是正确的解决方案吗?
我认为销售报告不会准确,因为会有恶意阅读。
发布于 2015-07-03 12:41:53
通常,您不会仅仅通过在同一个表上使用两个SELECTS
来获得死锁。你有没有一些进程在写它?这是整个报表代码吗?您在报告中使用生产表还是它们的复制副本?这一切都可能会被算入其中。
我建议您运行SQL Profiler (服务器端跟踪)来运行跟踪并检查结果。通常,您应该会找到死锁图,这意味着您可以准确地确定哪个查询在另一个查询之前运行,并且与另一个查询冲突。
作为一种解决方法,您可以使用您的解决方案,但也只是作为一种解决方法。你可能会有很高的不精确度。
https://stackoverflow.com/questions/31198075
复制相似问题