gpt4 book ai didi

sql-server - Sql Server 更新命令中丢失更新异常

转载 作者:行者123 更新时间:2023-12-04 06:59:11 24 4
gpt4 key购买 nike

我很困惑。

我有一个 ReadCommitted 隔离级别的事务。除其他外,我还更新了其中的计数器值,类似于以下内容:

Update tblCount set counter = counter + 1

我的应用程序是一个桌面应用程序,并且此事务恰好经常同时发生。我们最近注意到一个错误,有时计数器值不会更新或丢失。我们还在每次计数器更新时插入一条记录,因此我们确定记录已被插入,但不知何故计数器无法更新。这种情况在 2000 次同时交易中发生一次。

我严重怀疑这是我面临的丢失更新异常,但是如果您查看上面的命令,它只是根据自己的值更新计数器:如果我已经启动了一个事务并且事务已经达到了这个语句,它应该已经锁定了排。这不应该导致丢失更新,但它正在以某种方式发生。

这个更新命令是分两部分工作的吗?就像首先它读取计数器值(在此期间它没有获得排他锁)然后写入新的计算值(当它确实获得排他锁时)?

请帮忙,我真的很困惑。

最佳答案

更新命令不分两部分起作用。它只适用于一个。

还有其他事情发生,我的第一个猜测是您的交易正在回滚是出于另一个原因。例如,在这 2,000 个事务中,有一个事务可能正在回滚——尤其是当你同时做大量事情时——而且它根本没有成功。

该更新也可能不是导致问题的原因 - 您可能由于其他事务而涉及死锁,并且它们可能在更新命令之前(或在更新命令期间)失败。

我会缩小并询问有关事务错误处理的问题。您是否在 try/catch block 中做所有事情?您是否在事务失败时捕获错误级别?如果没有,您将需要使用 Profiler 捕获跟踪以了解发生了什么。

关于sql-server - Sql Server 更新命令中丢失更新异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com