在没有锁定表的情况下,在使用表时更新表中数据的最佳方法是什么?

Rya*_*ery 5 sql sql-server truncate sql-server-2005 views

我在SQL Server 2005数据库中有一个表,它经常使用.它有我们的产品库存信息.我们每小时从仓库获得更新,在过去的几年里,我们一直在运行一个截断表并更新信息的例程.这只需要几秒钟,直到现在都没有问题.我们现在有更多的人使用我们的系统来查询这些信息,因此我们看到由于阻塞过程而导致大量超时.

......所以......

我们研究了我们的选择,并想出了一个缓解问题的想法.

  1. 我们有两张桌子.表A(活动)和表B(不活动).
  2. 我们将创建一个指向活动表的视图(表A).
  3. 所有需要此表信息的东西(4个对象)现在都必须通过视图.
  4. 每小时例程将截断非活动表,使用最新信息更新它,然后更新视图以指向非活动表,使其成为活动表.
  5. 此例程将确定哪个表处于活动状态,并基本上在它们之间切换视图.

这有什么问题?切换视图中间查询会导致问题吗?这可以吗?

感谢您的专业知识.

额外的信息

  • 例程是一个SSIS包,它执行许多步骤并最终截断/更新有问题的表

  • 阻塞进程是查询此表的另外两个存储过程.

Sam*_*ron 7

您是否考虑过使用快照隔离.这将允许您为您的SSIS开始一个大的交易,仍然可以从表中读取.

这个解决方案似乎比切换表更清晰.