我有以下情况:
由多个程序访问(更新、删除、插入和选择)的表。实际上它们是相同的,但由多个用户实例化。该表永远不会增长到超过 1000 行,因为程序会在使用后删除数据并再次插入新数据。这就像供应商/收藏家的情况。
由于这是一个工业生产场景,我必须保证一些操作,所以当用户确认任何操作时,程序会使用来自系统上其他表的数据更新该表。
所以我们在很多命令上实现了事务,结果是很多死锁的情况。
我想要一些关于我们可以做些什么来避免这些锁的提示。实际上我们不需要事务,我们只需要保证一个命令会运行,如果由于某种原因它失败了,整个操作就会被回滚。我不知道是否有办法在不使用事务的情况下做到这一点。
PS:我们使用的是 SQL Server 2008 R2。
PS2:我发现我在更新的 FROM 子句中使用的一些系统表是个大问题。这些表用于整个系统并获得大量的插入/更新/选择。所以我只是锁定了不应该的东西,因为我没有使用这个程序更改该表上的数据。
前任:
Update t1
set x= 1
from systable1 as t
inner join systable2 t2
where .....
我想这是个大问题,所以我WITH (NOLOCK)
在 t 和 t2 以及WITH (ROWLOCK)
t1 上添加了提示。
我必须提到的另一件事是,这是一个测试环境,我们正在最大程度地强调数据库和程序,因为我们不能冒险在生产中失败。
如果失败,我可以使用检查点策略重新执行操作吗?
谢谢。