Sql server 2008 是否可以进行';脏更新';?

Sql server 2008 是否可以进行';脏更新';?,sql-server-2008,concurrency,Sql Server 2008,Concurrency,我有一个每小时运行的存储过程。此存储过程计算用户艺术品的流行度,并更新主艺术品表上的流行度列。这是同一张表,用户每次上传新作品时都会在其中写入内容 问题是,此存储过程与另一个事务一直处于死锁状态 考虑到我并不担心每件作品的实际分数(它只需要大致呈现网站内容的质量),也不需要100%准确,因为这个分数不是公开的 因此,我希望能够对本专栏进行“脏更新” 这可能吗 我不相信有什么肮脏的更新。最好调查并解决死锁情况。在更新周围放置一个块。假设您发出一条update语句来计算整个表,SQL Server引

我有一个每小时运行的存储过程。此存储过程计算用户艺术品的流行度,并更新主艺术品表上的流行度列。这是同一张表,用户每次上传新作品时都会在其中写入内容

问题是,此存储过程与另一个事务一直处于死锁状态

考虑到我并不担心每件作品的实际分数(它只需要大致呈现网站内容的质量),也不需要100%准确,因为这个分数不是公开的

因此,我希望能够对本专栏进行“脏更新”


这可能吗

我不相信有什么肮脏的更新。最好调查并解决死锁情况。

在更新周围放置一个块。

假设您发出一条update语句来计算整个表,SQL Server引擎在执行事务时会在整个表上获取UPDLOCK。事务可能需要很长时间,这就是为什么您会看到在线系统的锁争用

您可以通过在存储过程中将DEADLOCK_PRIORITY设置为LOW或HIGH来确保哪个事务(在线事务或艺术评分存储过程)死亡。然后让失败者检查错误1205,如果已回滚,请重试


另一个(更好的)选择可能是让你的艺术品评分系统分块进行更新。先做A,然后做B等等,这样交易会更快。(您可能需要将数据拆分为更细的粒度。大致编写并测试)

另一个存储过程真的需要在事务中吗?如果不把它拆开,它就会修好