sql server语言 - sql report 3.0 deadlock



当我需要在同一张表上查询两份不同的销售报告时,遇到了死锁。

对两份报告的查询都是

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

这是正确的解决方案吗?。

我认为销售报告将不准确,因为会有脏读

通常情况下,在同一个表上使用两个SELECTS不会导致死锁。你有一些流程在写吗?这是整个报告代码吗?您在报告中使用生产表还是它们的复制副本?这一切都可能计入其中。

我建议您运行SQL事件探查器(服务器端跟踪(来运行跟踪并检查结果。您通常应该找到死锁图,这意味着您可以准确地确定哪个查询在之前运行并且与另一个查询冲突。

作为解决方法,您可以使用您的解决方案,但这只是一种解决方法。你可能有一个到高的不准确度。

最新更新