我在 SQL Server 2005 数据库中有一个经常使用的表。它有我们现有产品的可用性信息。我们每小时都会从仓库获取更新,在过去的几年里,我们一直在运行一个例程来截断表并更新信息。这只需要几秒钟,而且到目前为止还不是问题。现在有更多的人使用我们的系统来查询此信息,因此我们看到由于阻塞进程而导致大量超时。
...所以...
我们研究了我们的选择,并提出了一个缓解问题的想法。
- 我们有两张 table 。表 A(事件)和表 B(非事件)。
- 我们将创建一个指向事件表(表 A)的 View 。
- 所有需要此表信息的事物(4 个对象)现在都必须通过 View 。
- 每小时例程将截断非事件表,使用最新信息更新它,然后更新 View 以指向非事件表,使其成为事件表。
- 此例程将确定哪个表处于事件状态,并基本上在它们之间切换 View 。
这有什么问题吗?在查询中切换 View 会导致问题吗?这可以吗?
感谢您的专业知识。
额外信息
该例程是一个 SSIS 包,它执行许多步骤并最终截断/更新相关表
阻塞进程是查询此表的另外两个存储过程。
最佳答案
您是否考虑过使用snapshot isolation 。它将允许您为您的 SSIS 内容开始一个大的事务,并且仍然从表中读取。
这个解决方案看起来比切换表干净得多。
关于sql - 在使用表时更新表中的数据而不锁定表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888338/